Files
slime-moldies/slime_simulation.gd
2025-08-03 01:39:59 +03:00

59 lines
1.8 KiB
GDScript

extends Node2D
@export var render_width: int = 1920
@export var render_height: int = 1080
@export var decay_factor: float = 0.95
@onready var view := $View
@onready var pass_viewport := $SubViewport
@onready var pass2_viewport := $SubViewport2
@onready var agent_shader: ShaderMaterial = $SubViewport/Pass.material
@onready var trail_shader: ShaderMaterial = $SubViewport2/Pass.material
const MAX_TEXTURES: int = 2
var next_texture: int = 0
var frame_count: int = 0
func _ready():
RenderingServer.call_on_render_thread(_initialize_render.bind(render_width, render_height))
func _process(_delta: float) -> void:
next_texture = (next_texture + 1) % MAX_TEXTURES
RenderingServer.call_on_render_thread(
_render_process.bind(next_texture, frame_count, decay_factor)
)
frame_count = frame_count + 1
# Below is for rendering
var rd: RenderingDevice = null
var sim_texture: Texture2D = null
func _create_initial_sim_texture(width: int, height: int) -> ImageTexture:
var sim_image := Image.create_empty(width, height, false, Image.FORMAT_RGBF)
sim_texture = ImageTexture.create_from_image(sim_image)
return sim_texture
func _initialize_render(width: int, height: int) -> void:
rd = RenderingServer.get_rendering_device()
trail_shader.set_shader_parameter("sim_texture", pass_viewport.get_texture().get_rid())
trail_shader.set_shader_parameter("decay_factor", decay_factor)
func _render_process(next_texture: int, frame_count: int, decay_factor: float) -> void:
if frame_count > 0:
agent_shader.set_shader_parameter("sim_texture", pass2_viewport.get_texture().get_rid())
trail_shader.set_shader_parameter("decay_factor", decay_factor)
trail_shader.set_shader_parameter("sim_texture", pass_viewport.get_texture().get_rid())
# agent_shader.set_shader_parameter("sim_texture", pass2_viewport.get_texture().get_rid())