]> Untitled Git - frog-ninja.git/commitdiff
Fixed up moves
authorClifton Palmer <clifton.james.palmer@protonmail.com>
Tue, 6 May 2025 13:20:33 +0000 (16:20 +0300)
committerClifton Palmer <clifton.james.palmer@protonmail.com>
Tue, 6 May 2025 13:20:33 +0000 (16:20 +0300)
Scene.gd
player/Move.gd
player/dash.gd
player/idle.gd
player/model.gd
player/player.gd
player/walk.gd

index b43d72fc05e313231ba78d15c04a7ac1a244126e..e733bfb7814cabd1ba131b0eb6975fe726d00a81 100644 (file)
--- a/Scene.gd
+++ b/Scene.gd
@@ -3,19 +3,19 @@ class_name Scene
 
 
 @onready var player: Player = %Player
-@onready var model: PlayerModel = %Model
 @onready var debug: CanvasLayer = %debug
 @onready var version: String = ProjectSettings.get_setting("application/config/version")
 
 
 func _ready() -> void:
        debug.draw.add_vector(player, "velocity", 1, 1, Color(0,1,0,1))
-       #_debug.draw.add_vector(model, "floor_normal", 1, 1, Color(0, 0, 1, 1))
-       #_debug.draw.add_vector(model, "last_movement_direction", 1, 1, Color(1,0,0,1))
+       debug.draw.add_vector(player, "floor_normal", 1, 1, Color(0, 0, 1, 1))
+       debug.draw.add_vector(player, "last_movement_direction", 1, 1, Color(1,0,0,1))
        
        debug.stats.add_property(self, "version", "")
+       debug.stats.add_property(player, "state", "")
        debug.stats.add_property(player, "velocity", "length")
-       #debug.stats.add_property(model, "idle_time", "round")
+       debug.stats.add_property(player, "idle_time", "round")
 
 
 func _input(event: InputEvent) -> void:
index 70fb73a15c2c1f450336b2cea9842c0d87ea918c..34018504339bcd5130e62ed24d281e5b76ad30a8 100644 (file)
@@ -3,7 +3,7 @@ class_name Move
 
 ###
 # flags and variables here
-var player: CharacterBody3D
+var player: Player
 var camera: Camera3D
 
 # enums are prioritized by order of list
@@ -18,12 +18,12 @@ static func moves_priority_sort(a: String, b: String):
 
 ###
 
-func should_enter(input: InputPacket) -> String:
+func should_enter(_input: InputPacket) -> String:
        print_debug("Function should_enter must be implemented in its child class!")
        return ""
 
 
-func update(input: InputPacket, delta: float):
+func update(_input: InputPacket, _delta: float):
        pass
 
 
index c06273425e74c2d8feed31b0f87c2efff31ff30c..6b6368f1b7755e77779a87be5979d8f87b16730b 100644 (file)
@@ -7,5 +7,15 @@ func should_enter(input) -> String:
        return input.actions[0]
 
 
-func update(input: InputPacket, delta: float):
-       player.move_and_slide()
+func update(input: InputPacket, _delta: float):
+       # Get the XZ input direction based on player's input relative to the camera
+       var forward := camera.global_basis.z
+       var right := camera.global_basis.x
+       var move_direction := (
+               forward * input.movement_direction.y + right * input.movement_direction.x
+               ).normalized()
+       move_direction.y = 0
+
+       # TODO: check if new_pos is valid!
+       var new_pos := player.last_movement_direction * player.dash_length
+       player.global_position += new_pos
index 0fa5569c2cf7a4bafb8a399f94382e295dc58594..f7bd955244ca123cf6251fe1b5ed6d4bfc86cbff 100644 (file)
@@ -1,7 +1,15 @@
-extends Move
+extends Walk
 class_name Idle
 
 
-func should_enter(input) -> String:
-       input.actions.sort_custom(moves_priority_sort)
-       return input.actions[0]
+func update(input: InputPacket, delta: float):
+       player.idle_time += delta
+       super.update(input, delta)
+
+
+func on_enter_state():
+       player.idle_time = 0.0
+
+
+func on_exit_state():
+       player.idle_time = 0.0
index 05564a8e969b30b9ed0723510e9e971b4f8d9a4b..ec1a9526821ee8cfd89f509d8db8726f8f75a98b 100644 (file)
@@ -15,22 +15,24 @@ var current_move: Move
 ###
 
 func _ready() -> void:
+       # assign starting state
        current_move = moves["idle"]
        
-       # assign player object to each move
+       # assign objects to each move
        for move in moves.values():
                move.player = player
                move.camera = camera
 
 
 func update(input: InputPacket, delta: float):
-       var relevent_move = current_move.should_enter(input)
-       if not relevent_move.is_empty():
+       var relevent_move := current_move.should_enter(input)
+       if moves[relevent_move] != current_move:
                switch_to(relevent_move)
        current_move.update(input, delta)
 
 
 func switch_to(state: String):
+       player.state = state
        current_move.on_exit_state()
        current_move = moves[state]
        current_move.on_enter_state()
index ea89487ec1f06e238059f87e75db972c6089d1d9..6f82ce647d2ecbb2aa6252b1c604a9d7a49facc9 100644 (file)
@@ -6,11 +6,13 @@ class_name Player
 @export var walk_speed := 8.0
 @export var dash_length := 10.0
 @export var air_speed := 3.0
-@export var acceleration := 30.0
+@export var acceleration := 20.0
 @export var rotation_speed := 10.0
 @export var idle_timeout := 5.0
 
-var idle_time := 0.0
+var idle_time := 0.00
+var last_movement_direction := Vector3.ZERO
+var state := ""
 var floor_normal := Vector3.ZERO
 var ground_slope_input := 0.0
 
index 5f536b356b7d2c4a39260913c5ea11ac4a7f9873..e9cf6d9d82397e8f5e657d7926bc92c2e04a2b88 100644 (file)
@@ -8,20 +8,29 @@ func should_enter(input) -> String:
 
 
 func update(input: InputPacket, delta: float):
+       player.velocity = get_new_velocity_from_input(input, delta)
+       player.move_and_slide()
+
+
+func get_new_velocity_from_input(input: InputPacket, delta: float) -> Vector3:
        # Get the XZ input direction based on player's input relative to the camera
        var forward := camera.global_basis.z
        var right := camera.global_basis.x
-       var move_direction := (
+       var movement_direction := (
                forward * input.movement_direction.y + right * input.movement_direction.x
                ).normalized()
-       move_direction.y = 0
+       movement_direction.y = 0
+
+       # save off last movement direction 
+       if movement_direction.length() > 0.2:
+               player.last_movement_direction = movement_direction
        
        # if we're not stuck, then it's okay to set the velocity
-       var floor_normal = player.get_floor_normal()
-       var ground_slope_input = (PI / 2) - player.velocity.angle_to(floor_normal)
-       player.velocity = player.velocity.move_toward(
-               move_direction * (player.walk_speed + ground_slope_input * player.walk_speed),
+       player.floor_normal = player.get_floor_normal()
+       player.ground_slope_input = (PI / 2) - player.velocity.angle_to(player.floor_normal)
+       var new_velocity = player.velocity.move_toward(
+               movement_direction * (player.walk_speed + player.ground_slope_input * player.walk_speed),
                player.acceleration * delta
                )
-
-       player.move_and_slide()
+       
+       return new_velocity