Add __getitem__ and __setitem__ for WorldDictProxy.
[koperkapel.git] / koperkapel / world.py
index 28f98b3da91ccad0365c2eb45ef0c12b3373ac23..d68294949f46a7d520275a19532737cdc02db7c5 100644 (file)
@@ -20,27 +20,35 @@ class World:
     def _build_initial_state(self):
         state = {}
         state["roaches"] = [
-            self._build_roach("roachel", intelligence=3),
-            self._build_roach("roeginald", strength=3),
-            self._build_roach("roichard", quickness=3),
+            self._build_roach("roachel", smart=True),
+            self._build_roach("roeginald", strong=True),
+            self._build_roach("roichard", fast=True),
+            self._build_roach("roupert"),
         ]
+        state["serums"] = [
+            "smart", "strong", "fast",
+        ]
+        state["vehicles"] = {
+            "current": "walking",
+            "walking": {
+                "seating": [
+                    "roachel", None, "roeginald",
+                    None, None, None,
+                ]
+            }
+        }
         state["level"] = {
             "name": "level1",
         }
         return state
 
-    def _build_roach(self, name, **kw):
-        attributes = {
-            "intelligence": 1,
-            "strength": 1,
-            "quickness": 1,
-            "health": 5,
-        }
-        attributes.update(kw)
-        return {
+    def _build_roach(self, name, health=5, **kw):
+        roach = {
             "name": name,
-            "attributes": attributes,
+            "health": health,
         }
+        roach.update(kw)
+        return roach
 
     def _apply_set(self, updates):
         for name, value in updates.items():
@@ -112,7 +120,15 @@ class WorldDictProxy(WorldBaseProxy):
         self._top._record_change("%s%s" % (self._prefix, name), value)
 
     def __getattr__(self, name):
-        return _maybe_subproxy(self, name, self._state[name])
+        # return None for attributes that don't exist
+        value = self._state.get(name)
+        return _maybe_subproxy(self, name, value)
+
+    def __setitem__(self, name, value):
+        return self.__setattr__(name, value)
+
+    def __getitem__(self, name):
+        return self.__getattr__(name)
 
 
 class WorldListProxy(WorldBaseProxy):
@@ -123,3 +139,9 @@ class WorldListProxy(WorldBaseProxy):
 
     def __getitem__(self, index):
         return _maybe_subproxy(self, index, self._state[index])
+
+    def __len__(self):
+        return len(self._state)
+
+    def __bool__(self):
+        return bool(self._state)