oier animation tweaks, say_to_camera command
This commit is contained in:
@@ -0,0 +1,139 @@
|
||||
# `say_to_camera player text [type]`
|
||||
#
|
||||
# Displays the specified string as dialog spoken by the player. This command
|
||||
# blocks further event execution until the dialog has finished being 'said'
|
||||
# (either as displayed text or as audible speech from a file).
|
||||
#
|
||||
# Global variables can be substituted into the text by wrapping the global
|
||||
# name in braces.
|
||||
# e.g. say player "I have {coin_count} coins remaining".
|
||||
#
|
||||
# **Parameters**
|
||||
#
|
||||
# - *player*: Global ID of the `ESCPlayer` or `ESCItem` object that is active.
|
||||
# You can specify `current_player` in order to refer to the currently active
|
||||
# player, e.g. in cases where multiple players are playable such as in games
|
||||
# like Maniac Mansion or Day of the Tentacle.
|
||||
# - *text*: Text to display.
|
||||
# - *key*: Translation key (default: nil)
|
||||
# - *type*: Dialog type to use. One of `floating` or `avatar`.
|
||||
# (default: the value set in the setting "Escoria/UI/Default Dialog Type")
|
||||
#
|
||||
# The text supports translation keys by prepending the key followed by
|
||||
# a colon (`:`) to the text.
|
||||
# For more details see: https://docs.escoria-framework.org/en/devel/getting_started/dialogs.html#translations
|
||||
#
|
||||
# Playing an audio file while the text is being
|
||||
# displayed is also supported by this mechanism.
|
||||
# For more details see: https://docs.escoria-framework.org/en/devel/getting_started/dialogs.html#recorded_speech
|
||||
#
|
||||
# Example: `say(player, "Picture's looking good.", "ROOM1_PICTURE")`
|
||||
#
|
||||
# @ESC
|
||||
extends ESCBaseCommand
|
||||
class_name SayToCameraCommand
|
||||
|
||||
|
||||
const CURRENT_PLAYER_KEYWORD = "CURRENT_PLAYER"
|
||||
|
||||
const DEFAULT_CAMERA_DIRECTION = 4
|
||||
|
||||
var globals_regex : RegEx # Regex to match global variables in strings
|
||||
|
||||
|
||||
|
||||
# Constructor
|
||||
func _init() -> void:
|
||||
globals_regex = RegEx.new()
|
||||
# Use look-ahead/behind to capture the term (i.e. global) in braces
|
||||
globals_regex.compile("(?<=\\{)(.*)(?=\\})")
|
||||
|
||||
|
||||
# Return the descriptor of the arguments of this command
|
||||
func configure() -> ESCCommandArgumentDescriptor:
|
||||
return ESCCommandArgumentDescriptor.new(
|
||||
2,
|
||||
[TYPE_STRING, TYPE_STRING, TYPE_STRING, TYPE_STRING],
|
||||
[
|
||||
null,
|
||||
null,
|
||||
"",
|
||||
""
|
||||
],
|
||||
[
|
||||
true,
|
||||
false,
|
||||
false,
|
||||
true
|
||||
]
|
||||
)
|
||||
|
||||
|
||||
# Validate whether the given arguments match the command descriptor
|
||||
func validate(arguments: Array):
|
||||
if not super.validate(arguments):
|
||||
return false
|
||||
|
||||
if arguments[0].to_upper() != CURRENT_PLAYER_KEYWORD \
|
||||
and not escoria.object_manager.has(arguments[0]):
|
||||
raise_invalid_object_error(self, arguments[0])
|
||||
return false
|
||||
|
||||
return true
|
||||
|
||||
|
||||
# Run the command
|
||||
func run(command_params: Array) -> int:
|
||||
var dict: Dictionary
|
||||
|
||||
escoria.current_state = escoria.GAME_STATE.DIALOG
|
||||
|
||||
if !escoria.dialog_player:
|
||||
raise_error(
|
||||
self,
|
||||
"No dialog player was registered and the 'say' command was encountered."
|
||||
)
|
||||
escoria.current_state = escoria.GAME_STATE.DEFAULT
|
||||
return ESCExecution.RC_ERROR
|
||||
|
||||
if not escoria.main.current_scene.player:
|
||||
escoria.logger.warn(
|
||||
self,
|
||||
"[%s]: No player item in the current scene was registered and the say command was encountered."
|
||||
% get_command_name()
|
||||
)
|
||||
escoria.current_state = escoria.GAME_STATE.DEFAULT
|
||||
return ESCExecution.RC_CANCEL
|
||||
|
||||
# Replace the names of any globals in "{ }" with their value
|
||||
command_params[1] = escoria.globals_manager.replace_globals(command_params[1])
|
||||
|
||||
|
||||
|
||||
var speaking_character_global_id = escoria.main.current_scene.player.global_id \
|
||||
if command_params[0].to_upper() == CURRENT_PLAYER_KEYWORD \
|
||||
else command_params[0]
|
||||
var node = escoria.object_manager.get_object(command_params[0]).node
|
||||
|
||||
|
||||
escoria.object_manager.get_object(command_params[0]).node\
|
||||
.set_direction(DEFAULT_CAMERA_DIRECTION)
|
||||
|
||||
escoria.dialog_player.say(
|
||||
speaking_character_global_id,
|
||||
command_params[3],
|
||||
command_params[1],
|
||||
command_params[2]
|
||||
)
|
||||
await escoria.dialog_player.say_finished
|
||||
escoria.current_state = escoria.GAME_STATE.DEFAULT
|
||||
|
||||
return ESCExecution.RC_OK
|
||||
|
||||
|
||||
# Function called when the command is interrupted.
|
||||
func interrupt():
|
||||
escoria.logger.debug(
|
||||
self,
|
||||
"[%s] interrupt() function not implemented." % get_command_name()
|
||||
)
|
||||
@@ -0,0 +1 @@
|
||||
uid://d0sdlkjqr8f67
|
||||
@@ -1,4 +1,4 @@
|
||||
[gd_scene load_steps=38 format=3 uid="uid://cjmsexhyhi4vs"]
|
||||
[gd_scene load_steps=37 format=3 uid="uid://cjmsexhyhi4vs"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://clg4yrj7v7eae" path="res://addons/escoria-ui-return-monkey-island/esc_player_with_tooltip.gd" id="1"]
|
||||
[ext_resource type="Texture2D" uid="uid://da1kd8lccd24" path="res://gymkhana/characters/oier/oier-mod.png" id="2"]
|
||||
@@ -50,10 +50,6 @@ region = Rect2(4368, 0, 273, 795)
|
||||
atlas = ExtResource("4")
|
||||
region = Rect2(5187, 0, 273, 795)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_xnkj6"]
|
||||
atlas = ExtResource("4")
|
||||
region = Rect2(4914, 0, 273, 795)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_obf0k"]
|
||||
atlas = ExtResource("4")
|
||||
region = Rect2(4641, 0, 273, 795)
|
||||
@@ -225,9 +221,6 @@ animations = [{
|
||||
"texture": SubResource("26")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_xnkj6")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_obf0k")
|
||||
}],
|
||||
"loop": true,
|
||||
@@ -331,7 +324,7 @@ animations = ExtResource("3")
|
||||
position = Vector2(0, -155)
|
||||
scale = Vector2(0.389246, 0.389247)
|
||||
sprite_frames = SubResource("20")
|
||||
animation = &"speak_right"
|
||||
animation = &"speak_down"
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
position = Vector2(5, -151)
|
||||
|
||||
@@ -1,20 +1,16 @@
|
||||
:action1
|
||||
set_angle($player, 270)
|
||||
say($player, "Mi mechero, que bien!!", "mechero_action1_say_1")
|
||||
set_angle($player,270)
|
||||
say($player, "Ayer lo dejé un segundo encima de la mesa y desapareció.", "mechero_action1_say_2")
|
||||
say_to_camera($player, "Mi mechero, que bien!!", "mechero_action1_say_1")
|
||||
say_to_camera($player, "Ayer lo dejé un segundo encima de la mesa y desapareció.", "mechero_action1_say_2")
|
||||
|
||||
:action2
|
||||
set_angle($player,270)
|
||||
say($player, "A la saca!", "mechero_action2_say")
|
||||
say_to_camera($player, "A la saca!", "mechero_action2_say")
|
||||
set_active($turno_cocina_mechero, false)
|
||||
inventory_add("turno_cocina_mechero")
|
||||
|
||||
:action3
|
||||
say($player, "Parece que no tiene gas.", "mechero_action3_say_1")
|
||||
say($player, "Eso explica que lo hayan abandonado.", "mechero_action3_say_2")
|
||||
set_angle($player, 180)
|
||||
say($player, "Si vienes a Uli vigila tu mechero.", "mechero_action3_say_3")
|
||||
say_to_camera($player, "Si vienes a Uli vigila tu mechero.", "mechero_action3_say_3")
|
||||
|
||||
:action4 "turno_cocina_carton"
|
||||
say($player, "Fuego!", "mechero_action4") #ToDo: tiene sentido?
|
||||
|
||||
Reference in New Issue
Block a user