Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from dataclasses import dataclass, field
- from enum import Enum, auto
- class Intent(Enum):
- THREAT = auto()
- FRIENDLY = auto()
- NEUTRAL = auto()
- @dataclass(frozen = True)
- class Signal:
- source: str
- intent: Intent
- actor: str
- intensity: float # 0.0 to 1.0
- @dataclass
- class NPCState:
- threat_level: float = 0.0
- def apply(self, signal: Signal) -> "NPCState":
- """Returns a new state with the signal applied (immutable style)."""
- match signal.intent:
- case Intent.THREAT:
- return NPCState(threat_level=min(1.0, self.threat_level + signal.intensity * 0.1))
- case Intent.FRIENDLY:
- return NPCState(threat_level=max(0.0, self.threat_level - signal.intensity * 0.05))
- case _:
- return self
- # Usage - no global state, explicit ownership
- npc = NPCState()
- for _ in range(5):
- signal = Signal(source="npc_engine", intent=Intent.THREAT, actor="player", intensity=0.5)
- npc = npc.apply(signal)
- print(npc.threat_level)
Advertisement
Add Comment
Please, Sign In to add comment