Add actors/ghost_mode_controller.py
This commit is contained in:
40
actors/ghost_mode_controller.py
Normal file
40
actors/ghost_mode_controller.py
Normal file
@@ -0,0 +1,40 @@
|
||||
import time
|
||||
from enums import GhostMode
|
||||
|
||||
class GhostModeController:
|
||||
def __init__(self):
|
||||
self.timers = [
|
||||
(GhostMode.SCATTER, 7),
|
||||
(GhostMode.CHASE, 20),
|
||||
(GhostMode.SCATTER, 7),
|
||||
(GhostMode.CHASE, 20),
|
||||
(GhostMode.SCATTER, 5),
|
||||
(GhostMode.CHASE, 9999) # stay in chase mode eventually
|
||||
]
|
||||
self.current_index = 0
|
||||
self.last_switch_time = time.time()
|
||||
self.mode = self.timers[self.current_index][0]
|
||||
self.frightened_until = 0
|
||||
|
||||
def update(self):
|
||||
now = time.time()
|
||||
|
||||
if self.mode == GhostMode.FRIGHTENED:
|
||||
if now > self.frightened_until:
|
||||
self.resume_cycle()
|
||||
return
|
||||
|
||||
mode, duration = self.timers[self.current_index]
|
||||
if now - self.last_switch_time >= duration:
|
||||
self.current_index = min(self.current_index + 1, len(self.timers) - 1)
|
||||
self.mode = self.timers[self.current_index][0]
|
||||
self.last_switch_time = now
|
||||
|
||||
def trigger_frightened(self, duration=6):
|
||||
self.mode = GhostMode.FRIGHTENED
|
||||
self.frightened_until = time.time() + duration
|
||||
|
||||
def resume_cycle(self):
|
||||
# Return to normal cycle after frightened ends
|
||||
self.mode = self.timers[self.current_index][0]
|
||||
self.last_switch_time = time.time()
|
Reference in New Issue
Block a user