diff options
Diffstat (limited to 'test-client')
-rw-r--r-- | test-client/main.ts | 6 | ||||
-rw-r--r-- | test-client/protocol.ts | 19 |
2 files changed, 23 insertions, 2 deletions
diff --git a/test-client/main.ts b/test-client/main.ts index d56cf7e6..b497ee36 100644 --- a/test-client/main.ts +++ b/test-client/main.ts @@ -115,6 +115,7 @@ export let interact_possible_anim: number = 0 export let interact_active_anim: number = 0 export let nametag_scale_anim: number = 0 let interacting: V2 | undefined; +let last_server_sent_position: V2 = { x: 0, y: 0 } function get_item_location(loc: ItemLocation): PlayerData | TileData { if ("tile" in loc) return tiles.get(loc.tile.toString())! @@ -161,7 +162,7 @@ function packet(p: PacketC) { // const dist = length(sub_v2(pl.position, pos));a // TODO this is actually not a good idea if latency is too high // if (p.player == my_id && dist < 3) return; // we know better where we are - if (p.player == my_id) return + if (p.player == my_id) return last_server_sent_position = pos pl.position.x = pos.x pl.position.y = pos.y pl.boosting = p.boosting @@ -231,6 +232,9 @@ function packet(p: PacketC) { case "set_ingame": console.log(`ingame ${p.state}`); break; + case "movement_sync": + players.get(my_id)!.position = last_server_sent_position + break; default: console.warn("unknown packet", p); } diff --git a/test-client/protocol.ts b/test-client/protocol.ts index 2a0f2b87..376ebd58 100644 --- a/test-client/protocol.ts +++ b/test-client/protocol.ts @@ -56,10 +56,27 @@ export type PacketC = | { type: "update_map", tile: Vec2, kind: TileIndex | null, neighbors: [TileIndex | null] } // A map tile was changed | { type: "communicate", player: PlayerID, message?: Message, persist: boolean } // A player wants to communicate something, message is null when cleared | { type: "server_message", text: string } // Text message from the server - | { type: "score", points: number, demands_failed: number, demands_completed: number, time_remaining?: number } // Supplies information for score OSD + | { type: "score" } & Score // Supplies information for score OSD + | { type: "menu" } & Menu // Open a menu on the client-side + | { type: "movement_sync" } // Your movement is difference on the server, you should update your position from a `position` packet | { type: "set_ingame", state: boolean, lobby: boolean } // Set to false when entering the game or switching maps | { type: "error", message: string } // Your client did something wrong. +export type Menu = + { menu: "book" } + | { menu: "score" } & Score + +export interface Score { + points: number, + demands_failed: number, + demands_completed: number, + time_remaining: number, + players: number, + active_recipes: number, + passive_recipes: number, + instant_recipes: number, +} + export type Message = { item: number } | { text: string } |