From 45a4443dd1f7da0835e07d4b04801d1cb1ac26dc Mon Sep 17 00:00:00 2001 From: Mitchell McCaffrey Date: Thu, 8 Jul 2021 12:01:02 +1000 Subject: [PATCH] Add standalone type definitions --- src/types/Asset.ts | 8 +++++ src/types/Dice.ts | 20 +++++++++++ src/types/Drawing.ts | 74 ++++++++++++++++++++++++++++++++++++++++ src/types/Fog.ts | 29 ++++++++++++++++ src/types/Grid.ts | 26 ++++++++++++++ src/types/Group.ts | 13 +++++++ src/types/Map.ts | 36 +++++++++++++++++++ src/types/MapState.ts | 15 ++++++++ src/types/Note.ts | 13 +++++++ src/types/Outline.ts | 21 ++++++++++++ src/types/PartyState.ts | 3 ++ src/types/PlayerState.ts | 10 ++++++ src/types/Pointer.ts | 12 +++++++ src/types/Settings.ts | 34 ++++++++++++++++++ src/types/Timer.ts | 10 ++++++ src/types/Token.ts | 31 +++++++++++++++++ src/types/TokenState.ts | 33 ++++++++++++++++++ 17 files changed, 388 insertions(+) create mode 100644 src/types/Asset.ts create mode 100644 src/types/Dice.ts create mode 100644 src/types/Drawing.ts create mode 100644 src/types/Fog.ts create mode 100644 src/types/Grid.ts create mode 100644 src/types/Group.ts create mode 100644 src/types/Map.ts create mode 100644 src/types/MapState.ts create mode 100644 src/types/Note.ts create mode 100644 src/types/Outline.ts create mode 100644 src/types/PartyState.ts create mode 100644 src/types/PlayerState.ts create mode 100644 src/types/Pointer.ts create mode 100644 src/types/Settings.ts create mode 100644 src/types/Timer.ts create mode 100644 src/types/Token.ts create mode 100644 src/types/TokenState.ts diff --git a/src/types/Asset.ts b/src/types/Asset.ts new file mode 100644 index 0000000..f19fbca --- /dev/null +++ b/src/types/Asset.ts @@ -0,0 +1,8 @@ +export type Asset = { + file: Uint8Array; + width: number; + height: number; + id: string; + owner: string; + mime: string; +}; diff --git a/src/types/Dice.ts b/src/types/Dice.ts new file mode 100644 index 0000000..7cf36b8 --- /dev/null +++ b/src/types/Dice.ts @@ -0,0 +1,20 @@ +import { InstancedMesh } from "@babylonjs/core"; + +export type DiceType = "d4" | "d6" | "d8" | "d10" | "d12" | "d20"; + +export type DiceRoll = { + type: DiceType; + roll: number | "unknown"; +}; + +export type Dice = { + type: DiceType; + instance: InstancedMesh; + asleep: boolean; + d10Instance?: InstancedMesh; +}; + +export type DiceState = { + share: boolean; + rolls: DiceRoll[]; +}; diff --git a/src/types/Drawing.ts b/src/types/Drawing.ts new file mode 100644 index 0000000..ecef0f7 --- /dev/null +++ b/src/types/Drawing.ts @@ -0,0 +1,74 @@ +import Vector2 from "../helpers/Vector2"; + +export type DrawingToolType = + | "brush" + | "paint" + | "line" + | "rectangle" + | "circle" + | "triangle" + | "erase"; + +export type DrawingToolSettings = { + type: DrawingToolType; + color: string; + useBlending: boolean; +}; + +export type PointsData = { + points: Vector2[]; +}; + +export type RectData = { + x: number; + y: number; + width: number; + height: number; +}; + +export type CircleData = { + x: number; + y: number; + radius: number; +}; + +export type BaseDrawing = { + blend: boolean; + color: string; + id: string; + strokeWidth: number; +}; + +export type BaseShape = BaseDrawing & { + type: "shape"; +}; + +export type Line = BaseShape & { + shapeType: "line"; + data: PointsData; +}; + +export type Rectangle = BaseShape & { + shapeType: "rectangle"; + data: RectData; +}; + +export type Circle = BaseShape & { + shapeType: "circle"; + data: CircleData; +}; + +export type Triangle = BaseShape & { + shapeType: "triangle"; + data: PointsData; +}; + +export type Shape = Line | Rectangle | Circle | Triangle; + +export type Path = BaseDrawing & { + type: "path"; + pathType: "fill" | "stroke"; + data: PointsData; +}; + +export type Drawing = Shape | Path; diff --git a/src/types/Fog.ts b/src/types/Fog.ts new file mode 100644 index 0000000..ba54f36 --- /dev/null +++ b/src/types/Fog.ts @@ -0,0 +1,29 @@ +import Vector2 from "../helpers/Vector2"; + +export type FogToolType = + | "polygon" + | "rectangle" + | "brush" + | "toggle" + | "remove"; + +export type FogToolSettings = { + type: FogToolType; + multilayer: boolean; + preview: boolean; + useFogCut: boolean; +}; + +export type FogData = { + points: Vector2[]; + holes: Vector2[][]; +}; + +export type Fog = { + color: string; + data: FogData; + id: string; + strokeWidth: number; + type: "fog"; + visible: boolean; +}; diff --git a/src/types/Grid.ts b/src/types/Grid.ts new file mode 100644 index 0000000..9ff6ea5 --- /dev/null +++ b/src/types/Grid.ts @@ -0,0 +1,26 @@ +import Vector2 from "../helpers/Vector2"; + +export type GridInset = { + topLeft: Vector2; + bottomRight: Vector2; +}; + +export type GridMeasurementType = + | "chebyshev" + | "alternating" + | "euclidean" + | "manhattan"; + +export type GridMeasurement = { + type: GridMeasurementType; + scale: string; +}; + +export type GridType = "square" | "hexVertical" | "hexHorizontal"; + +export type Grid = { + inset: GridInset; + size: Vector2; + type: GridType; + measurement: GridMeasurement; +}; diff --git a/src/types/Group.ts b/src/types/Group.ts new file mode 100644 index 0000000..37faa00 --- /dev/null +++ b/src/types/Group.ts @@ -0,0 +1,13 @@ +export type GroupItem = { + id: string; + type: "item"; +}; + +export type GroupContainer = { + id: string; + type: "group"; + items: GroupItem[]; + name: string; +}; + +export type Group = GroupItem | GroupContainer; diff --git a/src/types/Map.ts b/src/types/Map.ts new file mode 100644 index 0000000..bed1abb --- /dev/null +++ b/src/types/Map.ts @@ -0,0 +1,36 @@ +import { Grid } from "./Grid"; + +export type BaseMap = { + id: string; + name: string; + owner: string; + grid: Grid; + width: number; + height: number; + type: string; + lastModified: number; + created: number; + showGrid: boolean; + snapToGrid: boolean; +}; + +export type DefaultMap = BaseMap & { + type: "default"; + key: string; +}; + +export type FileMapResolutions = { + low?: string; + medium?: string; + high?: string; + ultra?: string; +}; + +export type FileMap = BaseMap & { + type: "file"; + file: string; + resolutions: FileMapResolutions; + thumbnail: string; +}; + +export type Map = DefaultMap | FileMap; diff --git a/src/types/MapState.ts b/src/types/MapState.ts new file mode 100644 index 0000000..7b40179 --- /dev/null +++ b/src/types/MapState.ts @@ -0,0 +1,15 @@ +import { Drawing } from "./Drawing"; +import { Fog } from "./Fog"; +import { Note } from "./Note"; +import { TokenState } from "./TokenState"; + +export type EditFlag = "drawing" | "tokens" | "notes" | "fog"; + +export type MapState = { + tokens: Record; + drawShapes: Record; + fogShapes: Record; + editFlags: Array; + notes: Record; + mapId: string; +}; diff --git a/src/types/Note.ts b/src/types/Note.ts new file mode 100644 index 0000000..4e1b02c --- /dev/null +++ b/src/types/Note.ts @@ -0,0 +1,13 @@ +export type Note = { + id: string; + color: string; + lastModified: number; + lastModifiedBy: string; + locked: boolean; + size: number; + text: string; + textOnly: boolean; + visible: boolean; + x: number; + y: number; +}; diff --git a/src/types/Outline.ts b/src/types/Outline.ts new file mode 100644 index 0000000..d045cc4 --- /dev/null +++ b/src/types/Outline.ts @@ -0,0 +1,21 @@ +export type CircleOutline = { + type: "circle"; + x: number; + y: number; + radius: number; +}; + +export type RectOutline = { + type: "rect"; + width: number; + height: number; + x: number; + y: number; +}; + +export type PathOutline = { + type: "path"; + points: number[]; +}; + +export type Outline = CircleOutline | RectOutline | PathOutline; diff --git a/src/types/PartyState.ts b/src/types/PartyState.ts new file mode 100644 index 0000000..e9a453c --- /dev/null +++ b/src/types/PartyState.ts @@ -0,0 +1,3 @@ +import { PlayerState } from "./PlayerState"; + +export type PartyState = Record; diff --git a/src/types/PlayerState.ts b/src/types/PlayerState.ts new file mode 100644 index 0000000..4aa2f97 --- /dev/null +++ b/src/types/PlayerState.ts @@ -0,0 +1,10 @@ +import { Timer } from "./Timer"; +import { DiceState } from "./Dice"; + +export type PlayerState = { + nickname: string; + timer?: Timer; + dice: DiceState; + sessionId?: string; + userId?: string; +}; diff --git a/src/types/Pointer.ts b/src/types/Pointer.ts new file mode 100644 index 0000000..77e69b0 --- /dev/null +++ b/src/types/Pointer.ts @@ -0,0 +1,12 @@ +import Vector2 from "../helpers/Vector2"; + +export type PointerToolSettings = { + color: string; +}; + +export type PointerState = { + position: Vector2; + visible: boolean; + id: string; + color: string; +}; diff --git a/src/types/Settings.ts b/src/types/Settings.ts new file mode 100644 index 0000000..453a8d3 --- /dev/null +++ b/src/types/Settings.ts @@ -0,0 +1,34 @@ +import { Duration } from "./Timer"; +import { DrawingToolSettings } from "./Drawing"; +import { FogToolSettings } from "./Fog"; +import { PointerToolSettings } from "./Pointer"; + +export type DrawingSettings = DrawingToolSettings; +export type FogSettings = FogToolSettings & { + editOpacity: number; + showGuides: boolean; +}; +export type DiceSettings = { + shareDice: boolean; + style: string; +}; +export type GameSettings = { + usePassword: boolean; +}; +export type MapSettings = { + fullScreen: boolean; + labeSize: number; + gridSnappingSensitivity: number; +}; +export type PointerSettings = PointerToolSettings; +export type TimerSettings = Duration; + +export type Settings = { + dice: DiceSettings; + drawing: DrawingSettings; + fog: FogSettings; + game: GameSettings; + map: MapSettings; + pointer: PointerSettings; + timer: TimerSettings; +}; diff --git a/src/types/Timer.ts b/src/types/Timer.ts new file mode 100644 index 0000000..eb199b3 --- /dev/null +++ b/src/types/Timer.ts @@ -0,0 +1,10 @@ +export type Duration = { + hour: number; + minute: number; + second: number; +}; + +export type Timer = { + current: number; + max: number; +}; diff --git a/src/types/Token.ts b/src/types/Token.ts new file mode 100644 index 0000000..b9241c4 --- /dev/null +++ b/src/types/Token.ts @@ -0,0 +1,31 @@ +import { Outline } from "./Outline"; + +export type TokenCategory = "character" | "vehicle" | "prop"; + +export type BaseToken = { + id: string; + name: string; + defaultSize: number; + defaultCategory: TokenCategory; + defaultLabel: string; + hideInSidebar: boolean; + width: number; + height: number; + owner: string; + created: number; + lastModified: number; + outline: Outline; +}; + +export type DefaultToken = BaseToken & { + type: "default"; + key: string; +}; + +export type FileToken = BaseToken & { + type: "file"; + file: string; + thumbnail: string; +}; + +export type Token = DefaultToken | FileToken; diff --git a/src/types/TokenState.ts b/src/types/TokenState.ts new file mode 100644 index 0000000..c5360f8 --- /dev/null +++ b/src/types/TokenState.ts @@ -0,0 +1,33 @@ +import { Outline } from "./Outline"; + +export type BaseTokenState = { + id: string; + tokenId: string; + owner: string; + size: number; + category: string; + label: string; + statuses: string[]; + x: number; + y: number; + lastModifiedBy: string; + lastModified: number; + rotation: number; + locked: boolean; + visible: boolean; + outline: Outline; + width: number; + height: number; +}; + +export type DefaultTokenState = BaseTokenState & { + type: "default"; + key: string; +}; + +export type FileTokenState = BaseTokenState & { + type: "file"; + file: string; +}; + +export type TokenState = DefaultTokenState | FileTokenState;