import type { ClientMessageConditions, ClientMessageContext } from "../conditions/context/clientMessage.js"; import type { State } from "../state/state.js"; import type { Command } from "../command.js"; /** * Template used by game dev. */ export interface BaseActionTemplate { name: string; /** * This action will be ignored when one of the assertions fail. * * @param test conditions runner. Default subject is set to the game state. * @param initialSubjects Direct references to subjects brought with player's event */ conditions: (test: ClientMessageConditions, messageContext: ClientMessageContext) => void; /** * Generate a `Command` to run for this action. * Use `Sequence()` if you need to run multiple commands. */ command: (messageContext: ClientMessageContext) => Command; } /** * For internal usage only, used also by server-testing lib * @ignore */ export interface BaseActionDefinition { name: string; /** * Should run checks against interaction in interactionAction etc */ checkPrerequisites(messageContext: ClientMessageContext): boolean; checkConditions(test: ClientMessageConditions, messageContext: ClientMessageContext): void; getCommand: (messageContext: ClientMessageContext) => Command; } /** * For internal usage only, used also by server-testing lib * @ignore */ export declare function extendsBaseActionDefinition(o: unknown): o is BaseActionDefinition;