beta-1.1
This commit is contained in:
30
Scripts/Characters/Player/States/play_animation_state.gd
Normal file
30
Scripts/Characters/Player/States/play_animation_state.gd
Normal file
@@ -0,0 +1,30 @@
|
||||
extends BaseState
|
||||
class_name PlayerPlayAnimationState
|
||||
|
||||
signal PlayAnimation(animation_name: String)
|
||||
signal AnimationFinished(animation_name: String)
|
||||
|
||||
var current_animation_name: String
|
||||
|
||||
# Public Methods
|
||||
func GetAnimationBaseName() -> String:
|
||||
return "idle"
|
||||
|
||||
|
||||
func GetStateEnum() -> PlayerStateMachine.States:
|
||||
return PlayerStateMachine.States.PLAY_ANIMATION
|
||||
|
||||
|
||||
func Enter(_extra_parameters: Dictionary) -> void:
|
||||
current_animation_name = _extra_parameters["animation_name"]
|
||||
print("Playing Player Animation State: [%s]" % current_animation_name)
|
||||
PlayAnimation.emit(current_animation_name)
|
||||
|
||||
|
||||
func Exit() -> void:
|
||||
current_animation_name = ''
|
||||
|
||||
|
||||
func OnAnimationFinished(animation_name: String) -> void:
|
||||
if animation_name != current_animation_name: return
|
||||
AnimationFinished.emit(animation_name)
|
||||
@@ -0,0 +1 @@
|
||||
uid://wfdtd3xlgrvm
|
||||
@@ -1,7 +1,8 @@
|
||||
extends BaseState
|
||||
|
||||
@export var walking_speed := 100
|
||||
signal StartedWalking
|
||||
|
||||
@export var walking_speed := 100
|
||||
@export var movement_component: MovementComponent
|
||||
@export var direction_component: FacingDirectionComponent
|
||||
@export var body: CharacterBody2D
|
||||
@@ -10,6 +11,10 @@ func GetStateEnum() -> PlayerStateMachine.States:
|
||||
return PlayerStateMachine.States.WALKING
|
||||
|
||||
|
||||
func Enter(_extra_parameters: Dictionary) -> void:
|
||||
StartedWalking.emit()
|
||||
|
||||
|
||||
func Update(_delta: float) -> void:
|
||||
if movement_component.movement_vector == Vector2.ZERO:
|
||||
state_machine.QueueStateChange(PlayerStateMachine.States.IDLE)
|
||||
|
||||
@@ -15,7 +15,8 @@ signal SitOnFurnitureTriggered(sitting_position: Vector2, sitting_direction: Enu
|
||||
signal CutsceneStarted()
|
||||
signal CutsceneEnded()
|
||||
|
||||
@onready var state_machine: PlayerStateMachine = $StateMachine
|
||||
@export var player_sprite: Node2D
|
||||
@export var state_machine: PlayerStateMachine
|
||||
|
||||
# Public Methods
|
||||
func OnSitOnFurnitureTriggered(sitting_position: Vector2, sitting_direction: Enums.Directions):
|
||||
|
||||
@@ -2,6 +2,7 @@ extends Node2D
|
||||
|
||||
signal DrawingBowAnimationFinished
|
||||
signal FiringArrowAnimationFinished
|
||||
signal AnimationFinished(animation_name: String)
|
||||
|
||||
@export var state_machine: PlayerStateMachine
|
||||
@export var direction_component: FacingDirectionComponent
|
||||
@@ -41,6 +42,14 @@ func OnAnimationFinished() -> void:
|
||||
DrawingBowAnimationFinished.emit()
|
||||
elif current_animation.begins_with("firing-arrow-"):
|
||||
FiringArrowAnimationFinished.emit()
|
||||
AnimationFinished.emit(current_animation)
|
||||
|
||||
|
||||
func PlaySpecifiedAnimation(animation_name: String) -> void:
|
||||
current_animation = animation_name
|
||||
for part in all_parts:
|
||||
part.animation = animation_name
|
||||
part.play()
|
||||
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
extends Node
|
||||
class_name PlayerStateMachine
|
||||
|
||||
signal StateChanged
|
||||
|
||||
enum States {
|
||||
UNSET, IDLE, WALKING, USING_ITEM_A, DRAWING_BOW, FIRING_ARROW,
|
||||
SITTING, CUTSCENE
|
||||
SITTING, CUTSCENE, PLAY_ANIMATION
|
||||
}
|
||||
|
||||
@export var states_container: Node
|
||||
@@ -36,7 +38,6 @@ func _ready() -> void:
|
||||
current_state.Enter({})
|
||||
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta: float) -> void:
|
||||
if current_state:
|
||||
current_state.Update(delta)
|
||||
@@ -53,3 +54,5 @@ func _swap_state() -> void:
|
||||
current_state.Enter(queued_parameters)
|
||||
queued_state = PlayerStateMachine.States.UNSET
|
||||
queued_parameters = {}
|
||||
|
||||
StateChanged.emit()
|
||||
|
||||
@@ -41,13 +41,40 @@ func OnPlayerInteractionActionTriggered() -> void:
|
||||
|
||||
# Private Methods
|
||||
func _ready() -> void:
|
||||
var all_players := get_tree().get_nodes_in_group("Player Group")
|
||||
if all_players == null or all_players.is_empty():
|
||||
var player := GroupUtils.GetPlayer()
|
||||
if player == null:
|
||||
return
|
||||
|
||||
for player_node in all_players:
|
||||
var player := player_node as PlayerCharacter
|
||||
|
||||
player.InteractScannerAreaEntered.connect(OnPlayerInteractScannerAreaEntered)
|
||||
player.InteractScannerAreaExited.connect(OnPlayerInteractScannerAreaExited)
|
||||
player.InteractionActionTriggered.connect(OnPlayerInteractionActionTriggered)
|
||||
player.InteractScannerAreaEntered.connect(OnPlayerInteractScannerAreaEntered)
|
||||
player.InteractScannerAreaExited.connect(OnPlayerInteractScannerAreaExited)
|
||||
player.InteractionActionTriggered.connect(OnPlayerInteractionActionTriggered)
|
||||
|
||||
var chests := GroupUtils.GetAllTreasureChests()
|
||||
for chest in chests:
|
||||
chest.OpeningAnimationStarted.connect(_on_chest_opening_animation_started)
|
||||
|
||||
|
||||
func _on_chest_opening_animation_started() -> void:
|
||||
var player := GroupUtils.GetPlayer()
|
||||
var children := player.get_children()
|
||||
|
||||
player.OnCutsceneStarted()
|
||||
|
||||
var camera_idx := children.find_custom(func(x): return x is Camera2D)
|
||||
if camera_idx == -1: return
|
||||
|
||||
# Zoom In
|
||||
var camera := children[camera_idx] as Camera2D
|
||||
var current_zoom := camera.zoom
|
||||
await get_tree().create_tween().tween_property(camera, "zoom", current_zoom + Vector2(2, 2), 0.5).finished
|
||||
|
||||
# Player the player's chest opening animation
|
||||
player.state_machine.QueueStateChange(PlayerStateMachine.States.PLAY_ANIMATION, { "animation_name": "opening-chest-down" })
|
||||
await player.state_machine.StateChanged
|
||||
var play_animation_state := player.state_machine.current_state as PlayerPlayAnimationState
|
||||
await play_animation_state.AnimationFinished
|
||||
player.state_machine.QueueStateChange(PlayerStateMachine.States.IDLE)
|
||||
|
||||
# Zoom back out
|
||||
await get_tree().create_tween().tween_property(camera, "zoom", current_zoom, 0.5).finished
|
||||
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
extends StaticBody2D
|
||||
class_name BaseChest
|
||||
|
||||
signal OpeningAnimationStarted
|
||||
|
||||
@export var is_open := false
|
||||
|
||||
# Public Methods
|
||||
|
||||
@@ -14,6 +14,8 @@ func Open() -> void:
|
||||
return
|
||||
|
||||
super.Open()
|
||||
|
||||
OpeningAnimationStarted.emit()
|
||||
chest_01_sprite.play("opening")
|
||||
|
||||
var item_name: String = Enums.Items.keys()[item_id]
|
||||
|
||||
@@ -6,17 +6,41 @@ signal DialogueEnded
|
||||
|
||||
@onready var label: Label = $ColorRect/MarginContainer/Label
|
||||
|
||||
var _dialogue_arr: PackedStringArray
|
||||
var _dialogue_idx := 0
|
||||
var _dialogue_count := 0
|
||||
|
||||
# Public Methods
|
||||
func OnDialogueTriggered(dialogue_name: String) -> void:
|
||||
label.text = tr(dialogue_name)
|
||||
var text_arr := tr(dialogue_name).split("<nm>")
|
||||
_init_dialogue_box(text_arr)
|
||||
visible = true
|
||||
DialogueStarted.emit()
|
||||
|
||||
|
||||
# Private Methods
|
||||
func _init_dialogue_box(text_arr: PackedStringArray) -> void:
|
||||
_dialogue_arr = text_arr
|
||||
_dialogue_idx = 0
|
||||
_dialogue_count = len(text_arr)
|
||||
|
||||
label.text = _dialogue_arr[_dialogue_idx]
|
||||
|
||||
|
||||
func _proceed_dialogue() -> bool: # Returns true if no more dialogue
|
||||
_dialogue_idx += 1
|
||||
if _dialogue_idx == _dialogue_count:
|
||||
return true
|
||||
label.text = _dialogue_arr[_dialogue_idx]
|
||||
return false
|
||||
|
||||
|
||||
func _process(_delta: float) -> void:
|
||||
if !visible:
|
||||
return
|
||||
|
||||
if Input.is_action_just_pressed("player_interact") and !InputManager.ShouldIgnoreAction("player_interact"):
|
||||
visible = false
|
||||
DialogueEnded.emit()
|
||||
var finished := _proceed_dialogue()
|
||||
if finished:
|
||||
visible = false
|
||||
DialogueEnded.emit()
|
||||
|
||||
Reference in New Issue
Block a user