Skip to content

Commit fa2aa96

Browse files
committed
Support fetching effect instances and classes from the project
1 parent 681cb3f commit fa2aa96

File tree

5 files changed

+33
-4
lines changed

5 files changed

+33
-4
lines changed

demosys/effects/effect.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from typing import Any
1+
from typing import Any, Type
22

33
from pyrr import Matrix33, Matrix44, Vector3, matrix44
44
from rocket.tracks import Track
@@ -126,6 +126,24 @@ def get_data(self, label) -> Any:
126126
"""
127127
return self._project.get_data(label)
128128

129+
def get_effect(self, label) -> 'Effect':
130+
"""
131+
Get an effect instance by label
132+
133+
:param label: Label for the data file
134+
:return: The requested effect instance
135+
"""
136+
return self._project.get_effect(label)
137+
138+
def get_effect_class(self, effect_name, package_name=None) -> Type['Effect']:
139+
"""
140+
Get an effect class.
141+
142+
:param effect_name: Name of the effect class
143+
:param package_name: (optional) The package this effect belongs to
144+
"""
145+
return self._project.get_effect_class(effect_name, package_name=package_name)
146+
129147
# Utility methods for matrices
130148

131149
def create_projection(self, fov=75.0, near=1.0, far=100.0, ratio=None):

demosys/effects/registry.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ def add_package(self, name):
5959
package.load()
6060

6161
self.packages.append(package)
62-
self.package_map[package.path] = package
62+
self.package_map[package.name] = package
6363

6464
# Load effect package dependencies
6565
self.polulate(package.effect_packages)
@@ -193,6 +193,12 @@ def load_resource_module(self):
193193
"Effect dependencies module '{}': 'effect_packages' is of type {} instead of a list".format(
194194
name, type(self.effects)))
195195

196+
def __str__(self):
197+
return "<{} {}>".format(self.__class__.__name__, self.name)
198+
199+
def __repr__(self):
200+
return str(self)
201+
196202

197203
class EffectError(Exception):
198204
pass

demosys/project/base.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,9 @@ def _add_resource_descriptions_to_pools(self, meta_list):
9292
def get_effect(self, label):
9393
return self._get_resource(label, self._effects, "effect")
9494

95+
def get_effect_class(self, class_name, package_name=None):
96+
return effects.find_effect_class(class_name, package_name=package_name)
97+
9598
def get_scene(self, label):
9699
return self._get_resource(label, self._scenes, "scene")
97100

examples/textrenderer/effects.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
import os
33

44
from demosys.effects import effect
5-
from demosys.effects.text.effects import TextRenderer2D
65

76

87
class TextRendererEffect(effect.Effect):
@@ -13,6 +12,8 @@ def __init__(self):
1312
with open(os.path.join(os.path.dirname(__file__), 'sample.txt'), 'r') as fd:
1413
lines = fd.readlines()
1514

15+
TextRenderer2D = self.get_effect_class('TextRenderer2D', package_name='demosys.effects.text')
16+
1617
self.renderer = TextRenderer2D(
1718
(105, len(lines)),
1819
text_lines=lines,

examples/textwriter/effects.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
import os
33

44
from demosys.effects import effect
5-
from demosys.effects.text.effects import TextWriter2D
65

76

87
class TextWriterEffect(effect.Effect):
@@ -13,6 +12,8 @@ def __init__(self):
1312
with open(os.path.join(os.path.dirname(__file__), 'sample.txt'), 'r') as fd:
1413
lines = fd.readlines()
1514

15+
TextWriter2D = self.get_effect_class('TextWriter2D', package_name='demosys.effects.text')
16+
1617
self.writer = TextWriter2D(
1718
(105, len(lines)),
1819
aspect_ratio=self.window.aspect_ratio,

0 commit comments

Comments
 (0)