From 7acdc7633c4f1455e14d932d93bc62f3ec7de4e6 Mon Sep 17 00:00:00 2001 From: Dustin Date: Sun, 13 Apr 2025 09:11:19 -0700 Subject: [PATCH] Collision State works on change! --- .../collision_shape2D_state_receiver.gd | 14 +++++++++++++ .../PlayerE-CollisionShape2D_StateReceiver.gd | 21 +++++++++++++++++++ src/actors/players/playerE/PlayerE.tscn | 3 ++- 3 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 src/actors/players/playerE/PlayerE-CollisionShape2D_StateReceiver.gd diff --git a/lib/classes/collision_shape2D_state_receiver.gd b/lib/classes/collision_shape2D_state_receiver.gd index ee2b948..3425b74 100644 --- a/lib/classes/collision_shape2D_state_receiver.gd +++ b/lib/classes/collision_shape2D_state_receiver.gd @@ -7,10 +7,14 @@ export var callable_state_machine :NodePath var request_state_change: FuncRef onready var current_state :StateAnimatedActor +## return to default when no state function +export var default_shape_when_no_state_function :bool = true # Declare member variables here. Examples: # var a = 2 # var b = "text" +var default_shape :Shape2D +var default_transform :Transform2D # Called when the node enters the scene tree for the first time. @@ -21,6 +25,10 @@ func _ready(): get_node(callable_state_machine).connect("state_changed", self,"_on_state_change") ## A reference to the current state machine state current_state = get_node(callable_state_machine).current_state + + default_shape = shape.duplicate() + ##TODO: Are transforms primitives? Do they get passed by value? + default_transform = transform @@ -35,6 +43,12 @@ func _on_state_change(old_state_name:String, new_state :State): current_state = new_state if has_method('_on_state_change_' + current_state.name): call('_on_state_change_' + current_state.name) + else: + if default_shape_when_no_state_function: + if debug_component: + print ("Returning to default collision shape") + shape = default_shape + transform = default_transform else: push_warning("Received non animated Actor state.") diff --git a/src/actors/players/playerE/PlayerE-CollisionShape2D_StateReceiver.gd b/src/actors/players/playerE/PlayerE-CollisionShape2D_StateReceiver.gd new file mode 100644 index 0000000..c012dd6 --- /dev/null +++ b/src/actors/players/playerE/PlayerE-CollisionShape2D_StateReceiver.gd @@ -0,0 +1,21 @@ +extends CollisionShape2D_StateReceiver + + +# Declare member variables here. Examples: +# var a = 2 +# var b = "text" + + +# Called when the node enters the scene tree for the first time. +func _ready(): + pass # Replace with function body. + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +#func _process(delta): +# pass + +func _on_state_change_hurt(): + print ("<---- Hey you called me to get hurt. Bruh.") + transform = transform.translated(Vector2(-10,10)) + pass diff --git a/src/actors/players/playerE/PlayerE.tscn b/src/actors/players/playerE/PlayerE.tscn index abdc4be..c8a68cd 100644 --- a/src/actors/players/playerE/PlayerE.tscn +++ b/src/actors/players/playerE/PlayerE.tscn @@ -30,7 +30,7 @@ [ext_resource path="res://src/components/PewMachine.tscn" type="PackedScene" id=28] [ext_resource path="res://lib/components/Stamina_Component.tscn" type="PackedScene" id=29] [ext_resource path="res://src/actors/players/playerE/states/death.tres" type="Resource" id=30] -[ext_resource path="res://lib/classes/collision_shape2D_state_receiver.gd" type="Script" id=31] +[ext_resource path="res://src/actors/players/playerE/PlayerE-CollisionShape2D_StateReceiver.gd" type="Script" id=31] [sub_resource type="Resource" id=3] resource_local_to_scene = true @@ -133,6 +133,7 @@ sound_effects = [ SubResource( 4 ), SubResource( 5 ), SubResource( 6 ) ] position = Vector2( 0, 2 ) shape = SubResource( 1 ) script = ExtResource( 31 ) +debug_component = true callable_state_machine = NodePath("../Movement_StateMachine") [node name="Health_Component" parent="." index="8" instance=ExtResource( 17 )]