Skip to content

Commit

Permalink
Fix: disable ESCGame inputs until signal room_ready is emitted (#582)
Browse files Browse the repository at this point in the history
* Fix: disable ESCGame inputs until signal room_ready is emitted
* fix: add a new function to use in _input() to check for inputs

* Apply suggestions from code review
Co-authored-by: balloonpopper <[email protected]>
Co-authored-by: Duncan Brown <[email protected]>
  • Loading branch information
StraToN authored Apr 30, 2022
1 parent 0414833 commit 8a58aa7
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 5 deletions.
16 changes: 16 additions & 0 deletions addons/escoria-core/game/core-scripts/esc_game.gd
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,11 @@ export(NodePath) var ui_parent_control_node
# A reference to the node handling tooltips
var tooltip_node: Object

# Boolean indicating whether the game scene is ready to accept inputs
# from the player. This enables using escoria.is_ready_for_inputs() in _input()
# function of game.gd script.
var room_ready_for_inputs: bool = false


# Function called when ESCGame enters the scene tree.
func _enter_tree():
Expand All @@ -51,6 +56,12 @@ func _enter_tree():
self,
"_on_action_finished"
)

escoria.main.connect(
"room_ready",
self,
"_on_room_ready"
)


# Function called when ESCGame exits the scene tree.
Expand Down Expand Up @@ -447,3 +458,8 @@ func escoria_show_ui():
"esc_game.gd#escoria_show_ui",
["UI parent Control node not defined!"]
)


# Manage signal room_deady from main.gd.
func _on_room_ready():
room_ready_for_inputs = true
11 changes: 11 additions & 0 deletions addons/escoria-core/game/escoria.gd
Original file line number Diff line number Diff line change
Expand Up @@ -389,3 +389,14 @@ func _handle_direct_scene_run() -> void:
if current_scene_root is ESCRoom:
escoria.object_manager.set_current_room(current_scene_root)


# Used by game.gd to determine whether the game scene is ready to take inputs
# from the _input() function. To do so, the current_scene must be set, the game
# scene must be set, and the game scene must've been notified that the room
# is ready.
#
# *Returns*
# true if game scene is ready for inputs
func is_ready_for_inputs() -> bool:
return escoria.main.current_scene and escoria.main.current_scene.game \
and escoria.main.current_scene.game.room_ready_for_inputs
2 changes: 1 addition & 1 deletion addons/escoria-core/game/main.gd
Original file line number Diff line number Diff line change
Expand Up @@ -90,8 +90,8 @@ func set_scene_finish() -> void:
current_scene.visible = true

clear_previous_scene()

emit_signal("room_ready")



# Cleanup the previous scene if there was one.
Expand Down
8 changes: 4 additions & 4 deletions addons/escoria-ui-simplemouse/game.gd
Original file line number Diff line number Diff line change
Expand Up @@ -97,10 +97,10 @@ func _exit_tree():


func _input(event: InputEvent) -> void:
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)
if escoria.is_ready_for_inputs():
if event is InputEventMouseMotion:
escoria.main.current_scene.game. \
update_tooltip_following_mouse_position(event.position)


# https://github.com/godotengine/godot-demo-projects/blob/3.4-585455e/misc/joypads/joypads.gd
Expand Down

0 comments on commit 8a58aa7

Please sign in to comment.