diff options
| author | metamuffin <metamuffin@disroot.org> | 2024-07-21 16:33:37 +0200 | 
|---|---|---|
| committer | metamuffin <metamuffin@disroot.org> | 2024-07-21 16:33:41 +0200 | 
| commit | 18faa3f7094222d90fae0ae2037babaa406a57bb (patch) | |
| tree | 8c92e7a5430cc93b8bc2cf73db8a1945c7f33b7f /client | |
| parent | e3fb3f452b4fd900afef195d65ca84c9f98fe350 (diff) | |
| download | hurrycurry-18faa3f7094222d90fae0ae2037babaa406a57bb.tar hurrycurry-18faa3f7094222d90fae0ae2037babaa406a57bb.tar.bz2 hurrycurry-18faa3f7094222d90fae0ae2037babaa406a57bb.tar.zst | |
disable input more properly
Diffstat (limited to 'client')
| -rw-r--r-- | client/game.gd | 7 | ||||
| -rw-r--r-- | client/menu/book/book.gd | 4 | ||||
| -rw-r--r-- | client/menu/game.gd | 4 | ||||
| -rw-r--r-- | client/menu/ingame.gd | 6 | ||||
| -rw-r--r-- | client/menu/main.gd | 2 | ||||
| -rw-r--r-- | client/menu/menu.gd | 19 | ||||
| -rw-r--r-- | client/player/controllable_player.gd | 14 | ||||
| -rw-r--r-- | client/player/follow_camera.gd | 19 | 
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) | 
