diff options
Diffstat (limited to 'client')
| -rw-r--r-- | client/game.gd | 29 | ||||
| -rw-r--r-- | client/global.gd | 5 | ||||
| -rw-r--r-- | client/menu/communicate/popup_message/popup_message.gd | 2 | ||||
| -rw-r--r-- | client/multiplayer.gd | 3 | ||||
| -rw-r--r-- | client/player/controllable_player.gd | 35 | ||||
| -rw-r--r-- | client/player/onscreen_controls/controls.gd | 4 | ||||
| -rw-r--r-- | client/player/player.gd | 54 | ||||
| -rw-r--r-- | client/project.godot | 8 | 
8 files changed, 81 insertions, 59 deletions
| diff --git a/client/game.gd b/client/game.gd index e7d39aa2..850d539e 100644 --- a/client/game.gd +++ b/client/game.gd @@ -128,8 +128,9 @@ func handle_packet(p):  			if p.id == player_id:  				set_join_state(JoinState.SPECTATING)  				camera.target = $Center -			if player.hand != null: -				player.hand.queue_free() +			for h in player.hand: +				if h != null: +					h.queue_free()  			players.erase(p.id)  			player.queue_free()  			update_players.emit(players) @@ -143,13 +144,13 @@ func handle_packet(p):  			player_instance.position_ = last_position  		"move_item":  			if "player" in p.from and "player" in p.to: -				players[p.from.player].pass_to(players[p.to.player]) +				players[p.from.player[0]].pass_to(players[p.to.player[0]], p.from.player[1], p.to.player[1])  			elif "tile" in p.from and "player" in p.to:  				var t: Tile = map.get_tile_instance(p.from.tile) -				players[p.to.player].take_item(t) +				players[p.to.player[0]].take_item(t, p.to.player[1])  			elif "player" in p.from and "tile" in p.to:  				var t: Tile = map.get_tile_instance(p.to.tile) -				players[p.from.player].put_item(t) +				players[p.from.player[0]].put_item(t, p.from.player[1])  			elif "tile" in p.from and "tile" in p.to:  				var from_tile2: Tile = map.get_tile_instance(p.from.tile)  				var to_tile2: Tile = map.get_tile_instance(p.to.tile) @@ -159,7 +160,7 @@ func handle_packet(p):  				var t: Tile = map.get_tile_instance(p.item.tile)  				t.progress(p.position, p.speed, p.warn, players.get(p.player))  			else: -				players[p.item.player].progress(p.position, p.speed, p.warn) +				players[p.item.player[0]].progress(p.position, p.speed, p.warn, p.item.player[1])  		"clear_progress":  			if "tile" in p.item:  				var t: Tile = map.get_tile_instance(p.item.tile) @@ -177,21 +178,23 @@ func handle_packet(p):  					i.name = item_names[p.item]  					t.set_item(i)  				else: -					var pl: Player = players[p.location.player] -					var i = ItemFactory.produce(item_names[p.item], pl.hand_base) -					i.position = pl.hand_base.global_position +					var pl: Player = players[p.location.player[0]] +					var h = p.location.player[1] +					var i = ItemFactory.produce(item_names[p.item], pl.hand_base[G.hand_to_index(h)]) +					i.position = pl.hand_base[G.hand_to_index(h)].global_position  					add_child(i)  					i.name = item_names[p.item] -					pl.set_item(i) +					pl.set_item(i, h)  			else:  				if "tile" in p.location:  					var t: Tile = map.get_tile_instance(p.location.tile)  					t.finish()  					t.set_item(null)  				else: -					var player: Player = players[p.location.player] -					player.finish() -					player.set_item(null) +					var pl: Player = players[p.location.player[0]] +					var h = p.location.player[1] +					pl.finish() +					pl.set_item(null, h)  		"update_map":  			var neighbors: Array = p["neighbors"]  			if p.kind != null: diff --git a/client/global.gd b/client/global.gd index 374f0e44..ce24f85d 100644 --- a/client/global.gd +++ b/client/global.gd @@ -268,3 +268,8 @@ func configure_viewport_aa(vp: Viewport, aa: String) -> void:  		"ms4x":  			vp.msaa_3d = Viewport.MSAA_4X  			vp.screen_space_aa = Viewport.SCREEN_SPACE_AA_DISABLED + +static func hand_to_index(h): +	match h: +		"left": return 0 +		"right": return 1 diff --git a/client/menu/communicate/popup_message/popup_message.gd b/client/menu/communicate/popup_message/popup_message.gd index 98bd94e3..56c8961a 100644 --- a/client/menu/communicate/popup_message/popup_message.gd +++ b/client/menu/communicate/popup_message/popup_message.gd @@ -141,7 +141,7 @@ func _input(_event):  		Global.set_hint("has_rotated", true)  	if any_action_just_pressed(["zoom_in", "zoom_out"]):  		Global.set_hint("has_zoomed", true) -	if Input.is_action_just_pressed("interact"): +	if Input.is_action_just_pressed("interact_left") or Input.is_action_just_pressed("interact_right"):  		Global.set_hint("has_interacted", true)  	if Input.is_action_just_pressed("reset"):  		Global.set_hint("has_reset", true) diff --git a/client/multiplayer.gd b/client/multiplayer.gd index 57031221..14eaf482 100644 --- a/client/multiplayer.gd +++ b/client/multiplayer.gd @@ -106,11 +106,12 @@ func send_movement(player, pos: Vector2, direction: Vector2, boost: bool):  		"boost": boost  	}) -func send_tile_interact(player, pos: Vector2i, edge: bool): +func send_tile_interact(player, pos: Vector2i, edge: bool, hand: String):  	@warning_ignore("incompatible_ternary")  	send_packet({  		"type": "interact",  		"player": player, +		"hand": hand,  		"pos": [pos.x, pos.y] if edge else null,  	}) diff --git a/client/player/controllable_player.gd b/client/player/controllable_player.gd index 9db36ad4..d241bc2e 100644 --- a/client/player/controllable_player.gd +++ b/client/player/controllable_player.gd @@ -83,7 +83,7 @@ func _process_movement(delta):  	var boost = Input.is_action_pressed("boost") or (Global.get_setting("gameplay.latch_boost") and boosting) -	if Input.is_action_pressed("interact") or Input.is_action_just_released("interact"): +	if Input.is_action_pressed("interact_left") or Input.is_action_just_released("interact_left") or Input.is_action_pressed("interact_right") or Input.is_action_just_released("interact_right"):  		input *= 0  	else:  		target = Vector2i( @@ -167,8 +167,8 @@ func aabb_point_distance(mi: Vector2, ma: Vector2, p: Vector2) -> float:  func update_position(_new_position: Vector2, _new_rotation: float, _new_boosting: bool):  	pass -func progress(position__: float, speed: float, warn: bool): -	super(position__, speed, warn) +func progress(position__: float, speed: float, warn: bool, h): +	super(position__, speed, warn, h)  	if warn:  		current_vibration_strength = position__  		current_vibration_change = speed @@ -190,14 +190,14 @@ func _on_vibration_timeout():  	Input.vibrate_handheld(100, vibration_strength)  	vibration_timer.start() -func put_item(tile: Tile): -	super(tile) +func put_item(tile: Tile, h): +	super(tile, h)  	if Global.get_setting("gameplay.vibration"):  		Input.start_joy_vibration(0, 0.1, 0.0, 0.075)  		Input.vibrate_handheld(75, 0.1) -func take_item(tile: Tile): -	super(tile) +func take_item(tile: Tile, h): +	super(tile, h)  	if Global.get_setting("gameplay.vibration"):  		Input.start_joy_vibration(0, 0.1, 0.0, 0.075)  		Input.vibrate_handheld(75, 0.1) @@ -210,19 +210,20 @@ func interact():  		# clear last interaction if target has moved since  		if last_interaction != null and not last_interaction == target: -			game.mp.send_tile_interact(game.player_id, last_interaction, false) +			game.mp.send_tile_interact(game.player_id, last_interaction, false, "left")  			marker.set_interacting(false)  			last_interaction = null  		marker.set_interactive(game.get_tile_interactive(target))  		marker_target = tile.item_base.global_position -		if Input.is_action_just_pressed("interact") and last_interaction == null: -			last_interaction = target -			game.mp.send_tile_interact(game.player_id, target, true) -			tile.interact() -			marker.set_interacting(true) -		if Input.is_action_just_released("interact"): -			last_interaction = null -			game.mp.send_tile_interact(game.player_id, target, false) -			marker.set_interacting(false) +		for h in ["left", "right"]: +			if Input.is_action_just_pressed("interact_"+h) and last_interaction == null: +				last_interaction = target +				game.mp.send_tile_interact(game.player_id, target, true, h) +				tile.interact() +				marker.set_interacting(true) +			if Input.is_action_just_released("interact_"+h): +				last_interaction = null +				game.mp.send_tile_interact(game.player_id, target, false, h) +				marker.set_interacting(false)  	else:  		marker.visible = false diff --git a/client/player/onscreen_controls/controls.gd b/client/player/onscreen_controls/controls.gd index 0d240ddb..06efb82e 100644 --- a/client/player/onscreen_controls/controls.gd +++ b/client/player/onscreen_controls/controls.gd @@ -42,11 +42,11 @@ func _on_boost_released():  	boost.modulate = Color.WHITE  func _on_interact_pressed(): -	Input.action_press("interact") +	Input.action_press("interact_left")  	interact.modulate = modulate_color  func _on_interact_released(): -	Input.action_release("interact") +	Input.action_release("interact_left")  	interact.modulate = Color.WHITE  func _on_pause_pressed(): diff --git a/client/player/player.gd b/client/player/player.gd index c314dad2..3285cafc 100644 --- a/client/player/player.gd +++ b/client/player/player.gd @@ -41,16 +41,17 @@ var marker_target = Vector3(0, 0, 0)  var clear_timer: Timer = Timer.new() -var hand: Item = null -var hand_base: Node3D = Node3D.new() +var hand = [null, null] +var hand_base = [Node3D.new(), Node3D.new()]  var character_idx: int  var is_customer: bool  var current_item_message = null  var _anim_angle: float = 0.0 -var hand_base_position: Vector3 = DEFAULT_HAND_BASE_POSITION -const DEFAULT_HAND_BASE_POSITION: Vector3 = Vector3(0, .425, .4) +var hand_base_position = [DEFAULT_HAND_BASE_POSITION_LEFT, DEFAULT_HAND_BASE_POSITION_RIGHT] +const DEFAULT_HAND_BASE_POSITION_LEFT: Vector3 = Vector3(.3, .425, .4) +const DEFAULT_HAND_BASE_POSITION_RIGHT: Vector3 = Vector3(-.3, .425, .4)  func _init(_id: int, new_name: String, pos: Vector2, new_character_idx: int, new_game: Game):  	add_child(movement_base) @@ -62,9 +63,12 @@ func _init(_id: int, new_name: String, pos: Vector2, new_character_idx: int, new  	game = new_game  	username = new_name -	hand_base.name = "HandBase" -	hand_base.position = hand_base_position -	movement_base.add_child(hand_base) +	hand_base[0].name = "HandBaseLeft" +	hand_base[1].name = "HandBaseRight" +	hand_base[0].position = hand_base_position[0] +	hand_base[1].position = hand_base_position[1] +	movement_base.add_child(hand_base[0]) +	movement_base.add_child(hand_base[1])  	movement_base.add_child(chat_bubble)  	movement_base.add_child(item_bubble) @@ -96,45 +100,47 @@ func update_username_tag(state):  	tag.text = username  	tag.visible = state -func set_item(i: Item): -	if hand != null: hand.remove() +func set_item(i: Item, h): +	if hand[G.hand_to_index(h)] != null: hand[G.hand_to_index(h)].remove()  	if i != null:  		@warning_ignore("static_called_on_instance") -		hand_base_position = DEFAULT_HAND_BASE_POSITION - Vector3(0.,i.height() * 0.5, 0.) +		hand_base_position[0] = DEFAULT_HAND_BASE_POSITION_LEFT - Vector3(0.,i.height() * 0.5, 0.) +		@warning_ignore("static_called_on_instance") +		hand_base_position[1] = DEFAULT_HAND_BASE_POSITION_RIGHT - Vector3(0.,i.height() * 0.5, 0.)  	character.holding = i != null -	hand = i -	if hand != null: hand.owned_by = hand_base +	hand[G.hand_to_index(h)] = i +	if hand[G.hand_to_index(h)] != null: hand[G.hand_to_index(h)].owned_by = hand_base[G.hand_to_index(h)] -func remove_item(): -	var i = hand +func remove_item(h): +	var i = hand[G.hand_to_index(h)]  	if i == null: push_error("holding nothing") -	hand = null +	hand[G.hand_to_index(h)] = null  	character.holding = false  	return i -func progress(position__: float, speed: float, warn: bool): -	if hand != null: hand.progress(position__, speed, warn) +func progress(position__: float, speed: float, warn: bool, h): +	if hand[G.hand_to_index(h)] != null: hand[G.hand_to_index(h)].progress(position__, speed, warn)  func finish():  	if hand != null: hand.finish() -func take_item(tile: Tile): +func take_item(tile: Tile, h):  	if hand != null: push_error("already holding an item")  	var i = tile.take_item()  	i.take() -	set_item(i) +	set_item(i, h) -func put_item(tile: Tile): -	var i = remove_item() +func put_item(tile: Tile, h): +	var i = remove_item(h)  	i.put()  	tile.put_item(i) -func pass_to(player: Player): -	var i = remove_item() +func pass_to(player: Player, hfrom, hto): +	var i = remove_item(hfrom)  	i.player_owned_timer = 0  	if player.hand != null:  		push_error("target is already holding an item") -	player.set_item(i) +	player.set_item(i, hto)  func _process(delta):  	_anim_angle = fmod(_anim_angle + delta, TAU) diff --git a/client/project.godot b/client/project.godot index a0b11050..2239120b 100644 --- a/client/project.godot +++ b/client/project.godot @@ -108,13 +108,19 @@ rotate_down={  , Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":3,"axis_value":1.0,"script":null)  ]  } -interact={ +interact_left={  "deadzone": 0.5,  "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":32,"key_label":0,"unicode":32,"location":0,"echo":false,"script":null)  , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":0,"pressure":0.0,"pressed":true,"script":null)  , Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":74,"key_label":0,"unicode":106,"location":0,"echo":false,"script":null)  ]  } +interact_right={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":true,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":32,"key_label":0,"unicode":32,"location":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":76,"key_label":0,"unicode":108,"location":0,"echo":false,"script":null) +] +}  boost={  "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":0,"physical_keycode":4194325,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) | 
