summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-07-21 16:33:37 +0200
committermetamuffin <metamuffin@disroot.org>2024-07-21 16:33:41 +0200
commit18faa3f7094222d90fae0ae2037babaa406a57bb (patch)
tree8c92e7a5430cc93b8bc2cf73db8a1945c7f33b7f
parente3fb3f452b4fd900afef195d65ca84c9f98fe350 (diff)
downloadhurrycurry-18faa3f7094222d90fae0ae2037babaa406a57bb.tar
hurrycurry-18faa3f7094222d90fae0ae2037babaa406a57bb.tar.bz2
hurrycurry-18faa3f7094222d90fae0ae2037babaa406a57bb.tar.zst
disable input more properly
-rw-r--r--client/game.gd7
-rw-r--r--client/menu/book/book.gd4
-rw-r--r--client/menu/game.gd4
-rw-r--r--client/menu/ingame.gd6
-rw-r--r--client/menu/main.gd2
-rw-r--r--client/menu/menu.gd19
-rw-r--r--client/player/controllable_player.gd14
-rw-r--r--client/player/follow_camera.gd19
8 files changed, 39 insertions, 36 deletions
diff --git a/client/game.gd b/client/game.gd
index 4db41e2a..e0b06772 100644
--- a/client/game.gd
+++ b/client/game.gd
@@ -20,7 +20,6 @@ extends Node3D
signal update_players(players: Dictionary)
signal data_updated()
-signal player_set_input_enabled(b: bool)
signal joined()
signal left()
@@ -47,6 +46,7 @@ var players := {}
@onready var lobby: Lobby = $"../Lobby"
@onready var overlay: Overlay = $"../Overlay"
@onready var popup_message: PopupMessage = $"../PopupMessage"
+@onready var menu: GameMenu = $".."
func _ready():
if !Global.on_vulkan():
@@ -92,7 +92,6 @@ func _ready():
if player == player_id:
player_instance = ControllablePlayer.new(player, player_name, pos, character, self)
camera.target = player_instance.movement_base
- player_set_input_enabled.connect(player_instance.set_input_enabled)
is_joined = true
joined.emit()
else:
@@ -231,7 +230,7 @@ func _ready():
in_lobby = in_lobby_
if state:
map.gi_bake()
- await get_parent().menu_anim_open()
+ await get_parent()._menu_open()
map.autobake = true
if in_lobby_:
@@ -240,7 +239,7 @@ func _ready():
popup_message.ingame()
else:
map.autobake = false
- await get_parent().menu_anim_exit()
+ await get_parent()._menu_exit()
)
mp.server_message.connect(
diff --git a/client/menu/book/book.gd b/client/menu/book/book.gd
index 43df3ebe..ab244fcb 100644
--- a/client/menu/book/book.gd
+++ b/client/menu/book/book.gd
@@ -25,5 +25,5 @@ func _ready():
texture.custom_minimum_size = get_viewport_rect().size
$ScrollContainer/VBoxContainer.add_child(texture)
-func menu_anim_open(): pass
-func menu_anim_exit(): pass
+func _menu_open(): pass
+func _menu_exit(): pass
diff --git a/client/menu/game.gd b/client/menu/game.gd
index bef4a5df..16e1dfa9 100644
--- a/client/menu/game.gd
+++ b/client/menu/game.gd
@@ -15,6 +15,7 @@
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
extends Menu
+class_name GameMenu
@onready var game: Game = $Game
@onready var debug_label: RichTextLabel = $Debug
@@ -30,6 +31,9 @@ func _input(_event):
if Input.is_action_just_pressed("ui_menu"):
open_ingame_menu()
+func _menu_cover(state):
+ game.camera.disable_input = state
+
func _process(_delta):
if Global.get_setting("debug_info"):
debug_label.show()
diff --git a/client/menu/ingame.gd b/client/menu/ingame.gd
index 9ca80f2c..4e8eac0c 100644
--- a/client/menu/ingame.gd
+++ b/client/menu/ingame.gd
@@ -33,14 +33,12 @@ func _ready():
super()
func anim_setup(): pass
-func menu_anim_open():
+func _menu_open():
print("ingame open")
- game.player_set_input_enabled.emit(false)
anim.play("activate")
await anim.animation_finished
-func menu_anim_exit():
+func _menu_exit():
print("ingame exit")
- game.player_set_input_enabled.emit(true)
anim.play_backwards("activate")
await anim.animation_finished
diff --git a/client/menu/main.gd b/client/menu/main.gd
index e2c89798..ac1c66bc 100644
--- a/client/menu/main.gd
+++ b/client/menu/main.gd
@@ -32,7 +32,7 @@ func _ready():
server.hide()
connect_uri.text = Global.get_profile("last_server_url")
-func menu_anim_cover(covered):
+func _menu_cover(covered):
$side.visible = not covered
func _on_quit_pressed():
diff --git a/client/menu/menu.gd b/client/menu/menu.gd
index 6dd48fca..30a9ca7d 100644
--- a/client/menu/menu.gd
+++ b/client/menu/menu.gd
@@ -38,31 +38,34 @@ func _ready():
connect_button_sounds(self)
update_parent_menu(self.get_parent())
if support_anim: anim_setup()
- if auto_anim: menu_anim_open()
+ if auto_anim: _menu_open()
func anim_setup():
transition = transition_scene.instantiate()
add_child(transition)
-func menu_anim_open():
+func _menu_open():
if transition != null: await transition.fade_in()
-func menu_anim_exit():
+func _menu_exit():
if transition != null: await transition.fade_out()
-func menu_anim_cover(_state: bool):
+func _menu_cover(_state: bool):
pass
var popup: Menu = null
+var covered := false
func submenu(path: String, data_ = null):
var prev_focus = Global.focused_node
if popup != null: return
_disable_recursive(self, true)
- await menu_anim_cover(true)
+ covered = true
+ await _menu_cover(true)
popup = load(path).instantiate()
popup.data = data_
add_child(popup)
print("Submenu opened ", path)
await submenu_close
print("Submenu closed ", path)
- await menu_anim_cover(false)
+ await _menu_cover(false)
+ covered = false
_disable_recursive(self, false)
if prev_focus != null: prev_focus.grab_focus()
@@ -74,7 +77,7 @@ func _disable_recursive(node: Node, state: bool):
for c in node.get_children(): _disable_recursive(c, state)
func exit():
- await self.menu_anim_exit()
+ await self._menu_exit()
get_parent().submenu_close.emit()
queue_free()
@@ -86,7 +89,7 @@ func replace_menu(path: String):
print("Replace menu: ", path)
if popup != null: await popup.exit()
_disable_recursive(self, true)
- await menu_anim_exit()
+ await _menu_exit()
var new_popup = load(path).instantiate()
get_parent().add_child(new_popup)
if parent_menu != null: parent_menu.popup = new_popup
diff --git a/client/player/controllable_player.gd b/client/player/controllable_player.gd
index 6e922983..65b225aa 100644
--- a/client/player/controllable_player.gd
+++ b/client/player/controllable_player.gd
@@ -24,7 +24,7 @@ const BOOST_FACTOR = 2.5
const BOOST_DURATION = 0.3
const BOOST_RESTORE = 0.5
-var onscreen_controls = preload("res://player/onscreen_controls/controls.tscn").instantiate()
+var onscreen_controls = preload ("res://player/onscreen_controls/controls.tscn").instantiate()
var facing := Vector2(1, 0)
var velocity_ := Vector2(0, 0)
@@ -58,7 +58,7 @@ func _input(_event):
chat_open = !chat_open
enable_input = !enable_input
-const MAX_DT = 1./50.
+const MAX_DT = 1. / 50.
func _process(delta):
marker.position = G.interpolate(marker.position, marker_target, delta * 30.)
while delta > 0.001:
@@ -68,7 +68,7 @@ func _process(delta):
super(delta)
func _process_movement(delta):
- var input = Input.get_vector("left", "right", "forward", "backwards") if enable_input else Vector2.ZERO
+ var input = Input.get_vector("left", "right", "forward", "backwards") if not game.menu.covered else Vector2.ZERO
var boost = Input.is_action_pressed("boost") or (Global.get_setting("latch_boost") and boosting)
input = input.rotated( - game.camera.angle_target)
if Input.is_action_pressed("interact") or Input.is_action_just_released("interact"):
@@ -88,7 +88,7 @@ func _process_movement(delta):
position_anim = position_
rotation_anim = rotation_
-func update(dt: float,boost: bool):
+func update(dt: float, boost: bool):
direction = direction.limit_length(1.);
if direction.length() > 0.1:
self.facing = direction + (self.facing - direction) * exp( - dt * 10.)
@@ -152,8 +152,7 @@ func take_item(tile: Tile):
Input.start_joy_vibration(0, 0.1, 0.0, 0.075)
func interact():
- if not enable_input:
- return
+ if game.menu.covered: return
var tile = game.map.get_tile_instance(target)
if tile != null:
marker.set_interactive(game.get_tile_interactive(target))
@@ -168,6 +167,3 @@ func interact():
marker.set_interacting(false)
else:
marker.visible = false
-
-func set_input_enabled(b: bool):
- enable_input = b
diff --git a/client/player/follow_camera.gd b/client/player/follow_camera.gd
index 70dd2a96..fd4c9d16 100644
--- a/client/player/follow_camera.gd
+++ b/client/player/follow_camera.gd
@@ -43,6 +43,7 @@ var angle_up: float = 1
var ground: Vector3
var camera_distance: float = 10.
var camera_distance_target: float = camera_distance
+var disable_input := false
func _ready():
if target == null:
@@ -51,22 +52,23 @@ func _ready():
ground = target.position
func _process(delta):
- if target != null && get_tree().root.get_node("Entry/GameMenu/IngameMenu") == null:
+ if target != null:
follow(delta)
func _input(_event):
+ if disable_input: return
if Input.is_action_just_pressed("reset"):
angle_target = 0
angle_up_target = 1
camera_distance_target = 10
func follow(delta):
- angle_target += Input.get_axis("rotate_left", "rotate_right") * (
+ if not disable_input: angle_target += Input.get_axis("rotate_left", "rotate_right") * (
ROTATE_SPEED * delta * (-1 if Global.get_setting("invert_camera") else 1)
)
angle = G.interpolate_angle(angle, angle_target, delta * ROTATE_WEIGHT)
- angle_up_target += Input.get_axis("rotate_down", "rotate_up") * (
+ if not disable_input: angle_up_target += Input.get_axis("rotate_down", "rotate_up") * (
ROTATE_UP_SPEED * delta * (-1 if Global.get_setting("invert_camera") else 1)
)
angle_up_target = clamp(angle_up_target, ANGLE_UP_MIN, ANGLE_UP_MAX)
@@ -90,11 +92,12 @@ func follow(delta):
# add 0.5, this is the head height
ground = G.interpolate(ground, target.position + Vector3(0., 0.5, 0.), delta * MOVE_WEIGHT)
- var zoom_dist = Input.get_axis("zoom_in", "zoom_out") * delta
- zoom_dist += float(Input.is_action_just_pressed("zoom_out_discrete")) * DISCRETE_DURATION
- zoom_dist -= float(Input.is_action_just_pressed("zoom_in_discrete")) * DISCRETE_DURATION
- camera_distance_target *= exp(zoom_dist * ZOOM_SPEED)
- camera_distance_target = clamp(camera_distance_target, MIN_ZOOM, MAX_ZOOM)
+ if not disable_input:
+ var zoom_dist = Input.get_axis("zoom_in", "zoom_out") * delta
+ zoom_dist += float(Input.is_action_just_pressed("zoom_out_discrete")) * DISCRETE_DURATION
+ zoom_dist -= float(Input.is_action_just_pressed("zoom_in_discrete")) * DISCRETE_DURATION
+ camera_distance_target *= exp(zoom_dist * ZOOM_SPEED)
+ camera_distance_target = clamp(camera_distance_target, MIN_ZOOM, MAX_ZOOM)
camera_distance = G.interpolate(camera_distance, camera_distance_target, delta * ZOOM_WEIGHT)