From 66a0de16bbd022df1cde13a84964f351095fcc6b Mon Sep 17 00:00:00 2001 From: Nitsud Yarg Date: Thu, 30 May 2024 23:43:32 -0700 Subject: [PATCH] More modular game Actor setup. --- project.godot | 8 +++--- src/actor.gd | 40 +++++++++++++++++++++------ src/movement_component.gd | 18 ++++++++++++ src/playerC/Player-KinematicBody2D.gd | 35 ++--------------------- src/playerC/Player.tscn | 2 +- src/playerC/player_move_component.gd | 8 ++---- src/playerC/sm.gd | 2 ++ src/playerC/states/fall.gd | 14 +++++----- src/playerC/states/jump.gd | 14 +++++----- src/playerC/states/move.gd | 14 +++++----- 10 files changed, 83 insertions(+), 72 deletions(-) create mode 100644 src/movement_component.gd create mode 100644 src/playerC/sm.gd diff --git a/project.godot b/project.godot index 4bf3158..d85a928 100644 --- a/project.godot +++ b/project.godot @@ -19,10 +19,10 @@ _global_script_classes=[ { "language": "GDScript", "path": "res://src/playerC/resources/FrameSounds.gd" }, { -"base": "Reference", -"class": "Movement", +"base": "Node", +"class": "MovementComponent", "language": "GDScript", -"path": "res://src/playerC/player_move_component.gd" +"path": "res://src/movement_component.gd" }, { "base": "Node", "class": "State", @@ -52,7 +52,7 @@ _global_script_classes=[ { _global_script_class_icons={ "Actor": "", "FrameSoundEffects": "", -"Movement": "", +"MovementComponent": "", "State": "", "StateAnimatedActor": "", "StateMachine": "", diff --git a/src/actor.gd b/src/actor.gd index 9ba6f2d..2fd5df6 100644 --- a/src/actor.gd +++ b/src/actor.gd @@ -1,17 +1,39 @@ class_name Actor extends KinematicBody2D +var velocity = Vector2(0,0) +var direction = Vector2(-1,0) -# Declare member variables here. Examples: -# var a = 2 -# var b = "text" +export var sprite_facing_right: bool = true +export(Array, Resource) var SoundEffects +onready var movement_animations: AnimatedSprite = $AnimatedSprite -# Called when the node enters the scene tree for the first time. -func _ready(): - pass # Replace with function body. +onready var sound_effect_player = $SE_Player +onready var movement_state_machine: StateMachineAnimatedActor = $Controllers/state_machine -# Called every frame. 'delta' is the elapsed time since the previous frame. -#func _process(delta): -# pass +onready var movement_component = $Controllers/move_component + +var sound_effects_dict: Dictionary + +##TODO: +# Can't seem to implement the ready and process node functions +# without causing a double run somehow. Not sure why. +# not a huge deal because this is mostly to help with +# interfaces for the state machines. + +var last_sound_frame_animation: String = '' +var last_sound_frame: int = -1 +func play_sound_frame(animation: String, frame: int ): + ##DEBUG: + #if animation == 'run' and frame == 6: + # print("Do the thign! (", animation + str(frame), ")", " (", last_sound_frame_animation + str(last_sound_frame), ")") + if animation != last_sound_frame_animation or frame != last_sound_frame: + last_sound_frame = frame + last_sound_frame_animation = animation + var sound_index = animation + str(frame) + if sound_effects_dict.has(sound_index): + sound_effect_player.stream = sound_effects_dict[sound_index] + sound_effect_player.play() + print("Playing SE: ", sound_index) diff --git a/src/movement_component.gd b/src/movement_component.gd new file mode 100644 index 0000000..83db687 --- /dev/null +++ b/src/movement_component.gd @@ -0,0 +1,18 @@ +class_name MovementComponent +extends Node + +var desired_movement_vector: Vector2 + +# Return the desired direction of movement for the character +# in the range [-1, 1], where positive values indicate a desire +# to move to the right and negative values to the left. +func get_movement_direction() -> float: + return 0.0 + +# Return a boolean indicating if the character wants to jump +func wants_jump() -> bool: + return false + +# Return a boolean indicating if the character wants to jump +func wants_shoot() -> bool: + return false diff --git a/src/playerC/Player-KinematicBody2D.gd b/src/playerC/Player-KinematicBody2D.gd index 53ee66e..3ee4195 100644 --- a/src/playerC/Player-KinematicBody2D.gd +++ b/src/playerC/Player-KinematicBody2D.gd @@ -1,32 +1,17 @@ -extends KinematicBody2D - -var velocity = Vector2(0,0) -var direction = Vector2(-1,0) +extends Actor export var player_number: int = 1 -export var sprite_facing_right: bool = true - -onready var movement_animations: AnimatedSprite = $AnimatedSprite - -export(Array, Resource) var SoundEffects - -onready var movement_state_machine: Node = $Controllers/state_machine - -onready var player_move_component = $Controllers/move_component - onready var player_hurtbox = $Hurtbox_Component/CollisionShape2D onready var gun = $Gun -onready var sound_effect_player = $SE_Player #var sound_effects = preload("res://src/playerC/resources/sound_effects.tres") -var sound_effects_dict: Dictionary func _ready() -> void: - movement_state_machine.init_animated_actor(self, movement_animations, player_move_component) - player_move_component.player_number = player_number + movement_state_machine.init_animated_actor(self, movement_animations, movement_component) + movement_component.player_number = player_number # Experimenting with sound based resources I did this and it worked #sound_effect_player.stream = sound_effects.sounds["pew"] @@ -94,18 +79,4 @@ func shoot_projectile(): #func play_sound(): # sound_effects.stream = "res://assets/Sounds/crappy pew.wav" -var last_sound_frame_animation: String = '' -var last_sound_frame: int = -1 -func play_sound_frame(animation: String, frame: int ): - ##DEBUG: - #if animation == 'run' and frame == 6: - # print("Do the thign! (", animation + str(frame), ")", " (", last_sound_frame_animation + str(last_sound_frame), ")") - if animation != last_sound_frame_animation or frame != last_sound_frame: - last_sound_frame = frame - last_sound_frame_animation = animation - var sound_index = animation + str(frame) - if sound_effects_dict.has(sound_index): - sound_effect_player.stream = sound_effects_dict[sound_index] - sound_effect_player.play() - print("Playing SE: ", sound_index) diff --git a/src/playerC/Player.tscn b/src/playerC/Player.tscn index 7e8360a..524b9ec 100644 --- a/src/playerC/Player.tscn +++ b/src/playerC/Player.tscn @@ -13,7 +13,7 @@ [ext_resource path="res://src/playerC/resources/FrameSounds.gd" type="Script" id=11] [ext_resource path="res://src/components/Hurtbox_Component.tscn" type="PackedScene" id=12] [ext_resource path="res://src/state_modifier.gd" type="Script" id=13] -[ext_resource path="res://src/state_machine_animated_actor.gd" type="Script" id=14] +[ext_resource path="res://src/playerC/sm.gd" type="Script" id=14] [sub_resource type="Resource" id=148] script = ExtResource( 11 ) diff --git a/src/playerC/player_move_component.gd b/src/playerC/player_move_component.gd index 6b4ead9..a5c2d1f 100644 --- a/src/playerC/player_move_component.gd +++ b/src/playerC/player_move_component.gd @@ -1,12 +1,10 @@ -class_name Movement -extends Node +extends MovementComponent -export var flipped_sprite: bool = true +## Deprecated +#export var flipped_sprite: bool = true export var player_number: int = 1 -var desired_movement_vector: Vector2 - # Return the desired direction of movement for the character # in the range [-1, 1], where positive values indicate a desire # to move to the right and negative values to the left. diff --git a/src/playerC/sm.gd b/src/playerC/sm.gd new file mode 100644 index 0000000..8cdfc2e --- /dev/null +++ b/src/playerC/sm.gd @@ -0,0 +1,2 @@ +extends StateMachineAnimatedActor + diff --git a/src/playerC/states/fall.gd b/src/playerC/states/fall.gd index 8dd3b3f..4e62111 100644 --- a/src/playerC/states/fall.gd +++ b/src/playerC/states/fall.gd @@ -29,13 +29,13 @@ func process_physics(delta: float) -> State: elif parent.velocity.x < 0: parent.direction.x = -1 - - if move_component.flipped_sprite == false: - #parent.scale.x = parent.direction.x * -1 - parent.transform.x.x = parent.direction.x * -1 # -1 - else: - #parent.scale.x = parent.direction.x - parent.transform.x.x = parent.direction.x # 1 + parent.transform.x.x = parent.direction.x +# if move_component.flipped_sprite == false: +# #parent.scale.x = parent.direction.x * -1 +# parent.transform.x.x = parent.direction.x * -1 # -1 +# else: +# #parent.scale.x = parent.direction.x +# parent.transform.x.x = parent.direction.x # 1 if parent.is_on_floor(): if parent.velocity.x == 0: diff --git a/src/playerC/states/jump.gd b/src/playerC/states/jump.gd index 63654d5..acff475 100644 --- a/src/playerC/states/jump.gd +++ b/src/playerC/states/jump.gd @@ -33,13 +33,13 @@ func process_physics(delta: float) -> State: parent.direction.x = 1 elif parent.velocity.x < 0: parent.direction.x = -1 - - if move_component.flipped_sprite == false: - #parent.scale.x = parent.direction.x * -1 - parent.transform.x.x = parent.direction.x * -1 # -1 - else: - #parent.scale.x = parent.direction.x - parent.transform.x.x = parent.direction.x # 1 + parent.transform.x.x = parent.direction.x +# if move_component.flipped_sprite == false: +# #parent.scale.x = parent.direction.x * -1 +# parent.transform.x.x = parent.direction.x * -1 # -1 +# else: +# #parent.scale.x = parent.direction.x +# parent.transform.x.x = parent.direction.x # 1 if parent.is_on_floor(): if parent.velocity.x == 0: diff --git a/src/playerC/states/move.gd b/src/playerC/states/move.gd index 7eaef63..8e8fd67 100644 --- a/src/playerC/states/move.gd +++ b/src/playerC/states/move.gd @@ -51,19 +51,19 @@ func process_physics(delta: float) -> State: elif parent.velocity.x < 0: parent.direction.x = -1 - + parent.transform.x.x = parent.direction.x # if move_component.flipped_sprite == true: # animations.flip_h = parent.direction.x > 0 # else: # animations.flip_h = parent.direction.x < 0 # Attempting to flip based on scale instead of sprite flip so that # all children nodes get flipped as well: - if move_component.flipped_sprite == false: - #parent.scale.x = parent.direction.x * -1 - parent.transform.x.x = parent.direction.x * -1 # -1 - else: - #parent.scale.x = parent.direction.x - parent.transform.x.x = parent.direction.x # 1 +# if move_component.flipped_sprite == false: +# #parent.scale.x = parent.direction.x * -1 +# parent.transform.x.x = parent.direction.x * -1 # -1 +# else: +# #parent.scale.x = parent.direction.x +# parent.transform.x.x = parent.direction.x # 1