2026-rff_mp/visualization/observer.py

39 lines
993 B
Python
Raw Normal View History

from abc import ABC, abstractmethod
from typing import Any
from enum import Enum, auto
class EventType(Enum):
MAZE_LOADED = auto()
PATH_FOUND = auto()
PATH_NOT_FOUND = auto()
PLAYER_MOVED = auto()
SEARCH_START = auto()
SEARCH_END = auto()
ERROR = auto()
UNDO = auto()
class Event:
def __init__(self, event_type: EventType, data: Any = None):
self.event_type = event_type
self.data = data
class Observer(ABC):
@abstractmethod
def update(self, event: Event):
pass
class Observable:
def __init__(self):
self._observers = []
def attach(self, observer: Observer):
if observer not in self._observers:
self._observers.append(observer)
def detach(self, observer: Observer):
if observer in self._observers:
self._observers.remove(observer)
def notify(self, event: Event):
for observer in self._observers:
observer.update(event)