std-combat
Level: Atom | Entity: Combatant | Persistence: runtime
4 states, 6 events, 7 transitions
Live Preview
orbital CombatantOrbital {
entity Combatant [runtime] {
id : string
name : string
description : string
status : string
createdAt : string
hp : number
attack : number
defense : number
}
trait CombatantCombat -> Combatant [interaction] {
initial: ready
state ready {
INIT -> ready
(fetch Combatant)
(render-ui main { type: "stack", direction: "vertical", gap: "lg", align: "center", children: [{ type: "game-hud", position: "top", stats: [{ label: "HP", value: "@entity.hp" }, { label: "Attack", value: "@entity.attack" }, { label: "Defense", value: "@entity.defense" }] }, { type: "button", label: "Attack", event: "ATTACK", variant: "primary", icon: "swords" }] })
ATTACK -> attacking
(render-ui main { type: "stack", direction: "vertical", gap: "lg", align: "center", children: [{ type: "game-hud", position: "top", stats: [{ label: "HP", value: "@entity.hp" }, { label: "Attack", value: "@entity.attack" }, { label: "Defense", value: "@entity.defense" }] }, { type: "button", label: "Cooldown End", event: "HIT", variant: "secondary", icon: "clock" }] })
}
state attacking {
HIT -> cooldown
(render-ui main { type: "stack", direction: "vertical", gap: "lg", align: "center", children: [{ type: "game-hud", position: "top", stats: [{ label: "HP", value: "@entity.hp" }, { label: "Attack", value: "@entity.attack" }, { label: "Defense", value: "@entity.defense" }] }, { type: "badge", label: "Cooling down..." }] })
DEFEAT -> defeated
(render-ui main { type: "stack", direction: "vertical", gap: "lg", align: "center", children: [{ type: "game-over-screen", title: "Defeated", variant: "defeat" }, { type: "button", label: "Reset", event: "RESET", variant: "ghost", icon: "rotate-ccw" }] })
}
state cooldown {
COOLDOWN_END -> ready
(render-ui main { type: "stack", direction: "vertical", gap: "lg", align: "center", children: [{ type: "game-hud", position: "top", stats: [{ label: "HP", value: "@entity.hp" }, { label: "Attack", value: "@entity.attack" }, { label: "Defense", value: "@entity.defense" }] }, { type: "button", label: "Attack", event: "ATTACK", variant: "primary", icon: "swords" }] })
DEFEAT -> defeated
(render-ui main { type: "stack", direction: "vertical", gap: "lg", align: "center", children: [{ type: "game-over-screen", title: "Defeated", variant: "defeat" }, { type: "button", label: "Reset", event: "RESET", variant: "ghost", icon: "rotate-ccw" }] })
}
state defeated {
RESET -> ready
(render-ui main { type: "stack", direction: "vertical", gap: "lg", align: "center", children: [{ type: "game-hud", position: "top", stats: [{ label: "HP", value: "@entity.hp" }, { label: "Attack", value: "@entity.attack" }, { label: "Defense", value: "@entity.defense" }] }, { type: "button", label: "Attack", event: "ATTACK", variant: "primary", icon: "swords" }] })
}
}
page "/combatants" -> CombatantCombat
}
Loading preview...
Orbital Visualization
Loading visualization...
Entity Fields
| Field | Type | Default |
|---|---|---|
| id | string | - |
| name | string | - |
| description | string | - |
| status | string | "active" |
| createdAt | string | - |
| hp | number | 100 |
| attack | number | 10 |
| defense | number | 5 |
States
| State | Type |
|---|---|
| ready | Initial |
| attacking | - |
| cooldown | - |
| defeated | - |
Events
| Event | Payload |
|---|---|
| INIT | - |
| ATTACK | targetId: string |
| HIT | damage: number |
| COOLDOWN_END | - |
| DEFEAT | - |
| RESET | - |
Transitions
| From | Event | To | Effects |
|---|---|---|---|
| ready | INIT | ready | 2 effects |
| ready | ATTACK | attacking | 1 effect |
| attacking | HIT | cooldown | 1 effect |
| cooldown | COOLDOWN_END | ready | 1 effect |
| attacking | DEFEAT | defeated | 1 effect |
| cooldown | DEFEAT | defeated | 1 effect |
| defeated | RESET | ready | 1 effect |