plein de trucs dont des dialogues!
et ouai! appuye sur e pour parler au npc
This commit is contained in:
75
caracters/human.gd
Normal file
75
caracters/human.gd
Normal file
@@ -0,0 +1,75 @@
|
||||
class_name Human
|
||||
extends CharacterBody2D
|
||||
|
||||
@export var speed = 250 # How fast the player will move (pixels/sec).
|
||||
|
||||
# intensions of the player turner into a boolean
|
||||
@export var wants_to_grab = false;
|
||||
var wants_to_interact_with: Node2D
|
||||
var humanInteractionTarget: Human = null
|
||||
|
||||
@onready var animation_tree := $AnimationTree
|
||||
@onready var animation_player := $AnimationPlayer
|
||||
@onready var state_machine := animation_tree.get("parameters/HumanState/playback") as AnimationNodeStateMachinePlayback
|
||||
|
||||
signal start_intracting
|
||||
|
||||
var last_facing_direction = Vector2(0,1) # facing south
|
||||
var velocityVector = Vector2(0, 0)
|
||||
var targetGlobalPosition = null
|
||||
|
||||
func moveTo(p: Vector2) -> void:
|
||||
targetGlobalPosition = p
|
||||
|
||||
func moveFeetTo(p: Vector2) -> void:
|
||||
targetGlobalPosition = p - Vector2(0, 43)
|
||||
|
||||
func face(whereToFace: Vector2) -> void:
|
||||
last_facing_direction = (whereToFace - global_position).normalized()
|
||||
|
||||
func decideAction() -> void:
|
||||
pass
|
||||
|
||||
func updateFacingDirectionInAnimationTree():
|
||||
animation_tree.set("parameters/HumanState/grabing/blend_position", last_facing_direction)
|
||||
animation_tree.set("parameters/HumanState/idling/blend_position", last_facing_direction)
|
||||
animation_tree.set("parameters/HumanState/walking/blend_position", last_facing_direction)
|
||||
|
||||
func _physics_process(delta):
|
||||
decideAction()
|
||||
|
||||
if (targetGlobalPosition != null):
|
||||
velocity = (targetGlobalPosition - global_position).normalized() *speed
|
||||
targetGlobalPosition = null
|
||||
else:
|
||||
velocity = velocityVector * speed
|
||||
|
||||
if state_machine.get_current_node() == "grabing":
|
||||
velocity = Vector2(0,0);
|
||||
|
||||
# move the caracter
|
||||
move_and_slide()
|
||||
|
||||
# compute the direction the player wants to look at
|
||||
if velocity:
|
||||
last_facing_direction = velocity.normalized()
|
||||
stop_interaction()
|
||||
|
||||
updateFacingDirectionInAnimationTree()
|
||||
|
||||
if wants_to_interact_with and wants_to_interact_with.get_parent().has_method("start_interaction"):
|
||||
if humanInteractionTarget == null:
|
||||
humanInteractionTarget = wants_to_interact_with.get_parent() as Human
|
||||
humanInteractionTarget.start_interaction(self)
|
||||
|
||||
func _on_area_2d_body_entered(body: Node2D) -> void:
|
||||
print(body)
|
||||
|
||||
func start_interaction(askingForInteraction: Human):
|
||||
emit_signal("start_intracting", askingForInteraction)
|
||||
|
||||
func stop_interaction():
|
||||
humanInteractionTarget = null
|
||||
|
||||
func get_feet_global_position():
|
||||
return global_position + Vector2(0, 43)
|
||||
Reference in New Issue
Block a user