Skip to content

Commit 239ca1f

Browse files
committed
EffectController: pre/post load + resp for creating instances
1 parent 4189f2c commit 239ca1f

File tree

4 files changed

+23
-24
lines changed

4 files changed

+23
-24
lines changed

demosys/effects/effect.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,6 @@ class Effect:
1919
window_aspect = 0
2020
sys_camera = None
2121

22-
def __init__(self, name=name):
23-
self.name = name
24-
2522
# Methods to override
2623
def draw(self, time, target):
2724
raise NotImplemented

demosys/effects/managers.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@ class ManagerError(Exception):
77

88
class BaseEffectManger:
99
"""Base effect manager"""
10-
def __init__(self, *args, **kwargs):
11-
pass
12-
13-
def init_effects(self):
10+
def pre_load(self):
1411
"""Init after context creations"""
15-
pass
12+
return True
13+
14+
def post_load(self):
15+
return True
1616

1717
def draw(self, time, target):
1818
"""Draw efffect(s)"""
@@ -24,11 +24,10 @@ class SingleEffectManager(BaseEffectManger):
2424
def __init__(self, effect_module=None):
2525
self.active_effect = None
2626
self.effect_module = effect_module
27-
super().__init__()
2827

29-
def init_effects(self):
28+
def pre_load(self):
3029
"""Init after context creations"""
31-
effect_list = [cls for cls in effects.get_effects()]
30+
effect_list = [cfg.cls() for name, cfg in effects.effects.items()]
3231
for effect in effect_list:
3332
effect.init()
3433
if effect.name == self.effect_module:
@@ -41,6 +40,9 @@ def init_effects(self):
4140
return False
4241
return True
4342

43+
def post_load(self):
44+
return True
45+
4446
def draw(self, time, target):
4547
self.active_effect.draw(time, target)
4648

demosys/effects/registry.py

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,6 @@ class Effects:
2323
def __init__(self):
2424
self.effects = {}
2525

26-
def get_effects(self):
27-
"""Get all effect classes"""
28-
for name, config in self.effects.items():
29-
yield config.cls(name=name.replace(f".{EFFECT_MODULE}", ''))
30-
3126
def get_dirs(self):
3227
"""Get all effect directories"""
3328
for k, v in self.effects.items():
@@ -40,14 +35,15 @@ def polulate(self, effect_list):
4035
for effect in effect_list:
4136
module = importlib.import_module(f'{effect}.{EFFECT_MODULE}')
4237
# Find the Effect class in the module
43-
for name, obj in inspect.getmembers(module):
44-
if inspect.isclass(obj):
45-
if obj == Effect:
38+
for name, cls in inspect.getmembers(module):
39+
if inspect.isclass(cls):
40+
if cls == Effect:
4641
continue
4742
# Use MRO to figure out if this is really an effect
48-
mro = inspect.getmro(obj)
49-
if obj in mro and Effect in mro:
50-
self.effects[module.__name__] = EffectConfig(module=module, cls=obj)
43+
mro = inspect.getmro(cls)
44+
if cls in mro and Effect in mro:
45+
cls.name = effect
46+
self.effects[module.__name__] = EffectConfig(module=module, cls=cls)
5147

5248

5349
effects = Effects()

demosys/view/controller.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,15 +37,19 @@ def run(manager=None):
3737
CAMERA = camera.Camera(aspect=Effect.window_aspect, fov=60.0, near=1, far=1000)
3838
Effect.sys_camera = CAMERA
3939

40-
# Tell EffectManager to initialize effects
41-
if not manager.init_effects():
40+
# Initialize Effects
41+
if not manager.pre_load():
4242
return
4343

4444
# Load resources
4545
num_resources = resources.count()
4646
print(f"Loading {num_resources } resources")
4747
resources.load()
4848

49+
# Post-Load actions for effects
50+
if not manager.post_load():
51+
return
52+
4953
glfw.set_key_callback(WINDOW.window, key_event_callback)
5054
glfw.set_cursor_pos_callback(WINDOW.window, mouse_event_callback)
5155
glfw.set_window_size_callback(WINDOW.window, window_resize_callback)

0 commit comments

Comments
 (0)