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;