inheritance is hard

main
Bel LaPointe 2025-08-22 13:10:53 -06:00
parent d99cd1cd69
commit 3d4e8bd619
7 changed files with 29 additions and 25 deletions

View File

@ -1,12 +1,12 @@
extends Node extends Node
var speed = 1 var speed = 1.0
func to_move_rotate(delta: float): func to_move_rotate(global_transform, delta: float):
var mv = Vector3.ZERO var mv = Vector3.ZERO
var rot = Vector3.ZERO var rot = 0.0
for state in _states(): for state in _states():
var duo = _duo_for_state(delta, state) var duo = _duo_for_state(global_transform, delta, state)
mv += duo[0] mv += duo[0]
rot += duo[1] rot += duo[1]
return [mv, rot] return [mv, rot]
@ -64,8 +64,9 @@ func _states_turning():
return [STATE_TURNING_RIGHT] return [STATE_TURNING_RIGHT]
return [] return []
func _duo_for_state(delta: float, state): func _duo_for_state(global_transform, delta: float, state):
var direction = Vector2.ZERO var direction = Vector2.ZERO
var rotation = 0.0
match state: match state:
STATE_MOVING_FORWARD: STATE_MOVING_FORWARD:
direction.y = -1 direction.y = -1
@ -76,23 +77,21 @@ func _duo_for_state(delta: float, state):
STATE_MOVING_RIGHT: STATE_MOVING_RIGHT:
direction.x = 1 direction.x = 1
STATE_TURNING_LEFT: STATE_TURNING_LEFT:
pass rotation = speed * delta
rotate_object_local(Vector3.UP, speed * delta)
STATE_TURNING_RIGHT: STATE_TURNING_RIGHT:
pass rotation = -speed * delta
rotate_object_local(Vector3.UP, -speed * delta)
STATE_IDLE: STATE_IDLE:
pass pass
if direction == Vector2.ZERO: if direction == Vector2.ZERO:
return [Vector3.ZERO, Vector3.ZERO] return [Vector3.ZERO, rotation]
direction = direction.normalized() direction = direction.normalized()
var forward = global_transform.basis.z var forward = global_transform.basis.z
var right = global_transform.basis.x var right = global_transform.basis.x
var relative_direction = (forward * direction.y + right * direction.x) var relative_direction = (forward * direction.y + right * direction.x)
relative_direction.x *= speed relative_direction.x *= speed * delta
relative_direction.z *= speed relative_direction.z *= speed * delta
relative_direction.y = -speed #relative_direction.y = -speed
return [relative_direction, Vector3.ZERO] return [relative_direction, rotation]

View File

@ -1,4 +1,4 @@
extends "res://Entities/Characters/Players/Kobolds/kobold.gd" extends "res://Entities/Characters/Players/Kobolds/kobold.gd"
func _ready(): func _ready():
mover.speed = 3 self.mover.speed = 1.5

View File

@ -4,14 +4,14 @@ func _input(event):
if event is InputEventKey: if event is InputEventKey:
match event.keycode: match event.keycode:
KEY_W: KEY_W:
self.state_move_forward = event.pressed self.mover.state_move_forward = event.pressed
KEY_A: KEY_A:
self.state_move_left = event.pressed self.mover.state_move_left = event.pressed
KEY_S: KEY_S:
self.state_move_backward = event.pressed self.mover.state_move_backward = event.pressed
KEY_D: KEY_D:
self.state_move_right = event.pressed self.mover.state_move_right = event.pressed
KEY_Q: KEY_Q:
self.state_turn_left = event.pressed self.mover.state_turn_left = event.pressed
KEY_E: KEY_E:
self.state_turn_right = event.pressed self.mover.state_turn_right = event.pressed

View File

@ -1,8 +1,13 @@
extends PhysicsBody3D extends PhysicsBody3D
var mover = new("res://Entities/Characters/Movers/pedal.gd") var mover := preload("res://Entities/Characters/Movers/pedal.gd").new()
func _physics_process(delta: float): func _physics_process(delta: float):
duo = self.mover.to_move_rotate(delta) var duo = self.mover.to_move_rotate(self.global_transform, delta)
velocity = duo[0] self._physics_process_with(duo[0], duo[1])
move_and_slide()
func _physics_process_with(vel, rot):
self.velocity = vel
self.rotate_object_local(Vector3.UP, rot)
print("vel", vel)
self.move_and_collide(self.velocity)

0
Examples/mvp-walk-with-collision/icon.svg.import Executable file → Normal file
View File

0
Examples/mvp-walk-with-collision/project.godot Executable file → Normal file
View File

0
Examples/mvp-walk-with-collision/root.tscn Executable file → Normal file
View File