From 1200ac7e32df80b8ef06c6ff0b21ab0db56b46e7 Mon Sep 17 00:00:00 2001 From: henry Date: Tue, 23 Jun 2026 18:19:28 +0100 Subject: [PATCH] Initial scaffolding. --- .../player_weapon_resources/vanguard.tres | 2 +- scenes/EffectComponent.tscn | 6 +++++ scenes/effects/flash_effect.gd | 27 +++++++++++++++++++ scenes/effects/flash_effect.gd.uid | 1 + scripts/base_effect.gd | 16 +++++++++++ scripts/base_effect.gd.uid | 1 + scripts/effects_component.gd | 25 +++++++++++++++++ scripts/effects_component.gd.uid | 1 + 8 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 scenes/EffectComponent.tscn create mode 100644 scenes/effects/flash_effect.gd create mode 100644 scenes/effects/flash_effect.gd.uid create mode 100644 scripts/base_effect.gd create mode 100644 scripts/base_effect.gd.uid create mode 100644 scripts/effects_component.gd create mode 100644 scripts/effects_component.gd.uid diff --git a/resources/player_weapon_resources/vanguard.tres b/resources/player_weapon_resources/vanguard.tres index dcb3580..61f7a1c 100644 --- a/resources/player_weapon_resources/vanguard.tres +++ b/resources/player_weapon_resources/vanguard.tres @@ -8,7 +8,7 @@ script = ExtResource("2_w7xlm") shot_name = "vanguard" bullet_scene = ExtResource("1_hm46f") damage = 5 -speed = 500 +speed = 550 projectiles = 5 spacing = 30.0 origin = -15 diff --git a/scenes/EffectComponent.tscn b/scenes/EffectComponent.tscn new file mode 100644 index 0000000..bfd716f --- /dev/null +++ b/scenes/EffectComponent.tscn @@ -0,0 +1,6 @@ +[gd_scene format=3 uid="uid://bq3xhbfgkt22l"] + +[ext_resource type="Script" uid="uid://65d3hbrpm21x" path="res://scripts/effects_component.gd" id="1_ee0kt"] + +[node name="EffectsComponent" type="Node2D" unique_id=1393438576] +script = ExtResource("1_ee0kt") diff --git a/scenes/effects/flash_effect.gd b/scenes/effects/flash_effect.gd new file mode 100644 index 0000000..db8fb26 --- /dev/null +++ b/scenes/effects/flash_effect.gd @@ -0,0 +1,27 @@ +class_name FlashEffect +extends BaseEffect + +@export var flash_color: Color = Color.WHITE +@export var flash_speed: float = 10.0 + +var _timer: float = 0.0 +var _original_material: Material + +func start(target: Node) -> void: + _timer = 0.0 + if target is CanvasItem: + _original_material = target.material + # Apply a ShaderMaterial that handles the flash + var flash_material = ShaderMaterial.new() + flash_material.shader = preload("res://shaders/flash.gdshader") + target.material = flash_material + +func process(delta: float, target: Node) -> void: + _timer += delta + if target.material is ShaderMaterial: + var intensity = (sin(_timer * flash_speed) + 1.0) / 2.0 + target.material.set_shader_parameter("flash_intensity", intensity) + +func stop(target: Node) -> void: + if target is CanvasItem: + target.material = _original_material diff --git a/scenes/effects/flash_effect.gd.uid b/scenes/effects/flash_effect.gd.uid new file mode 100644 index 0000000..79af5c6 --- /dev/null +++ b/scenes/effects/flash_effect.gd.uid @@ -0,0 +1 @@ +uid://deak7vcr7ss5l diff --git a/scripts/base_effect.gd b/scripts/base_effect.gd new file mode 100644 index 0000000..e871e76 --- /dev/null +++ b/scripts/base_effect.gd @@ -0,0 +1,16 @@ +class_name BaseEffect +extends Resource + +@export var duration: float = 0.5 + +# Called when the effect is applied +func start(target: Node) -> void: + pass + +# Called every frame (if needed) +func process(delta: float) -> void: + pass + +# Clean up any changes to the target +func stop(target: Node) -> void: + pass diff --git a/scripts/base_effect.gd.uid b/scripts/base_effect.gd.uid new file mode 100644 index 0000000..221b0c2 --- /dev/null +++ b/scripts/base_effect.gd.uid @@ -0,0 +1 @@ +uid://cs7xpxd1vpl56 diff --git a/scripts/effects_component.gd b/scripts/effects_component.gd new file mode 100644 index 0000000..c5e5308 --- /dev/null +++ b/scripts/effects_component.gd @@ -0,0 +1,25 @@ +class_name EffectComponent +extends Node2D + +@export var target_node: Node + +var active_effects: Array[BaseEffect] = [] + +func _process(delta: float) -> void: + # Process all active effects backwards so we can safely remove finished ones + for i in range(active_effects.size() - 1, -1, -1): + var effect = active_effects[i] + effect.process(delta, target_node) + + # Example: simple time-based expiration + effect.duration -= delta + if effect.duration <= 0.0: + remove_effect(effect) + +func apply_effect(effect: BaseEffect) -> void: + effect.start(target_node) + active_effects.append(effect) + +func remove_effect(effect: BaseEffect) -> void: + effect.stop(target_node) + active_effects.erase(effect) diff --git a/scripts/effects_component.gd.uid b/scripts/effects_component.gd.uid new file mode 100644 index 0000000..16a022f --- /dev/null +++ b/scripts/effects_component.gd.uid @@ -0,0 +1 @@ +uid://65d3hbrpm21x