summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-09-19 13:11:49 +0200
committermetamuffin <metamuffin@disroot.org>2024-09-19 13:11:49 +0200
commit9e99dd43870217e4586d7fc14d8817a8ea3176e9 (patch)
tree34483dfc135050e1907a93210149e5d82ab4009f
parent7ef14b703f576c4b614e60142b3ce7eb801261da (diff)
downloadhurrycurry-9e99dd43870217e4586d7fc14d8817a8ea3176e9.tar
hurrycurry-9e99dd43870217e4586d7fc14d8817a8ea3176e9.tar.bz2
hurrycurry-9e99dd43870217e4586d7fc14d8817a8ea3176e9.tar.zst
refactor game.gd some more
-rw-r--r--client/game.gd136
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