home
·
contact
·
privacy
projects
/
plomrogue2
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add basic non-player things system.
[plomrogue2]
/
plomrogue
/
things.py
diff --git
a/plomrogue/things.py
b/plomrogue/things.py
index f066ae660f685a0a8ba05503b1c75e6b4eb25de4..ecddc8767483dd8599b43a373de5392127fc260e 100644
(file)
--- a/
plomrogue/things.py
+++ b/
plomrogue/things.py
@@
-6,9
+6,9
@@
from plomrogue.mapping import YX
class ThingBase:
type_ = '?'
class ThingBase:
type_ = '?'
- def __init__(self, game, id_=
None
, position=(YX(0,0))):
+ def __init__(self, game, id_=
0
, position=(YX(0,0))):
self.game = game
self.game = game
- if id_
is None
:
+ if id_
== 0
:
self.id_ = self.game.new_thing_id()
else:
self.id_ = id_
self.id_ = self.game.new_thing_id()
else:
self.id_ = id_
@@
-24,6
+24,18
@@
class Thing(ThingBase):
def proceed(self):
pass
def proceed(self):
pass
+ @property
+ def type_(self):
+ return self.__class__.get_type()
+
+ @classmethod
+ def get_type(cls):
+ return cls.__name__[len('Thing_'):]
+
+
+
+class Thing_Stone(Thing):
+ symbol_hint = 'o'
class ThingAnimate(Thing):
class ThingAnimate(Thing):
@@
-32,6
+44,7
@@
class ThingAnimate(Thing):
super().__init__(*args, **kwargs)
self.next_tasks = []
self.set_task('WAIT')
super().__init__(*args, **kwargs)
self.next_tasks = []
self.set_task('WAIT')
+ self._fov = None
def set_task(self, task_name, args=()):
task_class = self.game.tasks[task_name]
def set_task(self, task_name, args=()):
task_class = self.game.tasks[task_name]
@@
-51,6
+64,7
@@
class ThingAnimate(Thing):
return None
def proceed(self):
return None
def proceed(self):
+ self._fov = None
if self.task is None:
self.task = self.get_next_task()
return
if self.task is None:
self.task = self.get_next_task()
return
@@
-67,12
+81,28
@@
class ThingAnimate(Thing):
self.game.changed = True
self.task = self.get_next_task()
self.game.changed = True
self.task = self.get_next_task()
+ @property
+ def fov_stencil(self):
+ if self._fov:
+ return self._fov
+ fov_map_class = self.game.map_geometry.fov_map_class
+ self._fov = fov_map_class(self.game.map, self.position)
+ return self._fov
+ def fov_stencil_map(self, map):
+ visible_terrain = ''
+ for i in range(self.fov_stencil.size_i):
+ if self.fov_stencil.terrain[i] == '.':
+ visible_terrain += map.terrain[i]
+ else:
+ visible_terrain += ' '
+ return visible_terrain
-class ThingPlayer(ThingAnimate):
- type_ = 'player'
+
+
+class Thing_Player(ThingAnimate):
+ symbol_hint = '@'
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.nickname = 'undefined'
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.nickname = 'undefined'
-