From f13c4a706130133c7036dd47c82bab79b5764a21 Mon Sep 17 00:00:00 2001 From: Dustin Date: Sat, 10 May 2025 08:18:06 -0700 Subject: [PATCH] Modifiers are resources now so I can easily dump them into levels. Yay. --- lib/classes/state_modifier.gd | 6 +-- lib/components/Modifier_Component.gd | 20 ++++---- lib/components/Modifier_Receiver.gd | 46 +++++++++++-------- project.godot | 2 +- src/actors/players/playerE/PlayerE.tscn | 6 +++ .../players/playerE/states/attack_punch.tres | 6 +++ .../players/playerE/states/attack_shoot.tres | 6 +++ .../players/playerE/states/attack_sword.tres | 6 +++ src/actors/players/playerE/states/climb.tres | 6 +++ src/actors/players/playerE/states/crouch.tres | 6 +++ .../players/playerE/states/crouch_move.tres | 6 +++ src/actors/players/playerE/states/death.tres | 6 +++ .../players/playerE/states/enter_right.tres | 6 +++ src/actors/players/playerE/states/land.tres | 6 +++ .../players/playerE/states/ledge_climb.tres | 6 +++ .../players/playerE/states/ledge_grab.tres | 6 +++ src/levels/CloneBox.tscn | 3 ++ .../level_templates/LevelTemplate.tscn | 37 ++++++++++++++- 18 files changed, 152 insertions(+), 34 deletions(-) diff --git a/lib/classes/state_modifier.gd b/lib/classes/state_modifier.gd index 460b74b..130e104 100644 --- a/lib/classes/state_modifier.gd +++ b/lib/classes/state_modifier.gd @@ -1,5 +1,5 @@ class_name StateModifier -extends Reference +extends Resource ## State modification ## ## A state modifier doesn't have any direct control of a game object. @@ -33,7 +33,7 @@ var debug: bool = false ## the state animation. Or perform a 'Replace Animation' var modifier_type = TYPE.NONE -var name :String = '' +export var name :String = '' #var ready :bool = false var is_active: bool = false @@ -64,7 +64,7 @@ signal modifier_event(event_id ) #var animation_sequence_timer: Timer var timeout: Timer -var timeout_seconds: float = 0.0 +export var timeout_seconds: float = 0.0 # Meant to be called on timeout or other counters this modifier may have. # Should be updated whenever modifier owner transfers diff --git a/lib/components/Modifier_Component.gd b/lib/components/Modifier_Component.gd index 0e7c15a..a1b356a 100644 --- a/lib/components/Modifier_Component.gd +++ b/lib/components/Modifier_Component.gd @@ -1,5 +1,6 @@ extends Area2D +export var modifier :Resource var modifier_type = 0 @@ -23,20 +24,21 @@ export var gravity_modifier: int = 0 # var a = 2 # var b = "text" -var modifier :StateModifier +#var modifier :StateModifier #var modifier_properties: ModifierProperties # Called when the node enters the scene tree for the first time. func _ready(): - modifier = StateModifier.new() - modifier.ready( modifier_name, animation_name , modifier.TYPE.NONE, timeout_seconds) - modifier.modifier_properties = ModifierProperties.new( move_speed, - gravity_modifier, - move_acceleration, - move_speed_modifier, - move_modifier_move_acceleration, - jerk_factor) + assert(modifier is StateModifier) +# modifier = StateModifier.new() +# modifier.ready( modifier_name, animation_name , modifier.TYPE.NONE, timeout_seconds) +# modifier.modifier_properties = ModifierProperties.new( move_speed, +# gravity_modifier, +# move_acceleration, +# move_speed_modifier, +# move_modifier_move_acceleration, +# jerk_factor) print("Debug Direction property shy are you stopid?! ", directional_modifier) modifier.modifier_properties.directional_modifier = directional_modifier diff --git a/lib/components/Modifier_Receiver.gd b/lib/components/Modifier_Receiver.gd index f70a652..0ef6f21 100644 --- a/lib/components/Modifier_Receiver.gd +++ b/lib/components/Modifier_Receiver.gd @@ -11,14 +11,16 @@ extends Node2D # This node can keep an array of various interactibles within a level # and provide several helper functions for managing them perhaps. -export(String) var modifier_parent_callback = "" +export var enabled :bool = true + +export var callable_state_machine :NodePath +var request_push_state_modifier: FuncRef + export var debug_receiver :bool = false -var call_function: FuncRef -#var interactable_function_callables = [] -var modifier_collection = [] + # Declare member variables here. Examples: # var a = 2 @@ -30,24 +32,28 @@ var modifier_collection = [] # Called when the node enters the scene tree for the first time. func _ready(): - if modifier_parent_callback: - call_function = funcref(owner, modifier_parent_callback) - else: - print("Warning: No modifier receiver function defined on ", owner.name) + assert(callable_state_machine != null) + + ## FuncRef to request state machine change state + request_push_state_modifier = funcref(get_node(callable_state_machine), 'push_state_modifier') + assert(request_push_state_modifier.is_valid()) + # Switching to a new model that starts with Hitbox func register_modifier(modifier: StateModifier): - if modifier_collection.has(modifier) == false: - print("New Modifier Registered " + modifier.name) - modifier_collection.append(modifier) - if call_function.is_valid(): - call_function.call_func(modifier, true) + if enabled: + request_push_state_modifier.call_func(StateModifier) +# if modifier_collection.has(modifier) == false: +# print("New Modifier Registered " + modifier.name) +# modifier_collection.append(modifier) +# if call_function.is_valid(): +# call_function.call_func(modifier, true) func remove_modifier(modifier): - print("Modifier Removal " + modifier.name) - if modifier_collection.has(modifier): - var modifier_index = modifier_collection.rfind(modifier) - if modifier_index != -1: - modifier_collection.remove(modifier_index) - if call_function.is_valid(): - call_function.call_func(modifier, false) + print("Modifier Removal not implemented here." + modifier.name) +# if modifier_collection.has(modifier): +# var modifier_index = modifier_collection.rfind(modifier) +# if modifier_index != -1: +# modifier_collection.remove(modifier_index) +# if call_function.is_valid(): +# call_function.call_func(modifier, false) diff --git a/project.godot b/project.godot index 30d6cdd..4e534c8 100644 --- a/project.godot +++ b/project.godot @@ -144,7 +144,7 @@ _global_script_classes=[ { "language": "GDScript", "path": "res://lib/classes/state_machine_animated_actor.gd" }, { -"base": "Reference", +"base": "Resource", "class": "StateModifier", "language": "GDScript", "path": "res://lib/classes/state_modifier.gd" diff --git a/src/actors/players/playerE/PlayerE.tscn b/src/actors/players/playerE/PlayerE.tscn index 1adc02e..5f4a47e 100644 --- a/src/actors/players/playerE/PlayerE.tscn +++ b/src/actors/players/playerE/PlayerE.tscn @@ -46,6 +46,12 @@ horizontal_acceleration = 0.0 horizontal_speed_offset = 0.0 horizontal_speed_offset_acceleration = 0.0 jerk_factor = 0.0 +vertical_speed = 0.0 +vertical_acceleration = 0.0 +vertical_speed_offset = 0.0 +vertical_speed_offset_acceleration = 0.0 +preserve_inertia = true +is_grounded = true animation_sequence = [ "hurt" ] [sub_resource type="Resource" id=4] diff --git a/src/actors/players/playerE/states/attack_punch.tres b/src/actors/players/playerE/states/attack_punch.tres index d113d85..4b3d30f 100644 --- a/src/actors/players/playerE/states/attack_punch.tres +++ b/src/actors/players/playerE/states/attack_punch.tres @@ -14,4 +14,10 @@ horizontal_acceleration = 0.0 horizontal_speed_offset = 0.0 horizontal_speed_offset_acceleration = 0.0 jerk_factor = 0.0 +vertical_speed = 0.0 +vertical_acceleration = 0.0 +vertical_speed_offset = 0.0 +vertical_speed_offset_acceleration = 0.0 +preserve_inertia = true +is_grounded = true animation_sequence = [ "attack-punch" ] diff --git a/src/actors/players/playerE/states/attack_shoot.tres b/src/actors/players/playerE/states/attack_shoot.tres index 5be0974..b2811da 100644 --- a/src/actors/players/playerE/states/attack_shoot.tres +++ b/src/actors/players/playerE/states/attack_shoot.tres @@ -14,4 +14,10 @@ horizontal_acceleration = 0.0 horizontal_speed_offset = 0.0 horizontal_speed_offset_acceleration = 0.0 jerk_factor = 0.0 +vertical_speed = 0.0 +vertical_acceleration = 0.0 +vertical_speed_offset = 0.0 +vertical_speed_offset_acceleration = 0.0 +preserve_inertia = true +is_grounded = true animation_sequence = [ "attack-shoot" ] diff --git a/src/actors/players/playerE/states/attack_sword.tres b/src/actors/players/playerE/states/attack_sword.tres index 76ff91c..0cce2a3 100644 --- a/src/actors/players/playerE/states/attack_sword.tres +++ b/src/actors/players/playerE/states/attack_sword.tres @@ -14,4 +14,10 @@ horizontal_acceleration = 0.0 horizontal_speed_offset = 0.0 horizontal_speed_offset_acceleration = 0.0 jerk_factor = 0.0 +vertical_speed = 0.0 +vertical_acceleration = 0.0 +vertical_speed_offset = 0.0 +vertical_speed_offset_acceleration = 0.0 +preserve_inertia = true +is_grounded = true animation_sequence = [ "attack-sword" ] diff --git a/src/actors/players/playerE/states/climb.tres b/src/actors/players/playerE/states/climb.tres index 9eeffe9..d2823d5 100644 --- a/src/actors/players/playerE/states/climb.tres +++ b/src/actors/players/playerE/states/climb.tres @@ -13,4 +13,10 @@ horizontal_acceleration = 0.0 horizontal_speed_offset = 0.0 horizontal_speed_offset_acceleration = 0.0 jerk_factor = 0.0 +vertical_speed = 0.0 +vertical_acceleration = 0.0 +vertical_speed_offset = 0.0 +vertical_speed_offset_acceleration = 0.0 +preserve_inertia = true +is_grounded = true animation_sequence = [ "climb" ] diff --git a/src/actors/players/playerE/states/crouch.tres b/src/actors/players/playerE/states/crouch.tres index 2543c2a..41c30b8 100644 --- a/src/actors/players/playerE/states/crouch.tres +++ b/src/actors/players/playerE/states/crouch.tres @@ -14,4 +14,10 @@ horizontal_acceleration = 0.0 horizontal_speed_offset = 0.0 horizontal_speed_offset_acceleration = 0.0 jerk_factor = 0.0 +vertical_speed = 0.0 +vertical_acceleration = 0.0 +vertical_speed_offset = 0.0 +vertical_speed_offset_acceleration = 0.0 +preserve_inertia = true +is_grounded = true animation_sequence = [ "idle-crouch" ] diff --git a/src/actors/players/playerE/states/crouch_move.tres b/src/actors/players/playerE/states/crouch_move.tres index 77e5d5b..7c96d65 100644 --- a/src/actors/players/playerE/states/crouch_move.tres +++ b/src/actors/players/playerE/states/crouch_move.tres @@ -14,4 +14,10 @@ horizontal_acceleration = 0.0 horizontal_speed_offset = 0.0 horizontal_speed_offset_acceleration = 0.0 jerk_factor = 0.0 +vertical_speed = 0.0 +vertical_acceleration = 0.0 +vertical_speed_offset = 0.0 +vertical_speed_offset_acceleration = 0.0 +preserve_inertia = true +is_grounded = true animation_sequence = [ "run_crouch" ] diff --git a/src/actors/players/playerE/states/death.tres b/src/actors/players/playerE/states/death.tres index 7c2453b..d7a542f 100644 --- a/src/actors/players/playerE/states/death.tres +++ b/src/actors/players/playerE/states/death.tres @@ -14,4 +14,10 @@ horizontal_acceleration = 0.0 horizontal_speed_offset = 0.0 horizontal_speed_offset_acceleration = 0.0 jerk_factor = 0.0 +vertical_speed = 0.0 +vertical_acceleration = 0.0 +vertical_speed_offset = 0.0 +vertical_speed_offset_acceleration = 0.0 +preserve_inertia = true +is_grounded = true animation_sequence = [ "death" ] diff --git a/src/actors/players/playerE/states/enter_right.tres b/src/actors/players/playerE/states/enter_right.tres index b437daf..9cfbe36 100644 --- a/src/actors/players/playerE/states/enter_right.tres +++ b/src/actors/players/playerE/states/enter_right.tres @@ -13,4 +13,10 @@ horizontal_acceleration = 0.0 horizontal_speed_offset = 0.0 horizontal_speed_offset_acceleration = 0.0 jerk_factor = 0.0 +vertical_speed = 0.0 +vertical_acceleration = 0.0 +vertical_speed_offset = 0.0 +vertical_speed_offset_acceleration = 0.0 +preserve_inertia = true +is_grounded = true animation_sequence = [ "walk" ] diff --git a/src/actors/players/playerE/states/land.tres b/src/actors/players/playerE/states/land.tres index d1b496d..964f989 100644 --- a/src/actors/players/playerE/states/land.tres +++ b/src/actors/players/playerE/states/land.tres @@ -14,4 +14,10 @@ horizontal_acceleration = 0.0 horizontal_speed_offset = 0.0 horizontal_speed_offset_acceleration = 0.0 jerk_factor = 0.0 +vertical_speed = 0.0 +vertical_acceleration = 0.0 +vertical_speed_offset = 0.0 +vertical_speed_offset_acceleration = 0.0 +preserve_inertia = true +is_grounded = true animation_sequence = [ "land" ] diff --git a/src/actors/players/playerE/states/ledge_climb.tres b/src/actors/players/playerE/states/ledge_climb.tres index 637e02d..dc29164 100644 --- a/src/actors/players/playerE/states/ledge_climb.tres +++ b/src/actors/players/playerE/states/ledge_climb.tres @@ -14,4 +14,10 @@ horizontal_acceleration = 0.0 horizontal_speed_offset = 0.0 horizontal_speed_offset_acceleration = 0.0 jerk_factor = 0.0 +vertical_speed = 0.0 +vertical_acceleration = 0.0 +vertical_speed_offset = 0.0 +vertical_speed_offset_acceleration = 0.0 +preserve_inertia = true +is_grounded = true animation_sequence = [ "ledge-climb" ] diff --git a/src/actors/players/playerE/states/ledge_grab.tres b/src/actors/players/playerE/states/ledge_grab.tres index b55d7b8..0478f92 100644 --- a/src/actors/players/playerE/states/ledge_grab.tres +++ b/src/actors/players/playerE/states/ledge_grab.tres @@ -14,4 +14,10 @@ horizontal_acceleration = 0.0 horizontal_speed_offset = 0.0 horizontal_speed_offset_acceleration = 0.0 jerk_factor = 0.0 +vertical_speed = 0.0 +vertical_acceleration = 0.0 +vertical_speed_offset = 0.0 +vertical_speed_offset_acceleration = 0.0 +preserve_inertia = true +is_grounded = true animation_sequence = [ "ledge-grab" ] diff --git a/src/levels/CloneBox.tscn b/src/levels/CloneBox.tscn index 99e077b..8538b43 100644 --- a/src/levels/CloneBox.tscn +++ b/src/levels/CloneBox.tscn @@ -55,3 +55,6 @@ shape = SubResource( 2 ) __meta__ = { "_edit_lock_": true } + +[node name="Camera Bounds" parent="." index="7"] +tile_data = PoolIntArray( -65536, 0, 0, -65521, 0, 0, 65535, 0, 0, 16, 0, 0, 524287, 0, 0, 458768, 0, 0, 589824, 0, 0, 589839, 0, 0 ) diff --git a/src/templates/level_templates/LevelTemplate.tscn b/src/templates/level_templates/LevelTemplate.tscn index 3681418..930d398 100644 --- a/src/templates/level_templates/LevelTemplate.tscn +++ b/src/templates/level_templates/LevelTemplate.tscn @@ -1,6 +1,33 @@ -[gd_scene load_steps=2 format=2] +[gd_scene load_steps=5 format=2] [ext_resource path="res://src/classes/Level.gd" type="Script" id=1] +[ext_resource path="res://assets/UI/no_cam_tile.png" type="Texture" id=2] + +[sub_resource type="ConvexPolygonShape2D" id=5] +points = PoolVector2Array( 20, 20, 0.326027, 20, 0.326027, 0.605103, 20, 0.605103 ) + +[sub_resource type="TileSet" id=6] +0/name = "no_cam_tile.png 0" +0/texture = ExtResource( 2 ) +0/tex_offset = Vector2( 0, 0 ) +0/modulate = Color( 1, 1, 1, 1 ) +0/region = Rect2( 0, 0, 20, 20 ) +0/tile_mode = 0 +0/occluder_offset = Vector2( 0, 0 ) +0/navigation_offset = Vector2( 0, 0 ) +0/shape_offset = Vector2( 0, 0 ) +0/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) +0/shape = SubResource( 5 ) +0/shape_one_way = false +0/shape_one_way_margin = 1.0 +0/shapes = [ { +"autotile_coord": Vector2( 0, 0 ), +"one_way": false, +"one_way_margin": 1.0, +"shape": SubResource( 5 ), +"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) +} ] +0/z_index = 0 [node name="LevelTemplate" type="Node2D"] script = ExtResource( 1 ) @@ -21,3 +48,11 @@ cell_size = Vector2( 16, 16 ) format = 1 [node name="PlayerStart" type="Position2D" parent="."] + +[node name="Camera Bounds" type="TileMap" parent="."] +tile_set = SubResource( 6 ) +cell_size = Vector2( 20, 20 ) +show_collision = true +collision_layer = 256 +collision_mask = 0 +format = 1