extends Node2D ## Terrain scrolls at 1x; this elevated mist moves at 1.22x and 1.34x. const TEXTURE := preload("res://assets/planets/cloud_mist.png") var seed_value := 0 var _banks: Array[Dictionary] = [] var _time := 0.0 var clouds: Node2D var shadows: Node2D func _ready() -> void: texture_filter = CanvasItem.TEXTURE_FILTER_LINEAR_WITH_MIPMAPS shadows = Node2D.new() shadows.name = "CloudShadows" shadows.z_index = 5 add_child(shadows) clouds = Node2D.new() clouds.name = "AboveLander" clouds.z_index = 70 add_child(clouds) var rng := RandomNumberGenerator.new() rng.seed = seed_value ^ 0x434c4f55 var mist_material := ShaderMaterial.new() mist_material.shader = preload("res://resources/effects/cloud_mist.gdshader") for y in range(-3,4): for x in range(-3,4): var mist := Sprite2D.new() mist.texture = TEXTURE mist.material = mist_material mist.scale = Vector2.ONE*rng.randf_range(1050,1550)/TEXTURE.get_width() mist.rotation = rng.randf_range(-PI,PI) mist.modulate = Color(0.9,0.95,1.0,rng.randf_range(0.24,0.34)) clouds.add_child(mist) var shadow := Sprite2D.new() shadow.texture = TEXTURE shadow.material = mist_material shadow.scale = mist.scale shadow.rotation = mist.rotation shadow.modulate = Color(0.02,0.04,0.06,0.055) shadows.add_child(shadow) _banks.append({"mist":mist,"shadow":shadow,"origin":Vector2(x*800,y*800)+Vector2(rng.randf_range(-240,240),rng.randf_range(-240,240)),"parallax":1.22 if (x+y)%2 == 0 else 1.34,"speed":rng.randf_range(5,10)}) _process(0) func _process(delta: float) -> void: _time += delta var camera := get_viewport().get_camera_2d() var center := camera.get_screen_center_position() if camera != null else Vector2.ZERO for bank in _banks: var drift := Vector2(float(bank.speed)*_time,float(bank.speed)*_time*0.3) var drifting: Vector2 = bank.origin+drift var location: Vector2 = Vector2(wrapf(drifting.x,-2800,2800),wrapf(drifting.y,-2800,2800))+center*(1.0-float(bank.parallax)) bank.mist.position = location bank.shadow.position = location+Vector2(35,45)