125 lines
No EOL
2.3 KiB
Python
Executable file
125 lines
No EOL
2.3 KiB
Python
Executable file
import enums
|
|
|
|
class datastorage(object):
|
|
def __init__(self, readonly=False):
|
|
self.__ro = readonly
|
|
|
|
def __setattr__(self, name, value):
|
|
if name in ('__ro',):
|
|
object.__setattr__(self, name, value)
|
|
if self.__ro:
|
|
raise ValueError("Unable to set read-only property")
|
|
else:
|
|
object.__setattr__(self, name, value)
|
|
|
|
|
|
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..." |