Add interfaces for Action and related objects. Progress on #3, #4, #5.

Mari 3 years ago
parent e592681ed2
commit 612f149cf9
  1. 76

@ -0,0 +1,76 @@
/** The interface for actions that can be selected during battle. This is also used automatically for the Defend and Flee options. */
export interface ActionData {
/** The name that will be displayed in the action list - a Handlebars template. */
readonly nameTemplate: string
/** The help message that will be displayed when this action is selected - a Handlebars template. */
readonly helpMessageTemplate: string
/** The cost of the action - a script expression. The cost of the action is automatically deducted, and need not be deducted by the effect as well. */
readonly costExpression: string
/** Whether the action can currently be used, and if so, how much of the turn it takes up - a script expression. */
readonly speedExpression: string
/** The effect of the action - a sequence of script statements separated by newlines. */
readonly actionEffect: string
/** The state of an action, determining its display in the action menu. */
export enum ActionSpeed {
* Fast actions only cost half the user's turn.
* If a Fast action is used at the start of the user's turn, they can use a single Fast or Normal action afterward.
* Normal actions only cost half (or maybe two thirds) of the user's turn.
* If these actions are used on the user's turn, it ends, but they can be used after a Fast action.
* Slow actions cost a user's entire turn.
* They can't be used after Fast actions, and the user's turn ends after using them.
* Disabled actions are shown in the action list, but cannot be used.
* Hidden actions are not shown in the action list and cannot be used.
/** The counters that actions' costs and damage/healing can deduct from. */
export enum Counter {
/** The interface for an action's cost. */
export interface ActionCost {
/** The counter that the cost will be deducted from. */
readonly affects: Counter
* The cost, which the counter must be greater than or equal to for the skill to be used, and
* which will be deducted from the counter when it is used.
readonly cost: number
* The interface for an evaluated action. This saves time recalculating actions on every repaint and avoids cases
* where the cost a user sees before choosing the action is not the same as the cost a user sees when using it.
export interface Action {
/** The data this action originated from. */
readonly data: ActionData
/** The name, with any template variables substituted in. */
readonly name: string
/** The help message, with any template variables substituted in. */
readonly helpMessage: string
/** The cost, which has been evaluated into an optimized set of ActionCost with at most one ActionCost per Counter. */
readonly cost: readonly ActionCost[]
/** The speed of the action, determining when it can be used and what other actions can be used with it. */
readonly speed: ActionSpeed