Improved component system
This commit is contained in:
@ -1,2 +1,6 @@
|
||||
class_name Controller
|
||||
extends Node
|
||||
extends Node
|
||||
|
||||
signal direction_changed(direction: Vector3)
|
||||
signal jumped
|
||||
signal used_skill(slot: int)
|
@ -1,32 +1,34 @@
|
||||
class_name PlayerController
|
||||
extends Controller
|
||||
|
||||
## The character that we're controlling.
|
||||
var player: Player
|
||||
|
||||
## We need the movement component to check if we can perform certain actions.
|
||||
var movement: MovementComponent
|
||||
var skills: SkillsComponent
|
||||
|
||||
func _init(new_player: Player):
|
||||
player = new_player
|
||||
movement = player.find_child("Movement")
|
||||
movement = player.get_node("Movement")
|
||||
skills = player.get_node("Skills")
|
||||
name = "Controller"
|
||||
|
||||
func _unhandled_input(event):
|
||||
func _unhandled_input(event: InputEvent):
|
||||
if Global.interacting_with_ui:
|
||||
return
|
||||
|
||||
# Calculate the direction
|
||||
update_direction()
|
||||
update_actions(event)
|
||||
|
||||
func update_direction():
|
||||
var move := Input.get_vector("move_left", "move_right", "move_forward", "move_backward")
|
||||
var direction := (Global.camera.global_basis * Vector3(move.x, 0, move.y))
|
||||
direction.y = 0
|
||||
direction = direction.normalized()
|
||||
|
||||
# Notify components
|
||||
player.set_direction(direction)
|
||||
direction_changed.emit(direction)
|
||||
|
||||
func update_actions(event: InputEvent):
|
||||
if event.is_action_pressed("jump") && movement && movement.can_jump():
|
||||
player.jump()
|
||||
jumped.emit()
|
||||
|
||||
for i in range(4):
|
||||
if event.is_action_pressed("skill_%d" % (i + 1)):
|
||||
player.use_skill(i)
|
||||
used_skill.emit(i)
|
||||
|
@ -9,6 +9,7 @@ var server_position: Vector3
|
||||
|
||||
func _init(new_player: Player):
|
||||
player = new_player
|
||||
name = "Controller"
|
||||
|
||||
func _ready():
|
||||
server_position = player.position
|
||||
@ -17,9 +18,9 @@ func _process(_delta):
|
||||
var move := server_position - player.position
|
||||
move.y = 0.0
|
||||
|
||||
if move.length_squared() < 0.01:
|
||||
player.set_direction(Vector3.ZERO)
|
||||
if move.length_squared() < 0.02:
|
||||
direction_changed.emit(Vector3.ZERO)
|
||||
return
|
||||
|
||||
var direction := Vector3(move.x, 0, move.z).normalized()
|
||||
player.set_direction(direction)
|
||||
direction_changed.emit(direction)
|
Reference in New Issue
Block a user