From ee4dbc0428b619ed6b6ff03be57427f38933b4e2 Mon Sep 17 00:00:00 2001 From: szdytom Date: Tue, 5 Mar 2024 23:18:46 +0800 Subject: [PATCH] [processor] init --- processor/index.mjs | 0 processor/package.json | 10 ++++++++ processor/src/logic/board.mjs | 27 ++++++++++++++++++++++ processor/src/logic/team.mjs | 0 processor/src/shared/direction.mjs | 15 ++++++++++++ processor/src/shared/move.mjs | 32 ++++++++++++++++++++++++++ processor/src/shared/player.mjs | 8 +++++++ processor/src/shared/pos.mjs | 5 ++++ processor/src/shared/team.mjs | 8 +++++++ processor/src/shared/tile.mjs | 37 ++++++++++++++++++++++++++++++ processor/src/shared/unit.mjs | 5 ++++ 11 files changed, 147 insertions(+) create mode 100644 processor/index.mjs create mode 100644 processor/package.json create mode 100644 processor/src/logic/board.mjs create mode 100644 processor/src/logic/team.mjs create mode 100644 processor/src/shared/direction.mjs create mode 100644 processor/src/shared/move.mjs create mode 100644 processor/src/shared/player.mjs create mode 100644 processor/src/shared/pos.mjs create mode 100644 processor/src/shared/team.mjs create mode 100644 processor/src/shared/tile.mjs create mode 100644 processor/src/shared/unit.mjs diff --git a/processor/index.mjs b/processor/index.mjs new file mode 100644 index 0000000..e69de29 diff --git a/processor/package.json b/processor/package.json new file mode 100644 index 0000000..3305855 --- /dev/null +++ b/processor/package.json @@ -0,0 +1,10 @@ +{ + "name": "@og/processor", + "type": "module", + "main": "index.mjs", + "dependencies": { + "@og/binary-struct": "file:../shared/bstruct", + "@og/utility": "file:../shared/utility", + "@og/error-utils": "file:../shared/error-utils" + } +} \ No newline at end of file diff --git a/processor/src/logic/board.mjs b/processor/src/logic/board.mjs new file mode 100644 index 0000000..0620516 --- /dev/null +++ b/processor/src/logic/board.mjs @@ -0,0 +1,27 @@ +import { Queue } from '@og/utility'; + +/** @typedef {import('../shared/player.mjs').Player} Player */ +/** @typedef {import('../shared/team.mjs').Team} Team */ + +export class PlayerState { + /** @type {Player} */ + id; + + /** @type {Team} */ + team; + + /** @type {boolean} */ + is_defeated = false; + + /** @type {Queue} */ + orders = new Queue(); + + constructor(id, team) { + this.id = id; + this.team = team; + } +}; + +export class GameBoard { + // TODO +}; diff --git a/processor/src/logic/team.mjs b/processor/src/logic/team.mjs new file mode 100644 index 0000000..e69de29 diff --git a/processor/src/shared/direction.mjs b/processor/src/shared/direction.mjs new file mode 100644 index 0000000..986c075 --- /dev/null +++ b/processor/src/shared/direction.mjs @@ -0,0 +1,15 @@ +import { BASIC_TYPES } from '@og/binary-struct'; + +/** @typedef {number} Direction */ + +export const DIRECTION = { + N: 0x00, + S: 0x01, + W: 0x02, + E: 0x03, +}; + +export const TYPEDEF_Direction = BASIC_TYPES.u8; + +export const DIRECTION_DELTA_X = [ /* TODO */ ]; +export const DIRECTION_DELTA_Y = [ /* TODO */ ]; diff --git a/processor/src/shared/move.mjs b/processor/src/shared/move.mjs new file mode 100644 index 0000000..1d873a0 --- /dev/null +++ b/processor/src/shared/move.mjs @@ -0,0 +1,32 @@ +/** @typedef {import('./player.mjs').Player} Player */ +/** @typedef {import('./direction.mjs').Direction} Direction */ +/** @typedef {import('./pos.mjs').PosT} PosT */ + +export class PlayerMove { + /** @type {Player} */ + player; + + /** @type {PosT} */ + x; + + /** @type {PosT} */ + y; + + /** @type {Direction} */ + dir; + + /** @type {boolean} */ + is_half = false; + + isValid() { + // TODO + } + + get tx() { + // TODO + } + + get ty() { + // TODO + } +}; diff --git a/processor/src/shared/player.mjs b/processor/src/shared/player.mjs new file mode 100644 index 0000000..85402a1 --- /dev/null +++ b/processor/src/shared/player.mjs @@ -0,0 +1,8 @@ +import { BASIC_TYPES } from '@og/binary-struct'; + +/** @typedef {number} Player */ + +/** @type {Player} */ +export const NEUTRAL_PLAYER = 0; + +export const TYPEDEF_Player = BASIC_TYPES.u8; diff --git a/processor/src/shared/pos.mjs b/processor/src/shared/pos.mjs new file mode 100644 index 0000000..861f141 --- /dev/null +++ b/processor/src/shared/pos.mjs @@ -0,0 +1,5 @@ +import { BASIC_TYPES } from '@og/binary-struct'; + +/** @typedef {number} PosT */ + +export const TYPEDEF_PosT = BASIC_TYPES.u8; diff --git a/processor/src/shared/team.mjs b/processor/src/shared/team.mjs new file mode 100644 index 0000000..b5a5da3 --- /dev/null +++ b/processor/src/shared/team.mjs @@ -0,0 +1,8 @@ +import { BASIC_TYPES } from '@og/binary-struct'; + +/** @typedef {number} Team */ + +/** @type {Team} */ +export const NEUTRAL_TEAM = 0; + +export const TYPEDEF_Team = BASIC_TYPES.u8; diff --git a/processor/src/shared/tile.mjs b/processor/src/shared/tile.mjs new file mode 100644 index 0000000..20547a0 --- /dev/null +++ b/processor/src/shared/tile.mjs @@ -0,0 +1,37 @@ +import { NEUTRAL_PLAYER, TYPEDEF_Player } from './player.mjs'; +import { TYPEDEF_Unit } from './unit.mjs'; +import { BASIC_TYPES } from '@og/binary-struct'; + +/** @typedef {import('./player.mjs').Player} Player */ +/** @typedef {import('./unit.mjs').Unit} Unit */ + +/** @typedef {number} TileType */ + +export const TILE_TYPE = { + misty: 0x00, + mountain: 0x01, + stronghold: 0x02, + blank: 0x03, + capital: 0x04, + swamp: 0x05, + isValid: (type) => (0 <= type && type <= 5), +}; + +export const TYPEDEF_TileType = BASIC_TYPES.u8; + +export class Tile { + /** @type {Player} */ + owner = NEUTRAL_PLAYER; + + /** @type {TileType} */ + type = TILE_TYPE.misty; + + /** @type {Unit} */ + unit = 0; + + static typedef = [ + { field: 'owner', type: TYPEDEF_Player }, + { field: 'type', type: TYPEDEF_TileType }, + { field: 'unit', type: TYPEDEF_Unit }, + ]; +}; diff --git a/processor/src/shared/unit.mjs b/processor/src/shared/unit.mjs new file mode 100644 index 0000000..b7c9dff --- /dev/null +++ b/processor/src/shared/unit.mjs @@ -0,0 +1,5 @@ +import { BASIC_TYPES } from '@og/binary-struct'; + +/** @typedef {number} Unit */ + +export const TYPEDEF_Unit = BASIC_TYPES.i32;