feat: Several fixes and optimizations (#467)

Co-authored-by: Dennis Ploeger <develop@dieploegers.de>
This commit is contained in:
Dennis Ploeger
2021-11-27 20:10:16 +01:00
committed by GitHub
parent 09446c794f
commit 47fe4df841
13 changed files with 397 additions and 312 deletions

View File

@@ -1,4 +1,5 @@
# The escoria main script
tool
extends Node
# Signal sent when pause menu has to be displayed
@@ -310,12 +311,6 @@ func _input(event):
if event.is_action_pressed("ui_cancel"):
emit_signal("request_pause_menu")
if ProjectSettings.get_setting("escoria/ui/tooltip_follows_mouse"):
if escoria.main.current_scene and escoria.main.current_scene.game:
if event is InputEventMouseMotion:
escoria.main.current_scene.game. \
update_tooltip_following_mouse_position(event.position)
# Pauses or unpause the game
#
@@ -349,6 +344,110 @@ func run_event_from_script(script: ESCScript, event_name: String):
[]
)
return
# Register a new project setting if it hasn't been defined already
#
# #### Parameters
#
# - name: Name of the project setting
# - default: Default value
# - info: Property info for the setting
func register_setting(name: String, default, info: Dictionary):
if not ProjectSettings.has_setting(name):
ProjectSettings.set_setting(
name,
default
)
info.name = name
ProjectSettings.add_property_info(info)
# Register a user interface. This should be called in a deferred way
# from the addon's _enter_tree.
#
# #### Parameters
# - game_scene: Path to the game scene extending ESCGame
func register_ui(game_scene: String):
if not ProjectSettings.get_setting("escoria/ui/game_scene") in [
"",
game_scene
]:
logger.report_errors(
"escoria.gd:register_ui()",
[
"Can't register user interface because %s is registered" % \
ProjectSettings.get_setting("escoria/ui/game_scene")
]
)
ProjectSettings.set_setting(
"escoria/ui/game_scene",
game_scene
)
# Deregister a user interface
#
# #### Parameters
# - game_scene: Path to the game scene extending ESCGame
func deregister_ui(game_scene: String):
if ProjectSettings.get_setting("escoria/ui/game_scene") != game_scene:
logger.report_errors(
"escoria.gd:deregister_ui()",
[
(
"Can't deregister user interface %s because it " +
"is not registered."
) % ProjectSettings.get_setting("escoria/ui/game_scene")
]
)
ProjectSettings.set_setting(
"escoria/ui/game_scene",
""
)
# Register a dialog manager addon. This should be called in a deferred way
# from the addon's _enter_tree.
#
# #### Parameters
# - manager_class: Path to the manager class script
func register_dialog_manager(manager_class: String):
var dialog_managers: Array = ProjectSettings.get_setting(
"escoria/ui/dialog_managers"
)
if manager_class in dialog_managers:
return
dialog_managers.push_back(manager_class)
ProjectSettings.set_setting(
"escoria/ui/dialog_managers",
dialog_managers
)
# Deregister a dialog manager addon
#
# #### Parameters
# - manager_class: Path to the manager class script
func deregister_dialog_manager(manager_class: String):
var dialog_managers: Array = ProjectSettings.get_setting(
"escoria/ui/dialog_managers"
)
if not manager_class in dialog_managers:
logger.report_warnings(
"escoria.gd:deregister_dialog_manager()",
[
"Dialog manager %s is not registered" % manager_class
]
)
return
dialog_managers.erase(manager_class)
ProjectSettings.set_setting(
"escoria/ui/dialog_managers",
dialog_managers
)
# Function called to quit the game.