keyword
detach
detach Prop on entity
detach removes a property from a live model instance, firing the property's @OnDetach(Prop) hook before the has-flag clears — so the hook can still read the outgoing field values as it tears down. It is the structural opposite of attach: where disable pauses a property but keeps its data for a later enable, detach genuinely removes the property, and a later attach re-seeds fresh fields from defaults. Detaching a property the instance does not have is a no-op. Reach for it when something is gone for good — a shield consumed, a status effect that has run its course, an ability removed.
Example
program ShieldBreak {
property Position { column: int = 0, row: int = 0 }
property Shield { amount: int = 0 }
model Player { Position, Shield }
handler Boot phase Start {
spawn Hero { Position { column: 6, row: 6 }; Shield { amount: 1 } }
}
handler ConsumeShield phase Update {
for (shield) in query [Shield, {Player}] {
if shield.amount <= 0 { detach Shield on self() }
}
}
}