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="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"]
|
[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")
|
atlas = ExtResource("4")
|
||||||
region = Rect2(5187, 0, 273, 795)
|
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"]
|
[sub_resource type="AtlasTexture" id="AtlasTexture_obf0k"]
|
||||||
atlas = ExtResource("4")
|
atlas = ExtResource("4")
|
||||||
region = Rect2(4641, 0, 273, 795)
|
region = Rect2(4641, 0, 273, 795)
|
||||||
@@ -225,9 +221,6 @@ animations = [{
|
|||||||
"texture": SubResource("26")
|
"texture": SubResource("26")
|
||||||
}, {
|
}, {
|
||||||
"duration": 1.0,
|
"duration": 1.0,
|
||||||
"texture": SubResource("AtlasTexture_xnkj6")
|
|
||||||
}, {
|
|
||||||
"duration": 1.0,
|
|
||||||
"texture": SubResource("AtlasTexture_obf0k")
|
"texture": SubResource("AtlasTexture_obf0k")
|
||||||
}],
|
}],
|
||||||
"loop": true,
|
"loop": true,
|
||||||
@@ -331,7 +324,7 @@ animations = ExtResource("3")
|
|||||||
position = Vector2(0, -155)
|
position = Vector2(0, -155)
|
||||||
scale = Vector2(0.389246, 0.389247)
|
scale = Vector2(0.389246, 0.389247)
|
||||||
sprite_frames = SubResource("20")
|
sprite_frames = SubResource("20")
|
||||||
animation = &"speak_right"
|
animation = &"speak_down"
|
||||||
|
|
||||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||||
position = Vector2(5, -151)
|
position = Vector2(5, -151)
|
||||||
|
|||||||
@@ -1,20 +1,16 @@
|
|||||||
:action1
|
:action1
|
||||||
set_angle($player, 270)
|
say_to_camera($player, "Mi mechero, que bien!!", "mechero_action1_say_1")
|
||||||
say($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")
|
||||||
set_angle($player,270)
|
|
||||||
say($player, "Ayer lo dejé un segundo encima de la mesa y desapareció.", "mechero_action1_say_2")
|
|
||||||
|
|
||||||
:action2
|
:action2
|
||||||
set_angle($player,270)
|
say_to_camera($player, "A la saca!", "mechero_action2_say")
|
||||||
say($player, "A la saca!", "mechero_action2_say")
|
|
||||||
set_active($turno_cocina_mechero, false)
|
set_active($turno_cocina_mechero, false)
|
||||||
inventory_add("turno_cocina_mechero")
|
inventory_add("turno_cocina_mechero")
|
||||||
|
|
||||||
:action3
|
:action3
|
||||||
say($player, "Parece que no tiene gas.", "mechero_action3_say_1")
|
say($player, "Parece que no tiene gas.", "mechero_action3_say_1")
|
||||||
say($player, "Eso explica que lo hayan abandonado.", "mechero_action3_say_2")
|
say($player, "Eso explica que lo hayan abandonado.", "mechero_action3_say_2")
|
||||||
set_angle($player, 180)
|
say_to_camera($player, "Si vienes a Uli vigila tu mechero.", "mechero_action3_say_3")
|
||||||
say($player, "Si vienes a Uli vigila tu mechero.", "mechero_action3_say_3")
|
|
||||||
|
|
||||||
:action4 "turno_cocina_carton"
|
:action4 "turno_cocina_carton"
|
||||||
say($player, "Fuego!", "mechero_action4") #ToDo: tiene sentido?
|
say($player, "Fuego!", "mechero_action4") #ToDo: tiene sentido?
|
||||||
|
|||||||
Reference in New Issue
Block a user