Repository navigation
Expand file tree
/
Copy pathsimulated-region.ts
More file actions
54 lines (51 loc) · 1.95 KB
/
Copy pathsimulated-region.ts
File metadata and controls
54 lines (51 loc) · 1.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import { z } from 'zod';
import type { Immutable } from 'immer';
import { getIdMapSchema, uuid, uuidSchema } from '../utils/uuid.js';
import { exerciseSimulationEventSchema } from '../simulation/events/exercise-simulation-event.js';
import { exerciseSimulationBehaviorStateSchema } from '../simulation/behaviors/exercise-simulation-behavior.js';
import { exerciseSimulationActivityStateSchema } from '../simulation/activities/exercise-simulation-activity.js';
import type { ImageProperties } from './utils/image-properties.js';
import { positionSchema } from './utils/position/position.js';
import { type Size, sizeSchema } from './utils/size.js';
import type { MapCoordinates } from './utils/position/map-coordinates.js';
import { newMapPositionAt } from './utils/position/map-position.js';
export const simulatedRegionSchema = z.strictObject({
id: uuidSchema,
type: z.literal('simulatedRegion'),
/**
* top-left position
*
* @deprecated Do not access directly, use helper methods from models/utils/position/position-helpers(-mutable) instead.
*/
position: positionSchema,
size: sizeSchema,
name: z.string(),
borderColor: z.string(),
inEvents: z.array(exerciseSimulationEventSchema),
behaviors: z.array(exerciseSimulationBehaviorStateSchema),
activities: getIdMapSchema(exerciseSimulationActivityStateSchema),
});
export type SimulatedRegion = Immutable<z.infer<typeof simulatedRegionSchema>>;
export function newSimulatedRegion(
position: MapCoordinates,
size: Size,
name: string,
borderColor: string = '#cccc00'
): SimulatedRegion {
return {
id: uuid(),
type: 'simulatedRegion',
position: newMapPositionAt(position),
size,
name,
borderColor,
inEvents: [],
behaviors: [],
activities: {},
};
}
export const simulatedRegionImage: ImageProperties = {
url: 'assets/simulated-region.svg',
height: 1800,
aspectRatio: 1600 / 900,
};