]> Untitled Git - frog-ninja.git/blob - player/model.gd
Added Model to round out MVC implementation
[frog-ninja.git] / player / model.gd
1 extends Node
2 class_name PlayerModel
3
4
5 @export_group("Movement")
6 @export var walk_speed := 8.0
7 @export var dash_length := 10.0
8 @export var air_speed := 3.0
9 @export var acceleration := 30.0
10 @export var rotation_speed := 10.0
11 @export var idle_timeout := 5.0
12
13 var idle_time := 0.0
14 var floor_normal := Vector3.ZERO
15 var ground_slope_input := 0.0
16
17 @onready var _player: Player = $".."
18 @onready var _camera: Camera3D = %camera
19
20
21 func get_velocity_by_input(input_pkt: InputPacket, delta: float) -> Vector3:
22         var new_velocity: Vector3 = _player.velocity
23         
24         if _player.is_on_floor():
25                 # Get the XZ input direction based on player's input relative to the camera
26                 var forward := _camera.global_basis.z
27                 var right := _camera.global_basis.x
28                 var move_direction := (
29                         forward * input_pkt.movement_direction.y + right * input_pkt.movement_direction.x
30                         ).normalized()
31                 move_direction.y = 0
32                 
33                 # if we're not stuck, then it's okay to set the velocity
34                 floor_normal = _player.get_floor_normal()
35                 ground_slope_input = (PI / 2) - new_velocity.angle_to(floor_normal)
36                 new_velocity = new_velocity.move_toward(
37                         move_direction * (walk_speed + ground_slope_input * walk_speed),
38                         acceleration * delta
39                         )
40         else:
41                 new_velocity += _player.get_gravity() * air_speed * delta
42
43         return new_velocity