message-schemas/schema-types.ts

77 lines
2.1 KiB
TypeScript
Raw Normal View History

import { tags } from "typia";
2024-04-01 18:35:26 +02:00
/* messages ***************************************************************************************/
export type SimToCmMessage = {
message?: Message,
stressLevel?: Range<0, 1>,
};
export type Message = RequestApprovalToAttack | AcaFuelLow | MissileToOwnshipDetected | AcaDefect | AcaHeadingToBase;
export type BaseMessage<TKind extends string, TData extends object> = {
2024-05-13 15:06:29 +02:00
id: Uuid,
conversationId: Uuid,
priority: Priority,
2024-05-22 10:14:27 +02:00
tags: Array<string>,
kind: TKind,
data: TData,
};
export type RequestApprovalToAttack = BaseMessage<"RequestApprovalToAttack", {
target: Target,
collateralDamage: "none" | "simple" | "complex",
detectedByAca?: Id,
attackWeapon: Weapon,
choiceWeight: Range<-1, 1>, // specifies which choice option to prefer, -1: deny, 1: approve
}>;
export type MissileToOwnshipDetected = BaseMessage<"MissileToOwnshipDetected", {
2024-05-13 14:49:32 +02:00
missileLocation: Point,
survivability: Range<0, 1>,
detectedByAca?: Id,
acaAttackWeapon?: Weapon,
choiceWeight: Range<-1, 1>, // specifies which choice option to prefer, -1: avoid, 1: intervene
2024-04-01 18:35:26 +02:00
}>;
export type AcaFuelLow = BaseMessage<"AcaFuelLow", {
acaId: Id,
fuelLevel: Range<0, 1>,
}>;
export type AcaDefect = BaseMessage<"AcaDefect", {
acaId: Id,
message: string,
2024-04-01 18:35:26 +02:00
}>;
export type AcaHeadingToBase = BaseMessage<"AcaHeadingToBase", {
acaId: Id,
reason?: "fuelLow" | "weaponsLow",
2024-04-01 18:35:26 +02:00
}>;
2024-04-01 18:35:26 +02:00
/* utility types **********************************************************************************/
2024-04-09 19:02:51 +02:00
export type Id = number & tags.Type<"uint64">;
2024-05-13 15:06:29 +02:00
export type Uuid = string & tags.Format<"uuid">;
2024-05-13 14:49:32 +02:00
export type Priority = DiscreteRange<0, 10>;
export type Range<From extends number, To extends number> = number & tags.Type<"float"> & tags.Minimum<From> & tags.Maximum<To>;
2024-05-13 14:49:32 +02:00
export type DiscreteRange<From extends number, To extends number> = number & tags.Type<"int64"> & tags.Minimum<From> & tags.Maximum<To>;
export type Target = {
2024-05-13 14:49:32 +02:00
location: Point,
threatLevel: Range<0, 1>,
2024-05-13 15:05:25 +02:00
type: "airDefense" | "artillery" | "radar",
};
2024-05-13 14:49:32 +02:00
export type Point = {
x: DiscreteRange<0, 1920>,
y: DiscreteRange<0, 1080>,
};
export type Weapon = {
type: string,
load: Range<0, 1>,
};