Co-authored-by: Dennis Ploeger <develop@dieploegers.de>
This commit is contained in:
Dennis Ploeger
2021-11-21 22:18:15 +01:00
committed by GitHub
parent ce2f4247a5
commit c2bbefedd3
7 changed files with 39 additions and 18 deletions

View File

@@ -42,7 +42,7 @@ func _test_basic() -> bool:
assert(subject.name == "say") assert(subject.name == "say")
assert(subject.parameters.size() == 2) assert(subject.parameters.size() == 2)
assert(subject.parameters[0] == "player") assert(subject.parameters[0] == "player")
assert(subject.parameters[1] == "Test") assert(subject.parameters[1] == '"Test"')
subject = script.events["test"].statements[0].statements[1] subject = script.events["test"].statements[0].statements[1]
assert(subject is ESCGroup) assert(subject is ESCGroup)
@@ -55,14 +55,14 @@ func _test_basic() -> bool:
assert(subject.name == "say") assert(subject.name == "say")
assert(subject.parameters.size() == 2) assert(subject.parameters.size() == 2)
assert(subject.parameters[0] == "player") assert(subject.parameters[0] == "player")
assert(subject.parameters[1] == "Test2 BLANK") assert(subject.parameters[1] == '"Test2 BLANK"')
subject = script.events["test"].statements[0].statements[2] subject = script.events["test"].statements[0].statements[2]
assert(subject is ESCCommand) assert(subject is ESCCommand)
assert(subject.name == "say") assert(subject.name == "say")
assert(subject.parameters.size() == 2) assert(subject.parameters.size() == 2)
assert(subject.parameters[0] == "player") assert(subject.parameters[0] == "player")
assert(subject.parameters[1] == "Test3") assert(subject.parameters[1] == '"Test3"')
assert(subject.conditions.size() == 1) assert(subject.conditions.size() == 1)
assert(subject.conditions[0].flag == "test2") assert(subject.conditions[0].flag == "test2")
@@ -77,12 +77,12 @@ func _test_basic() -> bool:
subject = script.events["test"].statements[1].statements[1] subject = script.events["test"].statements[1].statements[1]
assert(subject is ESCCommand) assert(subject is ESCCommand)
assert(subject.name == "say") assert(subject.name == "say")
assert(subject.parameters[1] == "Test 6") assert(subject.parameters[1] == '"Test 6"')
subject = script.events["test"].statements[1].statements[2] subject = script.events["test"].statements[1].statements[2]
assert(subject is ESCCommand) assert(subject is ESCCommand)
assert(subject.name == "say") assert(subject.name == "say")
assert(subject.parameters[1] == "TEST:Test 7") assert(subject.parameters[1] == "TEST:\"Test 7\"")
return true return true
@@ -245,11 +245,11 @@ func _test_dialog() -> bool:
assert(subject[1] is ESCCommand) assert(subject[1] is ESCCommand)
assert(subject[1].name == "say") assert(subject[1].name == "say")
assert(subject[1].parameters.size() == 2) assert(subject[1].parameters.size() == 2)
assert(subject[1].parameters[1] == "testb") assert(subject[1].parameters[1] == '"testb"')
assert(subject[2] is ESCCommand) assert(subject[2] is ESCCommand)
assert(subject[2].name == "say") assert(subject[2].name == "say")
assert(subject[2].parameters.size() == 2) assert(subject[2].parameters.size() == 2)
assert(subject[2].parameters[1] == "testb?") assert(subject[2].parameters[1] == '"testb?"')
subject = script.events["test"].statements[0].options[1] subject = script.events["test"].statements[0].options[1]
assert(subject is ESCDialogOption) assert(subject is ESCDialogOption)

View File

@@ -29,6 +29,11 @@ func configure() -> ESCCommandArgumentDescriptor:
null, null,
null, null,
"" ""
],
[
true,
false,
true
] ]
) )

View File

@@ -219,9 +219,7 @@ func _compile(lines: Array) -> Array:
returned.append(dialog_option) returned.append(dialog_option)
elif command_regex.search(line): elif command_regex.search(line):
var command = ESCCommand.new(line) var command = ESCCommand.new(line)
if command.is_valid(): returned.append(command)
escoria.logger.trace("Line is the command %s" % command.name)
returned.append(command)
else: else:
escoria.logger.report_errors( escoria.logger.report_errors(
"Invalid ESC line detected", "Invalid ESC line detected",

View File

@@ -44,18 +44,18 @@ func _init(command_string):
for parameter in parsed_parameters.split(" "): for parameter in parsed_parameters.split(" "):
if parameter.begins_with('"') and parameter.ends_with('"'): if parameter.begins_with('"') and parameter.ends_with('"'):
parameters.append( parameters.append(
parameter.substr(1, parameter.length() - 2) parameter
) )
elif ":" in parameter and '"' in parameter: elif ":" in parameter and '"' in parameter:
quote_open = true quote_open = true
parameter_values.append(parameter.replace('"', '')) parameter_values.append(parameter)
elif parameter.begins_with('"'): elif parameter.begins_with('"'):
quote_open = true quote_open = true
parameter_values.append(parameter.substr(1)) parameter_values.append(parameter)
elif parameter.ends_with('"'): elif parameter.ends_with('"'):
quote_open = false quote_open = false
parameter_values.append( parameter_values.append(
parameter.substr(0, len(parameter) - 1) parameter.substr(0, len(parameter))
) )
parameters.append(parameter_values.join(" ")) parameters.append(parameter_values.join(" "))
parameter_values.resize(0) parameter_values.resize(0)

View File

@@ -14,12 +14,21 @@ var types: Array = []
# The default values for the arguments # The default values for the arguments
var defaults: Array = [] var defaults: Array = []
# Wether to strip quotes on specific arguments
var strip_quotes: Array = []
# Initialize the descriptor # Initialize the descriptor
func _init(p_min_args: int = 0, p_types: Array = [], p_defaults: Array = []): func _init(
p_min_args: int = 0,
p_types: Array = [],
p_defaults: Array = [],
p_strip_quotes: Array = [true]
):
min_args = p_min_args min_args = p_min_args
types = p_types types = p_types
defaults = p_defaults defaults = p_defaults
strip_quotes = p_strip_quotes
# Combine the default argument values with the given arguments # Combine the default argument values with the given arguments
@@ -30,6 +39,15 @@ func prepare_arguments(arguments: Array) -> Array:
complete_arguments[index] = escoria.utils.get_typed_value( complete_arguments[index] = escoria.utils.get_typed_value(
arguments[index] arguments[index]
) )
var strip = strip_quotes[0]
if strip_quotes.size() == complete_arguments.size():
strip = strip_quotes[index]
if strip and typeof(complete_arguments[index]) == TYPE_STRING:
complete_arguments[index] = complete_arguments[index].replace(
'"',
''
)
return complete_arguments return complete_arguments

View File

@@ -4,7 +4,7 @@ class_name ESCDialogPlayer
# A regular expression that separates the translation key from the text # A regular expression that separates the translation key from the text
const KEYTEXT_REGEX = "^((?<key>[^:]+):)?(?<text>.+)" const KEYTEXT_REGEX = "^((?<key>[^:]+):)?\"(?<text>.+)\""
# Emitted when an answer as chosem # Emitted when an answer as chosem

View File

@@ -690,7 +690,7 @@ sound/sfx_volume=1
sound/speech_volume=1 sound/speech_volume=1
sound/master_volume=1 sound/master_volume=1
main/command_directories=[ "res://addons/escoria-core/game/core-scripts/esc/commands" ] main/command_directories=[ "res://addons/escoria-core/game/core-scripts/esc/commands" ]
debug/log_level="DEBUG" debug/log_level="TRACE"
platform/skip_cache=false platform/skip_cache=false
platform/skip_cache.mobile=true platform/skip_cache.mobile=true
ui/items_autoregister_path="res://game/items/inventory" ui/items_autoregister_path="res://game/items/inventory"