class gameobj(object): role_factory = {} @staticmethod def create_role_factory(role, factory): gameobj.role_factory[role] = factory def __init__(self, self.pos): self.pos = pos self.roles = [] self.effects = [] def add_role(self, role): assert not type(role) in [type(x) for x in self.roles] for i, r in enumerate(self.roles): if role is r: break if role.order < r.order: self.roles.insert(i, role) break def remove_role(self, role): for 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 gameobj.create_role_factory('ai', ai_role) class role(object): order = 1000 def __init__(self): pass class ai_role(role): order = 200 pass class visible_role(role): order = 10000 pass class corporeal_role(role): order = 500 pass class animated_role(role): order = 400 pass class movable_role(role): order = 300 pass class player_role(role): order = 100 pass class light_role(role): order = 9000 pass class _role(role): pass