UNPKG

@battle-racing/br-common-lib

Version:

Common library for all Battle Racing Repositorios

168 lines (153 loc) 6.27 kB
import { z } from 'zod'; import { configDiskSensorBallShooterModuleOptionsSchema, configureBallSensorDiskThrowerModuleOptionsSchema, flagConfigurationOptionsSchema, flagShowMediaOptionsSchema, playSoundOptionsSchema, rgbConfigurationOptionsSchema, rgbShowEffectOptionsSchema, screenCountdownParamsSchema, screenFinishViewInputSchema, screenUpdateGameViewInputSchema, speedChangeOptionsSchema, speedConfigurationSchema, starLaserConfigureModuleOptionsSchema, starLaserSendActionsOptionsSchema, } from '../hardware'; import { arithmeticExpressionSchema } from '../utils'; // Helper for arithmetic expressions const arithmeticOrNumberSchema = z.union([z.number(), arithmeticExpressionSchema]); // --- Speed Commands --- export const changeSpeedActionCommandOptionsSchema = speedChangeOptionsSchema.omit({ speed: true }).extend({ speed: arithmeticOrNumberSchema, }); export const speedModuleCommandSchema = z.union([ z.object({ module: z.literal('speed'), action: z.literal('activate') }), z.object({ module: z.literal('speed'), action: z.literal('deactivate') }), z.object({ module: z.literal('speed'), action: z.literal('change'), params: changeSpeedActionCommandOptionsSchema }), z.object({ module: z.literal('speed'), action: z.literal('configure'), params: speedConfigurationSchema }), ]); // --- Sound Commands --- export const playSoundActionCommandOptionsSchema = playSoundOptionsSchema.omit({ durationMs: true }).extend({ durationMs: arithmeticOrNumberSchema.optional(), }); export const soundModuleCommandSchema = z.object({ module: z.literal('sound'), action: z.literal('play'), params: playSoundActionCommandOptionsSchema, }); // --- Ball Sensor / Disk Thrower --- export const ballSensorDiskThrowerModuleCommandSchema = z.union([ z.object({ module: z.literal('ballSensorDiskThrower'), action: z.literal('activateSensor') }), z.object({ module: z.literal('ballSensorDiskThrower'), action: z.literal('deactivateSensor') }), z.object({ module: z.literal('ballSensorDiskThrower'), action: z.literal('configureModule'), params: configureBallSensorDiskThrowerModuleOptionsSchema, }), z.object({ module: z.literal('ballSensorDiskThrower'), action: z.literal('throwDisk') }), z.object({ module: z.literal('ballSensorDiskThrower'), action: z.literal('activateDiskThrower') }), z.object({ module: z.literal('ballSensorDiskThrower'), action: z.literal('deactivateDiskThrower') }), ]); // --- Disk Sensor / Ball Shooter --- export const diskSensorBallShooterModuleCommandSchema = z.union([ z.object({ module: z.literal('diskSensorBallShooter'), action: z.literal('configure'), params: configDiskSensorBallShooterModuleOptionsSchema, }), z.object({ module: z.literal('diskSensorBallShooter'), action: z.literal('prepareShooter') }), z.object({ module: z.literal('diskSensorBallShooter'), action: z.literal('shootBall') }), z.object({ module: z.literal('diskSensorBallShooter'), action: z.literal('activateSensor') }), z.object({ module: z.literal('diskSensorBallShooter'), action: z.literal('deactivateSensor') }), z.object({ module: z.literal('diskSensorBallShooter'), action: z.literal('calibrateSensor') }), ]); // --- Flag --- export const flagModuleCommandSchema = z.union([ z.object({ module: z.literal('flag'), action: z.literal('activate') }), z.object({ module: z.literal('flag'), action: z.literal('deactivate') }), z.object({ module: z.literal('flag'), action: z.literal('configure'), params: flagConfigurationOptionsSchema }), z.object({ module: z.literal('flag'), action: z.literal('showMediaIndefinitely'), params: flagShowMediaOptionsSchema, }), z.object({ module: z.literal('flag'), action: z.literal('showMediaTemporarily'), params: flagShowMediaOptionsSchema, }), ]); // --- RGB --- export const rgbModuleCommandSchema = z.union([ z.object({ module: z.literal('rgb'), action: z.literal('configure'), params: rgbConfigurationOptionsSchema }), z.object({ module: z.literal('rgb'), action: z.literal('showEffect'), params: rgbShowEffectOptionsSchema }), ]); // --- Star Laser --- export const leftStarBackLaserModuleCommandSchema = z.union([ z.object({ module: z.literal('leftStarBackLaser'), action: z.literal('action'), params: starLaserSendActionsOptionsSchema, }), z.object({ module: z.literal('leftStarBackLaser'), action: z.literal('configure'), params: starLaserConfigureModuleOptionsSchema, }), ]); export const rightStarFrontLaserModuleCommandSchema = z.union([ z.object({ module: z.literal('rightStarFrontLaser'), action: z.literal('action'), params: starLaserSendActionsOptionsSchema, }), z.object({ module: z.literal('rightStarFrontLaser'), action: z.literal('configure'), params: starLaserConfigureModuleOptionsSchema, }), ]); // --- Screen (New) --- export const screenModuleCommandSchema = z.union([ z.object({ module: z.literal('screen'), action: z.literal('showHomeView') }), z.object({ module: z.literal('screen'), action: z.literal('showCountdownView'), params: screenCountdownParamsSchema, }), z.object({ module: z.literal('screen'), action: z.literal('updateGameView'), params: screenUpdateGameViewInputSchema, }), z.object({ module: z.literal('screen'), action: z.literal('showScreenVictoryView'), params: screenFinishViewInputSchema, }), z.object({ module: z.literal('screen'), action: z.literal('showScreenDefeatView'), params: screenFinishViewInputSchema, }), ]); // --- Steering Wheel --- export const steeringWheelModuleCommandSchema = z.union([ z.object({ module: z.literal('steeringWheel'), action: z.literal('turnLedOn') }), z.object({ module: z.literal('steeringWheel'), action: z.literal('turnLedOff') }), ]); // --- All Commands Union --- export const allCommandsConfigSchema = z.union([ ballSensorDiskThrowerModuleCommandSchema, diskSensorBallShooterModuleCommandSchema, flagModuleCommandSchema, rgbModuleCommandSchema, speedModuleCommandSchema, leftStarBackLaserModuleCommandSchema, rightStarFrontLaserModuleCommandSchema, screenModuleCommandSchema, steeringWheelModuleCommandSchema, soundModuleCommandSchema, ]);