From d233589af0fb6d1567052f32379cc7db3277ebbf Mon Sep 17 00:00:00 2001 From: fjy666 <3234769633@qq.com> Date: Sun, 4 Feb 2024 14:46:15 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=A8=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/processor.md | 4 +- processor/pc/pctypes.h | 97 +++++++++++++++++++++++++++++++++++++++++- 2 files changed, 98 insertions(+), 3 deletions(-) diff --git a/docs/processor.md b/docs/processor.md index 1b268ce..c7a7f8f 100644 --- a/docs/processor.md +++ b/docs/processor.md @@ -225,7 +225,7 @@ ### 结构化数据编码 -在把一些数据编码为二进制数据时,逐个将其成员按照顺序紧密得放在一起。在编码整数或浮点数时,直接使用小端序的二进制表示。在编码字符串或不定长数组时,首先给出一个 4 字节的无符号整数表示长度,然后逐个给出其成员元素。 +在把一些数据编码为二进制数据时,逐个将其成员按照顺序紧密地放在一起。在编码整数或浮点数时,直接使用小端序的二进制表示。在编码字符串或不定长数组时,首先给出一个 4 字节的无符号整数表示长度,然后逐个给出其成员元素。 ### 过程调用中的类型 @@ -334,7 +334,7 @@ | 成员标识符 | 类型 | 含义 | | :--- | :--- | :--- | | `team` | `Team` | 队伍 | -| `diffs` | `TeamViewDiff` | 有变化的格子 | +| `diffs` | `TileDiff[]` | 有变化的格子 | **类型** `GameState`:用于表示一半回合结束时的状态,该类型用于 `tick` 的返回值。 diff --git a/processor/pc/pctypes.h b/processor/pc/pctypes.h index df2bdac..b1cf3f6 100644 --- a/processor/pc/pctypes.h +++ b/processor/pc/pctypes.h @@ -1,7 +1,7 @@ #ifndef OGPC_PCTYPES_H_ #define OGPC_PCTYPES_H_ -#include +#include #include #include #include "astuple.h" @@ -46,5 +46,100 @@ struct PlayerRanking { OGPC_DECLARE_ASTUPLE(player, is_defeated, land, unit) }; +struct TeamRanking { + Team team; + std::vector players; + + OGPC_DECLARE_ASTUPLE(team, players) +}; + +struct Tile { + Player owner; + std::uint8_t type; + std::int32_t unit; + + OGPC_DECLARE_ASTUPLE(owner, type, unit) +}; + +struct TileDiff { + std::uint8_t x; + std::uint8_t y; + Tile value; + + OGPC_DECLARE_ASTUPLE(x, y, value) +}; + +struct TeamViewDiff { + Team team; + std::vector diffs; + + OGPC_DECLARE_ASTUPLE(team, diffs) +}; + +struct GameState { + std::uint32_t halfturn_id; + std::vector defeated_players; + std::vector alive_players; + std::vector leaderboard; + std::vector diffs; + std::vector msg; + + OGPC_DECLARE_ASTUPLE(halfturn_id, defeated_players, alive_players, leaderboard, diffs, msg) +}; + +struct Modifier { + std::uint32_t key; + std::int32_t value; + + OGPC_DECLARE_ASTUPLE(key, value) +}; + +struct ReplayStep { + std::uint32_t halfturn_id; + std::vector player_moves; + std::vector offline_events; + + OGPC_DECLARE_ASTUPLE(halfturn_id, player_moves, offline_events) +}; + +struct PlayerInfo { + uuid uid; + std::uint8_t id; + std::string name; + + OGPC_DECLARE_ASTUPLE(uid, id, name) +}; + +struct InitInfo { + std::uint8_t n; + std::int32_t player_team; + std::vector modifiers; + + OGPC_DECLARE_ASTUPLE(n, player_team, modifiers) +}; + +struct Replay { + uuid rid; + std::uint64_t timestamp; + std::int8_t speed; + InitInfo init_info; + std::uint32_t length; + std::uint8_t player_num; + std::vector players; + Team winner; + std::vector terrain; + std::vector steps; + + OGPC_DECLARE_ASTUPLE(rid, timestamp, speed, init_info, length, player_num, players, winner, terrain, steps) +}; + +struct GameInfo { + uuid rid; + std::int8_t speed; + std::vector players; + + OGPC_DECLARE_ASTUPLE(rid, speed, players) +}; + #endif