Dev démo 1.3
* Ajout d'un paramètre pour la taille de l'UI * Changement de la traduction anglaise de la fourche en "pitchfork" et correction de * Réparation de bug suite à la montée de version de Godot en 4.7
This commit is contained in:
@@ -27,15 +27,15 @@ signal variable_was_set(info:Dictionary)
|
|||||||
####################################################################################################
|
####################################################################################################
|
||||||
|
|
||||||
func clear_game_state(clear_flag:=DialogicGameHandler.ClearFlags.FULL_CLEAR):
|
func clear_game_state(clear_flag:=DialogicGameHandler.ClearFlags.FULL_CLEAR):
|
||||||
# loading default variables
|
# loading default variables
|
||||||
if ! clear_flag & DialogicGameHandler.ClearFlags.KEEP_VARIABLES:
|
if ! clear_flag & DialogicGameHandler.ClearFlags.KEEP_VARIABLES:
|
||||||
reset()
|
reset()
|
||||||
|
|
||||||
|
|
||||||
func load_game_state(load_flag:=LoadFlags.FULL_LOAD):
|
func load_game_state(load_flag:=LoadFlags.FULL_LOAD):
|
||||||
if load_flag == LoadFlags.ONLY_DNODES:
|
if load_flag == LoadFlags.ONLY_DNODES:
|
||||||
return
|
return
|
||||||
dialogic.current_state_info['variables'] = merge_folder(dialogic.current_state_info['variables'], ProjectSettings.get_setting('dialogic/variables', {}).duplicate(true))
|
dialogic.current_state_info['variables'] = merge_folder(dialogic.current_state_info['variables'], ProjectSettings.get_setting('dialogic/variables', {}).duplicate(true))
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
@@ -54,226 +54,228 @@ func load_game_state(load_flag:=LoadFlags.FULL_LOAD):
|
|||||||
## it will try to search for an autoload with the name `Game` and get the value
|
## it will try to search for an autoload with the name `Game` and get the value
|
||||||
## of `player_name` to replace it.
|
## of `player_name` to replace it.
|
||||||
func parse_variables(text:String) -> String:
|
func parse_variables(text:String) -> String:
|
||||||
# First some dirty checks to avoid parsing
|
# First some dirty checks to avoid parsing
|
||||||
if not '{' in text:
|
if not '{' in text:
|
||||||
return text
|
return text
|
||||||
|
|
||||||
# Trying to extract the curly brackets from the text
|
# Trying to extract the curly brackets from the text
|
||||||
var regex := RegEx.new()
|
var regex := RegEx.new()
|
||||||
regex.compile(r"(?<!\\)\{(?<variable>([^{}]|\{[^}]*\})*)\}")
|
regex.compile(r"(?<!\\)\{(?<variable>([^{}]|\{[^}]*\})*)\}")
|
||||||
|
|
||||||
var parsed := text.replace('\\{', '{')
|
var parsed := text.replace('\\{', '{')
|
||||||
for result in regex.search_all(text):
|
for result in regex.search_all(text):
|
||||||
var value: Variant = get_variable(result.get_string('variable'), "<NOT FOUND>")
|
var value: Variant = get_variable(result.get_string('variable'), "<NOT FOUND>")
|
||||||
parsed = parsed.replace("{"+result.get_string('variable')+"}", str(value))
|
parsed = parsed.replace("{"+result.get_string('variable')+"}", str(value))
|
||||||
|
|
||||||
return parsed
|
return parsed
|
||||||
|
|
||||||
|
|
||||||
func set_variable(variable_name: String, value: Variant) -> bool:
|
func set_variable(variable_name: String, value: Variant) -> bool:
|
||||||
variable_name = variable_name.trim_prefix('{').trim_suffix('}')
|
variable_name = variable_name.trim_prefix('{').trim_suffix('}')
|
||||||
|
|
||||||
# First assume this is a simple dialogic variable
|
# First assume this is a simple dialogic variable
|
||||||
if has(variable_name):
|
if has(variable_name):
|
||||||
DialogicUtil._set_value_in_dictionary(variable_name, dialogic.current_state_info['variables'], value)
|
DialogicUtil._set_value_in_dictionary(variable_name, dialogic.current_state_info['variables'], value)
|
||||||
variable_changed.emit({'variable':variable_name, 'new_value':value})
|
variable_changed.emit({'variable':variable_name, 'new_value':value})
|
||||||
return true
|
return true
|
||||||
|
|
||||||
# Second assume this is an autoload variable
|
# Second assume this is an autoload variable
|
||||||
elif '.' in variable_name:
|
elif '.' in variable_name:
|
||||||
var from := variable_name.get_slice('.', 0)
|
var from := variable_name.get_slice('.', 0)
|
||||||
var variable := variable_name.trim_prefix(from+'.')
|
var variable := variable_name.trim_prefix(from+'.')
|
||||||
|
|
||||||
var autoloads := get_autoloads()
|
var autoloads := get_autoloads()
|
||||||
var object: Object = null
|
var object: Object = null
|
||||||
if from in autoloads:
|
if from in autoloads:
|
||||||
object = autoloads[from]
|
object = autoloads[from]
|
||||||
while variable.count("."):
|
while variable.count("."):
|
||||||
from = variable.get_slice('.', 0)
|
from = variable.get_slice('.', 0)
|
||||||
if from in object and object.get(from) is Object:
|
if from in object and object.get(from) is Object:
|
||||||
object = object.get(from)
|
object = object.get(from)
|
||||||
variable = variable.trim_prefix(from+'.')
|
variable = variable.trim_prefix(from+'.')
|
||||||
|
|
||||||
if object:
|
if object:
|
||||||
var sub_idx := ""
|
var sub_idx := ""
|
||||||
if '[' in variable:
|
if '[' in variable:
|
||||||
sub_idx = variable.substr(variable.find('['))
|
sub_idx = variable.substr(variable.find('['))
|
||||||
variable = variable.trim_suffix(sub_idx)
|
variable = variable.trim_suffix(sub_idx)
|
||||||
sub_idx = sub_idx.trim_prefix('[').trim_suffix(']')
|
sub_idx = sub_idx.trim_prefix('[').trim_suffix(']')
|
||||||
|
|
||||||
if variable in object:
|
if variable in object:
|
||||||
match typeof(object.get(variable)):
|
match typeof(object.get(variable)):
|
||||||
TYPE_ARRAY:
|
TYPE_ARRAY:
|
||||||
if not sub_idx:
|
if not sub_idx:
|
||||||
if typeof(value) == TYPE_ARRAY:
|
if typeof(value) == TYPE_ARRAY:
|
||||||
object.set(variable, value)
|
object.set(variable, value)
|
||||||
return true
|
return true
|
||||||
elif sub_idx.is_valid_float():
|
elif sub_idx.is_valid_float():
|
||||||
object.get(variable).remove_at(int(sub_idx))
|
object.get(variable).remove_at(int(sub_idx))
|
||||||
object.get(variable).insert(int(sub_idx), value)
|
object.get(variable).insert(int(sub_idx), value)
|
||||||
return true
|
return true
|
||||||
TYPE_DICTIONARY:
|
TYPE_DICTIONARY:
|
||||||
if not sub_idx:
|
if not sub_idx:
|
||||||
if typeof(value) == TYPE_DICTIONARY:
|
if typeof(value) == TYPE_DICTIONARY:
|
||||||
object.set(variable, value)
|
object.set(variable, value)
|
||||||
return true
|
return true
|
||||||
else:
|
else:
|
||||||
object.get(variable).merge({str_to_var(sub_idx):value}, true)
|
object.get(variable).merge({str_to_var(sub_idx):value}, true)
|
||||||
return true
|
return true
|
||||||
_:
|
_:
|
||||||
object.set(variable, value)
|
object.set(variable, value)
|
||||||
return true
|
return true
|
||||||
|
|
||||||
printerr("[Dialogic] Tried setting non-existant variable '"+variable_name+"'.")
|
printerr("[Dialogic] Tried setting non-existant variable '"+variable_name+"'.")
|
||||||
return false
|
return false
|
||||||
|
|
||||||
|
|
||||||
func get_variable(variable_path:String, default: Variant = null, no_warning := false) -> Variant:
|
func get_variable(variable_path:String, default: Variant = null, no_warning := false) -> Variant:
|
||||||
if variable_path.begins_with('{') and variable_path.ends_with('}') and variable_path.count('{') == 1:
|
if variable_path.begins_with('{') and variable_path.ends_with('}') and variable_path.count('{') == 1:
|
||||||
variable_path = variable_path.trim_prefix('{').trim_suffix('}')
|
variable_path = variable_path.trim_prefix('{').trim_suffix('}')
|
||||||
|
|
||||||
# First assume this is just a single variable
|
# First assume this is just a single variable
|
||||||
var value: Variant = DialogicUtil._get_value_in_dictionary(variable_path, dialogic.current_state_info['variables'])
|
var value: Variant = DialogicUtil._get_value_in_dictionary(variable_path, dialogic.current_state_info['variables'])
|
||||||
if value != null:
|
if value != null:
|
||||||
return value
|
return value
|
||||||
|
|
||||||
# Second assume this is an expression.
|
# Second assume this is an expression.
|
||||||
else:
|
else:
|
||||||
value = dialogic.Expressions.execute_string(variable_path, null, no_warning)
|
value = dialogic.Expressions.execute_string(variable_path, null, no_warning)
|
||||||
if value != null:
|
if value != null:
|
||||||
return value
|
return value
|
||||||
|
|
||||||
# If everything fails, tell the user and return the default
|
# If everything fails, tell the user and return the default
|
||||||
if not no_warning:
|
if not no_warning:
|
||||||
printerr("[Dialogic] Failed parsing variable/expression '"+variable_path+"'.")
|
printerr("[Dialogic] Failed parsing variable/expression '"+variable_path+"'.")
|
||||||
return default
|
return default
|
||||||
|
|
||||||
|
|
||||||
## Resets all variables or a specific variable to the value(s) defined in the variable editor
|
## Resets all variables or a specific variable to the value(s) defined in the variable editor
|
||||||
func reset(variable:="") -> void:
|
func reset(variable:="") -> void:
|
||||||
if variable.is_empty():
|
if variable.is_empty():
|
||||||
dialogic.current_state_info['variables'] = ProjectSettings.get_setting("dialogic/variables", {}).duplicate(true)
|
dialogic.current_state_info['variables'] = ProjectSettings.get_setting("dialogic/variables", {}).duplicate(true)
|
||||||
else:
|
else:
|
||||||
DialogicUtil._set_value_in_dictionary(variable, dialogic.current_state_info['variables'], DialogicUtil._get_value_in_dictionary(variable, ProjectSettings.get_setting('dialogic/variables', {})))
|
DialogicUtil._set_value_in_dictionary(variable, dialogic.current_state_info['variables'], DialogicUtil._get_value_in_dictionary(variable, ProjectSettings.get_setting('dialogic/variables', {})))
|
||||||
|
|
||||||
|
|
||||||
## Returns true if a variable with the given path exists
|
## Returns true if a variable with the given path exists
|
||||||
func has(variable:="") -> bool:
|
func has(variable:="") -> bool:
|
||||||
return DialogicUtil._get_value_in_dictionary(variable, dialogic.current_state_info['variables']) != null
|
return DialogicUtil._get_value_in_dictionary(variable, dialogic.current_state_info['variables']) != null
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Allows to set dialogic built-in variables
|
## Allows to set dialogic built-in variables
|
||||||
func _set(property, value) -> bool:
|
func _set(property, value) -> bool:
|
||||||
property = str(property)
|
property = str(property)
|
||||||
var vars: Dictionary = dialogic.current_state_info['variables']
|
var vars: Dictionary = dialogic.current_state_info['variables']
|
||||||
if property in vars.keys():
|
if property in vars.keys():
|
||||||
if typeof(vars[property]) != TYPE_DICTIONARY:
|
if typeof(vars[property]) != TYPE_DICTIONARY:
|
||||||
vars[property] = value
|
vars[property] = value
|
||||||
return true
|
return true
|
||||||
if value is VariableFolder:
|
if value is VariableFolder:
|
||||||
return true
|
return true
|
||||||
return false
|
return false
|
||||||
|
|
||||||
|
|
||||||
## Allows to get dialogic built-in variables
|
## Allows to get dialogic built-in variables
|
||||||
func _get(property):
|
func _get(property):
|
||||||
property = str(property)
|
property = str(property)
|
||||||
if property in dialogic.current_state_info['variables'].keys():
|
if property in dialogic.current_state_info['variables'].keys():
|
||||||
if typeof(dialogic.current_state_info['variables'][property]) == TYPE_DICTIONARY:
|
if typeof(dialogic.current_state_info['variables'][property]) == TYPE_DICTIONARY:
|
||||||
return VariableFolder.new(dialogic.current_state_info['variables'][property], property, self)
|
return VariableFolder.new(dialogic.current_state_info['variables'][property], property, self)
|
||||||
else:
|
else:
|
||||||
return DialogicUtil.logical_convert(dialogic.current_state_info['variables'][property])
|
return DialogicUtil.logical_convert(dialogic.current_state_info['variables'][property])
|
||||||
|
return null
|
||||||
|
|
||||||
|
|
||||||
func folders() -> Array:
|
func folders() -> Array:
|
||||||
var result := []
|
var result := []
|
||||||
for i in dialogic.current_state_info['variables'].keys():
|
for i in dialogic.current_state_info['variables'].keys():
|
||||||
if dialogic.current_state_info['variables'][i] is Dictionary:
|
if dialogic.current_state_info['variables'][i] is Dictionary:
|
||||||
result.append(VariableFolder.new(dialogic.current_state_info['variables'][i], i, self))
|
result.append(VariableFolder.new(dialogic.current_state_info['variables'][i], i, self))
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
func variables(_absolute:=false) -> Array:
|
func variables(_absolute:=false) -> Array:
|
||||||
var result := []
|
var result := []
|
||||||
for i in dialogic.current_state_info['variables'].keys():
|
for i in dialogic.current_state_info['variables'].keys():
|
||||||
if not dialogic.current_state_info['variables'][i] is Dictionary:
|
if not dialogic.current_state_info['variables'][i] is Dictionary:
|
||||||
result.append(i)
|
result.append(i)
|
||||||
return result
|
return result
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region HELPERS
|
#region HELPERS
|
||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
func get_autoloads() -> Dictionary:
|
func get_autoloads() -> Dictionary:
|
||||||
var autoloads := {}
|
var autoloads := {}
|
||||||
for node: Node in get_tree().root.get_children():
|
for node: Node in get_tree().root.get_children():
|
||||||
autoloads[node.name] = node
|
autoloads[node.name] = node
|
||||||
return autoloads
|
return autoloads
|
||||||
|
|
||||||
|
|
||||||
func merge_folder(new:Dictionary, defs:Dictionary) -> Dictionary:
|
func merge_folder(new:Dictionary, defs:Dictionary) -> Dictionary:
|
||||||
# also go through all groups in this folder
|
# also go through all groups in this folder
|
||||||
for x in new.keys():
|
for x in new.keys():
|
||||||
if x in defs and typeof(new[x]) == TYPE_DICTIONARY:
|
if x in defs and typeof(new[x]) == TYPE_DICTIONARY:
|
||||||
new[x] = merge_folder(new[x], defs[x])
|
new[x] = merge_folder(new[x], defs[x])
|
||||||
# add all new variables
|
# add all new variables
|
||||||
for x in defs.keys():
|
for x in defs.keys():
|
||||||
if not x in new:
|
if not x in new:
|
||||||
new[x] = defs[x]
|
new[x] = defs[x]
|
||||||
return new
|
return new
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region VARIABLE FOLDER
|
#region VARIABLE FOLDER
|
||||||
################################################################################
|
################################################################################
|
||||||
class VariableFolder:
|
class VariableFolder:
|
||||||
var data := {}
|
var data := {}
|
||||||
var path := ""
|
var path := ""
|
||||||
var outside: DialogicSubsystem
|
var outside: DialogicSubsystem
|
||||||
|
|
||||||
func _init(_data:Dictionary, _path:String, _outside:DialogicSubsystem):
|
func _init(_data:Dictionary, _path:String, _outside:DialogicSubsystem):
|
||||||
data = _data
|
data = _data
|
||||||
path = _path
|
path = _path
|
||||||
outside = _outside
|
outside = _outside
|
||||||
|
|
||||||
|
|
||||||
func _get(property:StringName):
|
func _get(property:StringName):
|
||||||
property = str(property)
|
property = str(property)
|
||||||
if property in data:
|
if property in data:
|
||||||
if typeof(data[property]) == TYPE_DICTIONARY:
|
if typeof(data[property]) == TYPE_DICTIONARY:
|
||||||
return VariableFolder.new(data[property], path+"."+property, outside)
|
return VariableFolder.new(data[property], path+"."+property, outside)
|
||||||
else:
|
else:
|
||||||
return DialogicUtil.logical_convert(data[property])
|
return DialogicUtil.logical_convert(data[property])
|
||||||
|
return null
|
||||||
|
|
||||||
|
|
||||||
func _set(property:StringName, value:Variant) -> bool:
|
func _set(property:StringName, value:Variant) -> bool:
|
||||||
property = str(property)
|
property = str(property)
|
||||||
if not value is VariableFolder:
|
if not value is VariableFolder:
|
||||||
DialogicUtil._set_value_in_dictionary(path+"."+property, outside.dialogic.current_state_info['variables'], value)
|
DialogicUtil._set_value_in_dictionary(path+"."+property, outside.dialogic.current_state_info['variables'], value)
|
||||||
return true
|
return true
|
||||||
|
|
||||||
|
|
||||||
func has(key:String) -> bool:
|
func has(key:String) -> bool:
|
||||||
return key in data
|
return key in data
|
||||||
|
|
||||||
|
|
||||||
func folders() -> Array:
|
func folders() -> Array:
|
||||||
var result := []
|
var result := []
|
||||||
for i in data.keys():
|
for i in data.keys():
|
||||||
if data[i] is Dictionary:
|
if data[i] is Dictionary:
|
||||||
result.append(VariableFolder.new(data[i], path+"."+i, outside))
|
result.append(VariableFolder.new(data[i], path+"."+i, outside))
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
func variables(absolute:=false) -> Array:
|
func variables(absolute:=false) -> Array:
|
||||||
var result := []
|
var result := []
|
||||||
for i in data.keys():
|
for i in data.keys():
|
||||||
if not data[i] is Dictionary:
|
if not data[i] is Dictionary:
|
||||||
if absolute:
|
if absolute:
|
||||||
result.append(path+'.'+i)
|
result.append(path+'.'+i)
|
||||||
else:
|
else:
|
||||||
result.append(i)
|
result.append(i)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
@@ -51,6 +51,11 @@ const AVAILABLE_LANGUAGES_LABEL = [
|
|||||||
full_screen = v
|
full_screen = v
|
||||||
video_changed.emit(self)
|
video_changed.emit(self)
|
||||||
|
|
||||||
|
@export var ui_size : float = 1. :
|
||||||
|
set(v):
|
||||||
|
ui_size = v
|
||||||
|
video_changed.emit(self)
|
||||||
|
|
||||||
#region ------------------ Controls ------------------
|
#region ------------------ Controls ------------------
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -81,6 +81,10 @@ func update_language_settings(s : SettingsData = settings_data):
|
|||||||
|
|
||||||
func update_video_settings(s : SettingsData = settings_data):
|
func update_video_settings(s : SettingsData = settings_data):
|
||||||
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_FULLSCREEN if s.full_screen else DisplayServer.WINDOW_MODE_WINDOWED)
|
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_FULLSCREEN if s.full_screen else DisplayServer.WINDOW_MODE_WINDOWED)
|
||||||
|
if not is_node_ready():
|
||||||
|
await ready
|
||||||
|
get_tree().root.content_scale_factor = s.ui_size
|
||||||
|
|
||||||
|
|
||||||
func update_inputs(s : SettingsData = settings_data):
|
func update_inputs(s : SettingsData = settings_data):
|
||||||
for i in range(len(s.input_remapped)):
|
for i in range(len(s.input_remapped)):
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ func setup_sound():
|
|||||||
|
|
||||||
func setup_video():
|
func setup_video():
|
||||||
%FullScreenCheckBox.button_pressed = settings.full_screen
|
%FullScreenCheckBox.button_pressed = settings.full_screen
|
||||||
|
%UiSizeSlider.value = settings.ui_size
|
||||||
|
|
||||||
func setup_controls():
|
func setup_controls():
|
||||||
%AutoPickupCheckBox.button_pressed = settings.auto_pickup
|
%AutoPickupCheckBox.button_pressed = settings.auto_pickup
|
||||||
@@ -81,3 +82,6 @@ func _on_fov_slider_value_changed(value):
|
|||||||
|
|
||||||
func _on_sensibility_slider_value_changed(value: float):
|
func _on_sensibility_slider_value_changed(value: float):
|
||||||
settings.mouse_sensivity = value
|
settings.mouse_sensivity = value
|
||||||
|
|
||||||
|
func _on_ui_size_slider_value_changed(value: float):
|
||||||
|
settings.ui_size = %UiSizeSlider.value
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ script = ExtResource("1_7t8mv")
|
|||||||
[node name="SettingsWindow" parent="." unique_id=798514856 instance=ExtResource("1_gkn1k")]
|
[node name="SettingsWindow" parent="." unique_id=798514856 instance=ExtResource("1_gkn1k")]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
process_mode = 3
|
process_mode = 3
|
||||||
custom_minimum_size = Vector2(900, 634.155)
|
custom_minimum_size = Vector2(900, 667.77)
|
||||||
layout_mode = 1
|
layout_mode = 1
|
||||||
offset_left = -349.99994
|
offset_left = -349.99994
|
||||||
offset_right = 350.00055
|
offset_right = 350.00055
|
||||||
@@ -132,6 +132,22 @@ size_flags_horizontal = 10
|
|||||||
size_flags_vertical = 4
|
size_flags_vertical = 4
|
||||||
theme = ExtResource("2_7t8mv")
|
theme = ExtResource("2_7t8mv")
|
||||||
|
|
||||||
|
[node name="UiSizeSliderText" parent="SettingsWindow/WindowContent/MarginContainer/ContentContainer/MarginContainer/SettingsContent/VideoSettings" unique_id=1487118616 instance=ExtResource("4_rbiwc")]
|
||||||
|
layout_mode = 2
|
||||||
|
size_flags_horizontal = 3
|
||||||
|
text = "UI_SIZE"
|
||||||
|
|
||||||
|
[node name="UiSizeSlider" type="HSlider" parent="SettingsWindow/WindowContent/MarginContainer/ContentContainer/MarginContainer/SettingsContent/VideoSettings" unique_id=921491472]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
layout_mode = 2
|
||||||
|
size_flags_horizontal = 3
|
||||||
|
size_flags_vertical = 3
|
||||||
|
theme = ExtResource("2_7t8mv")
|
||||||
|
min_value = 0.5
|
||||||
|
max_value = 1.5
|
||||||
|
step = 0.01
|
||||||
|
value = 1.5
|
||||||
|
|
||||||
[node name="FovSliderText" parent="SettingsWindow/WindowContent/MarginContainer/ContentContainer/MarginContainer/SettingsContent/VideoSettings" unique_id=1512796885 instance=ExtResource("4_rbiwc")]
|
[node name="FovSliderText" parent="SettingsWindow/WindowContent/MarginContainer/ContentContainer/MarginContainer/SettingsContent/VideoSettings" unique_id=1512796885 instance=ExtResource("4_rbiwc")]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_horizontal = 3
|
size_flags_horizontal = 3
|
||||||
@@ -202,6 +218,7 @@ bus = &"Sfx"
|
|||||||
[connection signal="value_changed" from="SettingsWindow/WindowContent/MarginContainer/ContentContainer/MarginContainer/SettingsContent/SoundSliders/EnvSlider" to="." method="_on_env_slider_value_changed"]
|
[connection signal="value_changed" from="SettingsWindow/WindowContent/MarginContainer/ContentContainer/MarginContainer/SettingsContent/SoundSliders/EnvSlider" to="." method="_on_env_slider_value_changed"]
|
||||||
[connection signal="value_changed" from="SettingsWindow/WindowContent/MarginContainer/ContentContainer/MarginContainer/SettingsContent/SoundSliders/SFXSlider" to="." method="_on_sfx_slider_value_changed"]
|
[connection signal="value_changed" from="SettingsWindow/WindowContent/MarginContainer/ContentContainer/MarginContainer/SettingsContent/SoundSliders/SFXSlider" to="." method="_on_sfx_slider_value_changed"]
|
||||||
[connection signal="toggled" from="SettingsWindow/WindowContent/MarginContainer/ContentContainer/MarginContainer/SettingsContent/VideoSettings/FullScreenCheckBox" to="." method="_on_full_screen_check_box_toggled"]
|
[connection signal="toggled" from="SettingsWindow/WindowContent/MarginContainer/ContentContainer/MarginContainer/SettingsContent/VideoSettings/FullScreenCheckBox" to="." method="_on_full_screen_check_box_toggled"]
|
||||||
|
[connection signal="value_changed" from="SettingsWindow/WindowContent/MarginContainer/ContentContainer/MarginContainer/SettingsContent/VideoSettings/UiSizeSlider" to="." method="_on_ui_size_slider_value_changed"]
|
||||||
[connection signal="value_changed" from="SettingsWindow/WindowContent/MarginContainer/ContentContainer/MarginContainer/SettingsContent/VideoSettings/FovSlider" to="." method="_on_fov_slider_value_changed"]
|
[connection signal="value_changed" from="SettingsWindow/WindowContent/MarginContainer/ContentContainer/MarginContainer/SettingsContent/VideoSettings/FovSlider" to="." method="_on_fov_slider_value_changed"]
|
||||||
[connection signal="value_changed" from="SettingsWindow/WindowContent/MarginContainer/ContentContainer/MarginContainer/SettingsContent/GameSettings/SensibilitySlider" to="." method="_on_sensibility_slider_value_changed"]
|
[connection signal="value_changed" from="SettingsWindow/WindowContent/MarginContainer/ContentContainer/MarginContainer/SettingsContent/GameSettings/SensibilitySlider" to="." method="_on_sensibility_slider_value_changed"]
|
||||||
[connection signal="toggled" from="SettingsWindow/WindowContent/MarginContainer/ContentContainer/MarginContainer/SettingsContent/GameSettings/AutoPickupCheckBox" to="." method="_on_auto_pickup_check_box_toggled"]
|
[connection signal="toggled" from="SettingsWindow/WindowContent/MarginContainer/ContentContainer/MarginContainer/SettingsContent/GameSettings/AutoPickupCheckBox" to="." method="_on_auto_pickup_check_box_toggled"]
|
||||||
|
|||||||
@@ -16,9 +16,9 @@ compatibility/default_parent_skeleton_in_mesh_instance_3d=true
|
|||||||
|
|
||||||
config/name="Seeding The Wasteland"
|
config/name="Seeding The Wasteland"
|
||||||
config/description="Seeding planets is a survival, managment and cosy game in which you play a little gardener robot."
|
config/description="Seeding planets is a survival, managment and cosy game in which you play a little gardener robot."
|
||||||
config/version="demo-1.2"
|
config/version="demo-1.3"
|
||||||
run/main_scene="uid://c5bruelvqbm1k"
|
run/main_scene="uid://c5bruelvqbm1k"
|
||||||
config/features=PackedStringArray("4.6", "Forward Plus")
|
config/features=PackedStringArray("4.7", "Forward Plus")
|
||||||
config/icon="uid://df0y0s666ui4h"
|
config/icon="uid://df0y0s666ui4h"
|
||||||
|
|
||||||
[audio]
|
[audio]
|
||||||
@@ -227,10 +227,10 @@ item_9={
|
|||||||
}
|
}
|
||||||
dialogic_default_action={
|
dialogic_default_action={
|
||||||
"deadzone": 0.5,
|
"deadzone": 0.5,
|
||||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194309,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":16,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194309,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
||||||
, Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":1,"canceled":false,"pressed":true,"double_click":false,"script":null)
|
, Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":1,"canceled":false,"pressed":true,"double_click":false,"script":null)
|
||||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":32,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":16,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":32,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
||||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":88,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":16,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":88,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
||||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":0,"pressure":0.0,"pressed":false,"script":null)
|
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":0,"pressure":0.0,"pressed":false,"script":null)
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,9 +21,9 @@
|
|||||||
[sub_resource type="Resource" id="Resource_r4e5h"]
|
[sub_resource type="Resource" id="Resource_r4e5h"]
|
||||||
script = ExtResource("3_r4e5h")
|
script = ExtResource("3_r4e5h")
|
||||||
rain_value = 0.42404523
|
rain_value = 0.42404523
|
||||||
cloud_value = 0.4445428
|
cloud_value = 0.4684971
|
||||||
wind_direction = Vector2(-0.63176113, -0.7751632)
|
wind_direction = Vector2(-0.72454613, 0.6892263)
|
||||||
wind_force = 0.92673165
|
wind_force = 0.9580294
|
||||||
fog_value = 0.5362279
|
fog_value = 0.5362279
|
||||||
ambiance_name = "ExteriorWindy"
|
ambiance_name = "ExteriorWindy"
|
||||||
type = 3
|
type = 3
|
||||||
|
|||||||
@@ -91,7 +91,7 @@ PROTECTIVE_EFFECT_TEXT,"Add [b]{lifetime_buff}[/b]{lifetime_icon} to all nearby
|
|||||||
COST_%d_ENERGY,Cost %d energy,Coûte %d d'énergie
|
COST_%d_ENERGY,Cost %d energy,Coûte %d d'énergie
|
||||||
ONE_TIME_USE,Single use,Usage unique
|
ONE_TIME_USE,Single use,Usage unique
|
||||||
BUILD_%s,Build %s,Construit %s
|
BUILD_%s,Build %s,Construit %s
|
||||||
FORK,Fork,Fourche
|
FORK,Pitchfork,Fourche
|
||||||
FORK_DESC_TEXT,"Use it to [b]harvest mature plants[/b].","Utilise-la pour [b]récolter les plantes mature[/b]."
|
FORK_DESC_TEXT,"Use it to [b]harvest mature plants[/b].","Utilise-la pour [b]récolter les plantes mature[/b]."
|
||||||
DETECTOR,Detector,Détecteur
|
DETECTOR,Detector,Détecteur
|
||||||
DETECTOR_DESC_TEXT,"Indicate [b]near signals[/b]","Indique les [b]signaux proches[/b]"
|
DETECTOR_DESC_TEXT,"Indicate [b]near signals[/b]","Indique les [b]signaux proches[/b]"
|
||||||
@@ -127,7 +127,7 @@ TAKE_A_SEED_BY_CLICKING_ON_IT,Take a [b]Seed[/b] by clicking or moving over it,P
|
|||||||
DIG_A_TALION_VEIN_WITH_SHOVEL,Dig a [b]Talion Vein[/b] with the [b]Pickaxe[/b],Creuser une [b]Veine de Talion[/b] avec la [b]Pioche[/b]
|
DIG_A_TALION_VEIN_WITH_SHOVEL,Dig a [b]Talion Vein[/b] with the [b]Pickaxe[/b],Creuser une [b]Veine de Talion[/b] avec la [b]Pioche[/b]
|
||||||
PLANT_SEED_IN_FERTILE_ZONE,Plant a [b]Seed[/b] in the [b]Fertile Zone[/b],Planter une [b]Graine[/b] dans la [b]Zone Fertile[/b]
|
PLANT_SEED_IN_FERTILE_ZONE,Plant a [b]Seed[/b] in the [b]Fertile Zone[/b],Planter une [b]Graine[/b] dans la [b]Zone Fertile[/b]
|
||||||
WAIT_FOR_THE_PLANT_MATURATION,Wait for the plant to [b]Mature[/b] (recharging will pass days),Attendez que la plante soit [b]Mature[/b] (se recharger fera passer les jours)
|
WAIT_FOR_THE_PLANT_MATURATION,Wait for the plant to [b]Mature[/b] (recharging will pass days),Attendez que la plante soit [b]Mature[/b] (se recharger fera passer les jours)
|
||||||
HARVEST_A_MATURE_PLANT,Harvest a [b]Mature Plant[/b] using your [b]Fork[/b],Récoltez une [b]Plante Mature[/b] en utilisant votre [b]Fourche[/b]
|
HARVEST_A_MATURE_PLANT,Harvest a [b]Mature Plant[/b] using your [b]Pitchfork[/b],Récoltez une [b]Plante Mature[/b] en utilisant votre [b]Fourche[/b]
|
||||||
TAKE_HARVESTED_SEEDS,Take the harvested seeds,Prenez les graines récoltées
|
TAKE_HARVESTED_SEEDS,Take the harvested seeds,Prenez les graines récoltées
|
||||||
HAVE_3_PLANT_POINTS_SIMULTANEOUSLY,Reach 3 plant points,Atteignez 3 points de plantes
|
HAVE_3_PLANT_POINTS_SIMULTANEOUSLY,Reach 3 plant points,Atteignez 3 points de plantes
|
||||||
ENERGY,The Energy,L'Énergie
|
ENERGY,The Energy,L'Énergie
|
||||||
@@ -138,15 +138,15 @@ RECHARGE_STATION_TUTORIAL_DESC_TEXT,"You can recharge all of your energy in the
|
|||||||
PLANT_NAME_TEXT,"[b]Plant name and state[/b] Each plant species has a unique name.","[b]Nom et état de la plante[/b] Chaque espèce de plantes a un nom unique."
|
PLANT_NAME_TEXT,"[b]Plant name and state[/b] Each plant species has a unique name.","[b]Nom et état de la plante[/b] Chaque espèce de plantes a un nom unique."
|
||||||
PLANT_STATS_TEXT,"[b]Plant stats[/b] Here you can see your plant's age, the day of maturation, the lifetime, and the seed number that the plant can produce","[b]Statistiques[/b] Ici, vous pouvez voir l'âge de votre plante, le jour de maturation, le temps de vie et le nombre de graine que la plante donne"
|
PLANT_STATS_TEXT,"[b]Plant stats[/b] Here you can see your plant's age, the day of maturation, the lifetime, and the seed number that the plant can produce","[b]Statistiques[/b] Ici, vous pouvez voir l'âge de votre plante, le jour de maturation, le temps de vie et le nombre de graine que la plante donne"
|
||||||
PLANTS_INFO,"The Plants","Les plantes"
|
PLANTS_INFO,"The Plants","Les plantes"
|
||||||
EACH_PLANT_HAVE_3_STATE,"Each plant have three state","Chaque plante a trois états"
|
EACH_PLANT_HAVE_3_STATE,"Each plant has three state","Chaque plante a trois états"
|
||||||
JUVENILE_DESC_TEXT,"[b]Juvenile[/b] The plant is growing, we can recover its seed with the [b]Fork[/b].","[b]Juvenile[/b] La plante grandit, il est possible de récupérer sa graine avec la [b]Fourche[/b]."
|
JUVENILE_DESC_TEXT,"[b]Juvenile[/b] The plant is growing, we can recover its seed with the [b]Pitchfork[/b].","[b]Juvenile[/b] La plante grandit, il est possible de récupérer sa graine avec la [b]Fourche[/b]."
|
||||||
MATURE_DESC_TEXT,"[b]Mature[/b] Have one [b]Plant point[/b]","[b]Mature[/b] Possède un [b]Point de Plante[/b]."
|
MATURE_DESC_TEXT,"[b]Mature[/b] Has one [b]Plant point[/b]","[b]Mature[/b] Possède un [b]Point de Plante[/b]."
|
||||||
DEAD_DESC_TEXT,"[b]Dead[/b] When harvested or when exceeding their lifetime, each plant dies and produce two [b]Seeds[/b].","[b]Morte[/b] Lors de la récolte ou lorsque leur durée de vie est arrivée à son terme, chaque plante meurt et produit deux [b]Graines[/b]."
|
DEAD_DESC_TEXT,"[b]Dead[/b] When harvested or when exceeding their lifetime, each plant dies and produce two [b]Seeds[/b].","[b]Morte[/b] Lors de la récolte ou lorsque leur durée de vie est arrivée à son terme, chaque plante meurt et produit deux [b]Graines[/b]."
|
||||||
OBTAIN_INFORMATION_ON_PLANTS_WHILE_HOVERING_PLANTS_BASE,"Hover the plants to obtain information","Obtenez des informations sur les plantes en les survolant"
|
OBTAIN_INFORMATION_ON_PLANTS_WHILE_HOVERING_PLANTS_BASE,"Hover the plants to obtain information","Obtenez des informations sur les plantes en les survolant"
|
||||||
THE_PLANT_POINTS,"The Plant Points","Les Points de Plantes"
|
THE_PLANT_POINTS,"The Plant Points","Les Points de Plantes"
|
||||||
HOW_TO_GET_PLANT_POINTS,"How to get Plant Points","Comment avoir des Points de Plantes"
|
HOW_TO_GET_PLANT_POINTS,"How to get Plant Points","Comment avoir des Points de Plantes"
|
||||||
PLANT_POINTS_TUTORIAL_DESC_1_TEXT,"Each mature plant have one [b]Plant Point[/b], you can see your progress on your [b]Objective[/b] in the top of the screen.","Chaque plante mature possède un [b]Point de Plante[/b]. Vous pouvez suivre votre progression dans votre [b]Objectif[/b] en haut de l'écran."
|
PLANT_POINTS_TUTORIAL_DESC_1_TEXT,"Each mature plant has one [b]Plant Point[/b], you can see your progress on your [b]Objective[/b] in the top of the screen.","Chaque plante mature possède un [b]Point de Plante[/b]. Vous pouvez suivre votre progression dans votre [b]Objectif[/b] en haut de l'écran."
|
||||||
PLANT_POINTS_TUTORIAL_DESC_2_TEXT,"Plant Points of dead or harvested plants are [b]no more counted[/b].","Les Points de Plante des plantes mortes ou récoltées ne sont [b]plus comptabilisés[/b]."
|
PLANT_POINTS_TUTORIAL_DESC_2_TEXT,"Plant Points of dead or harvested plants are [b]not counted anymore[/b].","Les Points de Plante des plantes mortes ou récoltées ne sont [b]plus comptabilisés[/b]."
|
||||||
PLANT_MUTATION_TEXT,"[b]Mutations[/b] Mutation change the plant behavior. These mutations are transmitted between generations, where they can change or evolve superior levels","[b]Mutations[/b] Les mutations changent le comportement de la plante. Ces mutations se transmettent entre les générations, et peuvent changer ou évoluer aux niveaux supérieurs"
|
PLANT_MUTATION_TEXT,"[b]Mutations[/b] Mutation change the plant behavior. These mutations are transmitted between generations, where they can change or evolve superior levels","[b]Mutations[/b] Les mutations changent le comportement de la plante. Ces mutations se transmettent entre les générations, et peuvent changer ou évoluer aux niveaux supérieurs"
|
||||||
SHOW_ENERGY_TUTORIAL,"Show energy tutorial","Montrer le tutoriel de l'énergie"
|
SHOW_ENERGY_TUTORIAL,"Show energy tutorial","Montrer le tutoriel de l'énergie"
|
||||||
SHOW_PLANT_TUTORIAL,"Show plant tutorial","Montrer le tutoriel des plantes"
|
SHOW_PLANT_TUTORIAL,"Show plant tutorial","Montrer le tutoriel des plantes"
|
||||||
@@ -189,6 +189,7 @@ SFX_VOLUME,Sfx Volume,Volume des bruitages
|
|||||||
VIDEO,Video,Vidéo
|
VIDEO,Video,Vidéo
|
||||||
FULLSCREEN,Fullscreen,Plein écran
|
FULLSCREEN,Fullscreen,Plein écran
|
||||||
FOV,Fov,Fov
|
FOV,Fov,Fov
|
||||||
|
UI_SIZE,Ui Size,Taille de l'UI
|
||||||
GAME,Game,Jeu
|
GAME,Game,Jeu
|
||||||
MOUSE_SENSIVITY,Mouse Sensivity in 3D scenes,Sensibilité de la souris dans les scènes en 3D
|
MOUSE_SENSIVITY,Mouse Sensivity in 3D scenes,Sensibilité de la souris dans les scènes en 3D
|
||||||
AUTO_PICKUP,Auto pickup seeds,Récolte automatique des graines
|
AUTO_PICKUP,Auto pickup seeds,Récolte automatique des graines
|
||||||
|
|||||||
|
Reference in New Issue
Block a user