]> Untitled Git - frog-ninja.git/commitdiff
Added Model to round out MVC implementation
authorClifton Palmer <clifton.james.palmer@protonmail.com>
Tue, 6 May 2025 10:12:52 +0000 (13:12 +0300)
committerClifton Palmer <clifton.james.palmer@protonmail.com>
Tue, 6 May 2025 10:12:52 +0000 (13:12 +0300)
Scene.gd
player/InputHandler.gd
player/InputPacket.gd
player/model.gd [new file with mode: 0644]
player/model.gd.uid [new file with mode: 0644]
player/player.gd
player/player.tscn

index 749e9489ea87f592fac2f7f6d6c3ebb4b76b80ba..b43d72fc05e313231ba78d15c04a7ac1a244126e 100644 (file)
--- a/Scene.gd
+++ b/Scene.gd
@@ -2,19 +2,20 @@ extends Node3D
 class_name Scene
 
 
-@onready var _player: Player = %Player
-@onready var _debug: CanvasLayer = %debug
-@onready var _version: String = ProjectSettings.get_setting("application/config/version")
+@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(_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.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.stats.add_property(self, "_version", "")
-       _debug.stats.add_property(_player, "velocity", "length")
-       _debug.stats.add_property(_player, "_idle_time", "round")
+       debug.stats.add_property(self, "version", "")
+       debug.stats.add_property(player, "velocity", "length")
+       #debug.stats.add_property(model, "idle_time", "round")
 
 
 func _input(event: InputEvent) -> void:
index 35a0aee64417c14210fc1a45eee4739e45500ee2..109b804aae2ef4f9be571178c28db4018507c1ed 100644 (file)
@@ -8,5 +8,7 @@ func get_camera_input_direction() -> Vector2:
 
 func get_player_input() -> InputPacket:
        var p: InputPacket = InputPacket.new()
+       if Input.is_action_just_pressed("player-dash"):
+               p.actions.append("dash")
        p.movement_direction = Input.get_vector("player-left", "player-right", "player-forward", "player-backward")
        return p
index 0599e1d840a3326c80dfd0988ad46e37ad677aa6..e3a354f4f14e93f9a1c431c815cf6cc2748e3d95 100644 (file)
@@ -2,3 +2,4 @@ extends Node
 class_name InputPacket
 
 var movement_direction: Vector2 = Vector2.ZERO
+var actions: Array[String] = []
diff --git a/player/model.gd b/player/model.gd
new file mode 100644 (file)
index 0000000..c2d8c78
--- /dev/null
@@ -0,0 +1,43 @@
+extends Node
+class_name PlayerModel
+
+
+@export_group("Movement")
+@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 rotation_speed := 10.0
+@export var idle_timeout := 5.0
+
+var idle_time := 0.0
+var floor_normal := Vector3.ZERO
+var ground_slope_input := 0.0
+
+@onready var _player: Player = $".."
+@onready var _camera: Camera3D = %camera
+
+
+func get_velocity_by_input(input_pkt: InputPacket, delta: float) -> Vector3:
+       var new_velocity: Vector3 = _player.velocity
+       
+       if _player.is_on_floor():
+               # 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_pkt.movement_direction.y + right * input_pkt.movement_direction.x
+                       ).normalized()
+               move_direction.y = 0
+               
+               # if we're not stuck, then it's okay to set the velocity
+               floor_normal = _player.get_floor_normal()
+               ground_slope_input = (PI / 2) - new_velocity.angle_to(floor_normal)
+               new_velocity = new_velocity.move_toward(
+                       move_direction * (walk_speed + ground_slope_input * walk_speed),
+                       acceleration * delta
+                       )
+       else:
+               new_velocity += _player.get_gravity() * air_speed * delta
+
+       return new_velocity
diff --git a/player/model.gd.uid b/player/model.gd.uid
new file mode 100644 (file)
index 0000000..4ef3c81
--- /dev/null
@@ -0,0 +1 @@
+uid://bwox6frn7fmgt
index ce43a7889bf43ee7ecae329a1fa3a9ce5be99f1e..6e32bcd88de3f1f9a1b5d81b10a7880a1f7ead76 100644 (file)
@@ -1,76 +1,12 @@
 extends CharacterBody3D
 class_name Player
 
-##########
-# settings
-##########
-
-@export_group("Movement")
-@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 rotation_speed := 10.0
-@export var idle_timeout := 5.0
-
-######
-# init
-######
 
 @onready var _input: InputHandler = %Input
-@onready var _camera: Camera3D = %camera
-@onready var _skin: AnimatedSkin = %skin
-
-var _last_movement_direction: Vector3 = rotation
-var _floor_normal := Vector3.ONE
-var _ground_slope_input := 0.0
-var _idle_time: float = 0.0
-var _player_speed: float = walk_speed
+@onready var _model: PlayerModel = %Model
 
 
-##########
-# movement
-##########
-
 func _physics_process(delta: float) -> void:
        var input_pkt := _input.get_player_input()
-       velocity = _get_velocity_by_input(input_pkt, delta)
+       velocity = _model.get_velocity_by_input(input_pkt, delta)
        move_and_slide()
-
-
-# Get the XZ input direction based on player's input relative to the camera
-func _get_player_move_direction(input_dir: Vector2) -> Vector3:
-       var forward := _camera.global_basis.z
-       var right := _camera.global_basis.x
-       var move_direction := (forward * input_dir.y + right * input_dir.x).normalized()
-       move_direction.y = 0
-       return move_direction
-
-
-func _get_velocity_by_input(input_pkt: InputPacket, delta: float) -> Vector3:
-       var new_velocity: Vector3 = velocity
-       
-       if is_on_floor():
-               var move_dir := _get_player_move_direction(input_pkt.movement_direction)
-               
-               # if we're not stuck, then it's okay to set the velocity
-               _floor_normal = get_floor_normal()
-               _ground_slope_input = (PI / 2) - new_velocity.angle_to(_floor_normal)
-               new_velocity = new_velocity.move_toward(
-                       move_dir * (_player_speed + _ground_slope_input * _player_speed),
-                       acceleration * delta
-                       )
-       else:
-               new_velocity += get_gravity() * air_speed * delta
-
-       return new_velocity
-
-#########
-# actions
-#########
-
-func _player_dash():
-       if _last_movement_direction != Vector3.ZERO:
-               var dash_local_pos = _last_movement_direction * dash_length
-               # TODO: check if valid position, crop the vector to last valid position
-               global_position += dash_local_pos
index 4d86286d93133f4442f4a0383ce61c5e70b091a4..4814692aba5346b1450c55712aecbee660d08b17 100644 (file)
@@ -1,9 +1,10 @@
-[gd_scene load_steps=6 format=3 uid="uid://cchu1yltrhuk3"]
+[gd_scene load_steps=7 format=3 uid="uid://cchu1yltrhuk3"]
 
 [ext_resource type="PackedScene" uid="uid://dvkx3t15l7mfb" path="res://skin/prototype_skin.tscn" id="1_4flbx"]
 [ext_resource type="Script" uid="uid://dcv34jq0jett0" path="res://player/player.gd" id="1_onrkg"]
 [ext_resource type="Script" uid="uid://bspr3vafk6wi2" path="res://player/InputHandler.gd" id="3_g1dw6"]
 [ext_resource type="Script" uid="uid://c5mn28v6ujngk" path="res://player/CameraHandler.gd" id="3_yw30f"]
+[ext_resource type="Script" uid="uid://bwox6frn7fmgt" path="res://player/model.gd" id="5_qjkh3"]
 
 [sub_resource type="CapsuleShape3D" id="CapsuleShape3D_sh265"]
 
@@ -19,18 +20,22 @@ shape = SubResource("CapsuleShape3D_sh265")
 [node name="skin" parent="." instance=ExtResource("1_4flbx")]
 unique_name_in_owner = true
 
-[node name="CameraPivot" type="Node3D" parent="."]
+[node name="CameraHandler" type="Node3D" parent="."]
 unique_name_in_owner = true
 script = ExtResource("3_yw30f")
 
-[node name="spring" type="SpringArm3D" parent="CameraPivot"]
+[node name="spring" type="SpringArm3D" parent="CameraHandler"]
 unique_name_in_owner = true
 transform = Transform3D(-1, -2.99003e-08, 8.21505e-08, 0, 0.939693, 0.34202, -8.74228e-08, 0.34202, -0.939693, 0, 1.52762, 0)
 spring_length = 3.0
 
-[node name="camera" type="Camera3D" parent="CameraPivot/spring"]
+[node name="camera" type="Camera3D" parent="CameraHandler/spring"]
 unique_name_in_owner = true
 
 [node name="Input" type="Node" parent="."]
 unique_name_in_owner = true
 script = ExtResource("3_g1dw6")
+
+[node name="Model" type="Node" parent="."]
+unique_name_in_owner = true
+script = ExtResource("5_qjkh3")