extends RefCounted const LIGHT_RADIUS := 3400.0 const LIGHT_ENERGY := 0.28 const SHIP_LIGHT_ENERGY := 0.16 const LIGHT_COLOR := Color(1.0, 0.93, 0.82) static func attach_to(star: Node2D, light_color: Color = LIGHT_COLOR) -> void: var gradient := Gradient.new() gradient.offsets = PackedFloat32Array([0.0, 0.25, 0.65, 1.0]) gradient.colors = PackedColorArray([Color.WHITE, Color(1, 1, 1, 0.9), Color(1, 1, 1, 0.5), Color(1, 1, 1, 0)]) var texture := GradientTexture2D.new() texture.gradient = gradient texture.width = 512 texture.height = 512 texture.fill = GradientTexture2D.FILL_RADIAL texture.fill_from = Vector2(0.5, 0.5) texture.fill_to = Vector2(0.5, 0.0) var light := PointLight2D.new() light.name = "StarLight" light.texture = texture light.texture_scale = LIGHT_RADIUS * 2.0 / texture.width light.color = light_color light.energy = LIGHT_ENERGY light.range_item_cull_mask = 1 light.shadow_enabled = true light.shadow_item_cull_mask = 1 light.shadow_filter = Light2D.SHADOW_FILTER_PCF5 light.shadow_filter_smooth = 2.0 star.add_child(light) # A separate mask lights hulls without their own silhouettes darkening them. var hull_light := PointLight2D.new() hull_light.name = "HullLight" hull_light.texture = texture hull_light.texture_scale = light.texture_scale hull_light.color = light_color hull_light.energy = SHIP_LIGHT_ENERGY hull_light.range_item_cull_mask = 2 star.add_child(hull_light) var glow := Sprite2D.new() glow.name = "StarGlow" glow.texture = texture glow.scale = Vector2.ONE * (float(star.get("radius")) * 5.0 / texture.width) glow.modulate = Color(light_color, 0.09) glow.z_index = -1 var material := CanvasItemMaterial.new() material.blend_mode = CanvasItemMaterial.BLEND_MODE_ADD material.light_mode = CanvasItemMaterial.LIGHT_MODE_UNSHADED glow.material = material star.add_child(glow)