import enums class gameobj(object): def __init__(self, self.pos): self.pos = pos self.roles = [] self.effects = [] def add_role(self, ro): for i, r in enumerate(self.roles): if ro is r: break if ro.order < r.order: self.roles.insert(i, ro) break def remove_role(self, ro): deleted = [] for ir, r in enumerate(reversed(self.roles)): i = len(self.roles) - ir - 1 if isinstance(ro, type) and isinstance(r, ro): del self.roles[i] deleted.append(r) elif ro is r: del self.roles[i] deleted.append(r) return deleted def ai(self): pass def handle_input(self): pass def move(self): pass def animate(self): pass def collide(self): pass def prerender(self): pass def render(self): pass class role(object): order = 1000 phases = () def __init__(self): pass class ai_role(role): order = 2000 phases = (enums.phase.ai,) def update(self, owner, phase): "we have no AI yet..." class visible_role(role): order = 10000 phases = (enums.phase.render,) def update(self, owner, phase): "we have no AI yet..." class corporeal_role(role): order = 5000 phases = (enums.phase.collide,) def update(self, owner, phase): "we have no AI yet..." class animated_role(role): order = 4000 phases = (enums.phase.animate,) def update(self, owner, phase): "we have no AI yet..." class movable_role(role): order = 3500 phases = (enums.phase.move,) def update(self, owner, phase): "we have no AI yet..." class input_role(role): order = 1000 phases = (enums.phase.handle_input,) def update(self, owner, phase): "we have no AI yet..." class light_role(role): order = 9000 phases = (enums.phase.prerender,) def update(self, owner, phase): "we have no AI yet..." class rotation_role(role): order = 3000 phases = (enums.phase.move,) def update(self, owner, phase): "we have no AI yet..." class billboard_role(role): order = 3000 phases = (enums.phase.move,) def update(self, owner, phase): "we have no AI yet..."