Add standalone type definitions

This commit is contained in:
Mitchell McCaffrey 2021-07-08 12:01:02 +10:00
parent 123ebd880a
commit 45a4443dd1
17 changed files with 388 additions and 0 deletions

8
src/types/Asset.ts Normal file
View File

@ -0,0 +1,8 @@
export type Asset = {
file: Uint8Array;
width: number;
height: number;
id: string;
owner: string;
mime: string;
};

20
src/types/Dice.ts Normal file
View File

@ -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[];
};

74
src/types/Drawing.ts Normal file
View File

@ -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;

29
src/types/Fog.ts Normal file
View File

@ -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;
};

26
src/types/Grid.ts Normal file
View File

@ -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;
};

13
src/types/Group.ts Normal file
View File

@ -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;

36
src/types/Map.ts Normal file
View File

@ -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;

15
src/types/MapState.ts Normal file
View File

@ -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<string, TokenState>;
drawShapes: Record<string, Drawing>;
fogShapes: Record<string, Fog>;
editFlags: Array<EditFlag>;
notes: Record<string, Note>;
mapId: string;
};

13
src/types/Note.ts Normal file
View File

@ -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;
};

21
src/types/Outline.ts Normal file
View File

@ -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;

3
src/types/PartyState.ts Normal file
View File

@ -0,0 +1,3 @@
import { PlayerState } from "./PlayerState";
export type PartyState = Record<string, PlayerState>;

10
src/types/PlayerState.ts Normal file
View File

@ -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;
};

12
src/types/Pointer.ts Normal file
View File

@ -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;
};

34
src/types/Settings.ts Normal file
View File

@ -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;
};

10
src/types/Timer.ts Normal file
View File

@ -0,0 +1,10 @@
export type Duration = {
hour: number;
minute: number;
second: number;
};
export type Timer = {
current: number;
max: number;
};

31
src/types/Token.ts Normal file
View File

@ -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;

33
src/types/TokenState.ts Normal file
View File

@ -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;