60 lines
1.6 KiB
Python
60 lines
1.6 KiB
Python
from engine.effects.types import EffectConfig, EffectPlugin
|
|
|
|
|
|
class EffectRegistry:
|
|
def __init__(self):
|
|
self._plugins: dict[str, EffectPlugin] = {}
|
|
self._discovered: bool = False
|
|
|
|
def register(self, plugin: EffectPlugin) -> None:
|
|
self._plugins[plugin.name] = plugin
|
|
|
|
def get(self, name: str) -> EffectPlugin | None:
|
|
return self._plugins.get(name)
|
|
|
|
def list_all(self) -> dict[str, EffectPlugin]:
|
|
return self._plugins.copy()
|
|
|
|
def list_enabled(self) -> list[EffectPlugin]:
|
|
return [p for p in self._plugins.values() if p.config.enabled]
|
|
|
|
def enable(self, name: str) -> bool:
|
|
plugin = self._plugins.get(name)
|
|
if plugin:
|
|
plugin.config.enabled = True
|
|
return True
|
|
return False
|
|
|
|
def disable(self, name: str) -> bool:
|
|
plugin = self._plugins.get(name)
|
|
if plugin:
|
|
plugin.config.enabled = False
|
|
return True
|
|
return False
|
|
|
|
def configure(self, name: str, config: EffectConfig) -> bool:
|
|
plugin = self._plugins.get(name)
|
|
if plugin:
|
|
plugin.configure(config)
|
|
return True
|
|
return False
|
|
|
|
def is_enabled(self, name: str) -> bool:
|
|
plugin = self._plugins.get(name)
|
|
return plugin.config.enabled if plugin else False
|
|
|
|
|
|
_registry: EffectRegistry | None = None
|
|
|
|
|
|
def get_registry() -> EffectRegistry:
|
|
global _registry
|
|
if _registry is None:
|
|
_registry = EffectRegistry()
|
|
return _registry
|
|
|
|
|
|
def set_registry(registry: EffectRegistry) -> None:
|
|
global _registry
|
|
_registry = registry
|