diff options
Diffstat (limited to 'client/game.gd')
| -rw-r--r-- | client/game.gd | 136 | 
1 files changed, 47 insertions, 89 deletions
diff --git a/client/game.gd b/client/game.gd index 1bc4ec95..2e600d7c 100644 --- a/client/game.gd +++ b/client/game.gd @@ -89,13 +89,10 @@ func handle_packet(p):  			data_updated.emit()  		"add_player": -			var id = p["id"] -			var player_name = p["name"]  			var pos = pos_to_vec2(p["position"]) -			var character = p["character"]  			var player_instance: Player -			if id == player_id: -				player_instance = ControllablePlayer.new(id, player_name, pos, character, self) +			if p.id == player_id: +				player_instance = ControllablePlayer.new(p.id, p.name, pos, p.character, self)  				in_lobby_updated.connect(player_instance.onscreen_controls.in_lobby_updated)  				player_instance.onscreen_controls.in_lobby_updated(in_lobby)  				camera.target = player_instance.movement_base @@ -103,8 +100,8 @@ func handle_packet(p):  				join_sent = true  				joined.emit()  			else: -				player_instance = Player.new(id, player_name, pos, character, self) -			players[id] = player_instance +				player_instance = Player.new(p.id, p.name, pos, p.character, self) +			players[p.id] = player_instance  			add_child(player_instance)  			update_players.emit(players)  		"remove_player": @@ -121,63 +118,42 @@ func handle_packet(p):  				player.queue_free()  			update_players.emit(players)  		"movement": -			var player = p["player"] -			var pos = pos_to_vec2(p["pos"]) -			var rot = p["rot"] -			var boost = p["boost"] -			var dir = pos_to_vec2(p["dir"]) -			var player_instance: Player = players[player] -			player_instance.update_position(pos, rot, boost) -			if player == player_id: +			var pos = pos_to_vec2(p.pos) +			var dir = pos_to_vec2(p.dir) +			var player_instance: Player = players[p.player] +			player_instance.update_position(pos, p.rot, p.boost) +			if p.player == player_id:  				last_position = pos  		"movement_sync":  			if not players.has(player_id): return  			var player_instance: ControllablePlayer = players[player_id]  			player_instance.position_ = last_position  		"move_item": -			var from: Dictionary = p["from"] -			var to: Dictionary = p["to"] -			var from_player = from.get("player") -			var from_tile = from.get("tile") -			var to_player = to.get("player") -			var to_tile = to.get("tile") -			if from_player != null and to_player != null: -				players[from_player].pass_to(players[to_player]) -			elif from_tile != null and to_player != null: -				var t: Tile = map.get_tile_instance(pos_to_vec2i(from_tile)) -				players[to_player].take_item(t) -			elif from_player != null and to_tile != null: -				var t: Tile = map.get_tile_instance(pos_to_vec2i(to_tile)) -				players[from_player].put_item(t) -			elif from_tile != null and to_tile != null: -				var from_tile2: Tile = map.get_tile_instance(pos_to_vec2i(from_tile)) -				var to_tile2: Tile = map.get_tile_instance(pos_to_vec2i(to_tile)) +			if "player" in p.from and "player" in p.to: +				players[p.from.player].pass_to(p.to.player) +			elif "tile" in p.from and "player" in p.to: +				var t: Tile = map.get_tile_instance(pos_to_vec2i(p.from.tile)) +				players[p.to.player].take_item(t) +			elif "player" in p.from and "tile" in p.to: +				var t: Tile = map.get_tile_instance(pos_to_vec2i(p.to.tile)) +				players[p.from.player].put_item(t) +			elif "tile" in p.from and "tile" in p.to: +				var from_tile2: Tile = map.get_tile_instance(pos_to_vec2i(p.from.tile)) +				var to_tile2: Tile = map.get_tile_instance(pos_to_vec2i(p.to.tile))  				from_tile2.pass_to(to_tile2)  		"set_progress": -			var warn: bool = p["warn"] -			var position: float = p["position"] -			var speed: float = p["speed"] -			var item: Dictionary = p["item"] -			var tile = item.get("tile") -			var player = item.get("player") -			var acting_player = p.get("player") -			 -			if tile != null: +			if "tile" in p.item:  				@warning_ignore("incompatible_ternary") -				var t: Tile = map.get_tile_instance(pos_to_vec2i(tile)) -				t.progress(position, speed, warn, players.get(int(acting_player) if acting_player != null else null)) +				var t: Tile = map.get_tile_instance(pos_to_vec2i(p.item.tile)) +				t.progress(p.position, p.speed, p.warn, players.get(p.acting_player if "acting_player" in p else null))  			else: -				players[player].progress(position, speed, warn) +				players[p.item.player].progress(p.position, p.speed, p.warn)  		"clear_progress": -			var item: Dictionary = p["item"] -			var tile = item.get("tile") -			var player = item.get("player") -			 -			if tile != null: -				var t: Tile = map.get_tile_instance(pos_to_vec2i(tile)) +			if "tile" in p.item: +				var t: Tile = map.get_tile_instance(pos_to_vec2i(p.item.tile))  				t.finish()  			else: -				players[player].finish() +				players[p.item.player].finish()  		"set_item":  			var location: Dictionary = p["location"]  			var tile = location.get("tile") @@ -205,42 +181,32 @@ func handle_packet(p):  					players[player].set_item(null)  		"update_map":  			var tile: Vector2i = pos_to_vec2i(p["tile"]) -			var kind = p.get("kind")  			var neighbors: Array = p["neighbors"] -			if kind != null:  +			if p.kind != null:   				if neighbors != null: neighbors = neighbors.map(func(x): return tile_names[x] if x != null else null) -				map.set_tile(tile, tile_names[kind], neighbors) +				map.set_tile(tile, tile_names[p.kind], neighbors)  			else: map.clear_tile(tile)  		"communicate": -			var player: int = p["player"] -			var message = p.get("message")  			var timeout_initial: float = p["timeout"]["initial"] if p["timeout"] != null else 5.  			var timeout_remaining: float = p["timeout"]["remaining"] if p["timeout"] != null else 5. -			if message != null: -				var item = message.get("item") -				var text = message.get("text") -				var effect = message.get("effect") -				if item != null: -					players[player].item_message(item_names[item], timeout_initial, timeout_remaining) -				elif text != null: -					players[player].text_message(text, timeout_initial, timeout_remaining) -					var username: String = players[player].username -					text_message.emit(username, text, timeout_initial, timeout_remaining) -					text_message_history.append([username, text]) +			if p.message != null: +				if "item" in p.message: +					players[p.player].item_message(item_names[p.message.item], timeout_initial, timeout_remaining) +				elif "text" in p.message: +					players[p.player].text_message(p.message.text, timeout_initial, timeout_remaining) +					var username: String = players[p.player].username +					text_message.emit(username, p.message.text, timeout_initial, timeout_remaining) +					text_message_history.append([username, p.message.text])  				else:  					push_error("neither text, item nor effect provided")  			else: -				players[player].clear_message() +				players[p.player].clear_message()  		"effect": -			var player: int = p["player"] -			var name: int = p["name"] -			players[player].effect_message(name) +			players[p.player].effect_message(p.name)  		"set_ingame": -			var state = p["state"] -			var lob = p["lobby"] -			in_lobby = lob +			in_lobby = p.lobby  			in_lobby_updated.emit(in_lobby) -			if state: +			if p.state:  				map.gi_bake()  				await get_parent()._menu_open()  				map.autobake = true @@ -255,21 +221,13 @@ func handle_packet(p):  			if lobby and not join_sent:  				join() -			overlay.set_ingame(state, lob) -			follow_camera.set_ingame(state, lob) -		"error": -			var message = p["message"] -			push_warning("server error: %s" % message) +			overlay.set_ingame(p.state, p.lobby) +			follow_camera.set_ingame(p.state, p.lobby)  		"score": -			var demands_failed: int = p["demands_failed"] -			var demands_completed: int = p["demands_completed"] -			var points: int = p["points"] -			var time_remaining = p.get("time_remaining") -			if time_remaining != null: -				overlay.update(demands_failed, demands_completed, points, time_remaining) +			if p.time_remaining != null: +				overlay.update(p.demands_failed, p.demands_completed, p.points, p.time_remaining)  		"menu": -			var menu_type: String = p["menu"] -			match menu_type: +			match p.menu:  				"book":  					menu.submenu("res://menu/book/book.tscn")  				"score": @@ -283,7 +241,7 @@ func handle_packet(p):  			else:  				popup_message.display_server_msg(mstr)  		"environment": -			$Environment.update(p["effects"]) +			$Environment.update(p.effects)  		"replay_start":  			is_replay = true  |