home · contact · privacy
Add inventory / item pickup/drop server-side.
[plomrogue2-experiments] / new / plomrogue / things.py
index a80e9e40913e9eac6e06221577cfe5815477a1a5..5ef429754c41373dbf9a9b986de63ef88e684303 100644 (file)
@@ -3,16 +3,38 @@ from plomrogue.errors import GameError
 
 
 class ThingBase:
+    type_ = '?'
 
-    def __init__(self, world, id_, type_='?', position=[0,0]):
+    def __init__(self, world, id_=None, position=[0,0]):
         self.world = world
-        self.id_ = id_
-        self.type_ = type_
         self.position = position
+        if id_ is None:
+            self.id_ = self.world.new_thing_id()
+        else:
+            self.id_ = id_
 
 
 
 class Thing(ThingBase):
+    blocking = False
+    in_inventory = False
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+        self.inventory = []
+
+    def proceed(self):
+        pass
+
+
+
+class ThingItem(Thing):
+    type_ = 'item'
+
+
+
+class ThingAnimate(Thing):
+    blocking = True
 
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
@@ -123,6 +145,16 @@ class Thing(ThingBase):
         stencil = self.get_stencil()
         visible_things = []
         for thing in self.world.things:
-            if stencil[thing.position] == '.':
+            if (not thing.in_inventory) and stencil[thing.position] == '.':
                 visible_things += [thing]
         return visible_things
+
+
+
+class ThingHuman(ThingAnimate):
+    type_ = 'human'
+
+
+
+class ThingMonster(ThingAnimate):
+    type_ = 'monster'