+ @property
+ def type_(self):
+ return self.__class__.get_type()
+
+ @classmethod
+ def get_type(cls):
+ return cls.__name__[len('Thing_'):]
+
+
+
+class Thing_Item(Thing):
+ symbol_hint = 'i'
+ portable = True
+
+
+
+class ThingSpawner(Thing):
+ symbol_hint = 'S'
+
+ def proceed(self):
+ for t in [t for t in self.game.things
+ if t != self and t.position == self.position]:
+ return
+ t = self.game.thing_types[self.child_type](self.game,
+ position=self.position)
+ self.game.things += [t]
+ self.game.changed = True
+
+
+
+class Thing_ItemSpawner(ThingSpawner):
+ child_type = 'Item'
+
+
+
+class Thing_SpawnPointSpawner(ThingSpawner):
+ child_type = 'SpawnPoint'
+
+
+
+class Thing_SpawnPoint(Thing):
+ symbol_hint = 's'
+ portable = True
+ name = 'username'
+
+
+
+class Thing_DoorSpawner(ThingSpawner):
+ child_type = 'Door'
+
+
+
+class Thing_Door(Thing):
+ symbol_hint = 'D'
+ blocking = False
+ portable = True
+
+ def open(self):
+ self.blocking = False
+ self.portable = True
+ del self.thing_char
+
+ def close(self):
+ self.blocking = True
+ self.portable = False
+ self.thing_char = '#'
+
+
+
+class Thing_Consumable(Thing):
+ symbol_hint = 'B'
+ portable = True
+
+
+
+class Thing_ConsumableSpawner(ThingSpawner):
+ child_type = 'Consumable'
+