projects
/
koperkapel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Refactor cat.
[koperkapel.git]
/
koperkapel
/
world.py
diff --git
a/koperkapel/world.py
b/koperkapel/world.py
index 7115194c87e57d6cc299eda89850714172615126..5a22b04fdbefd21de586e0f8e8fc03cbd01091ef 100644
(file)
--- a/
koperkapel/world.py
+++ b/
koperkapel/world.py
@@
-1,33
+1,7
@@
""" World and player state. """
from .scenes.base import WorldEvent
""" World and player state. """
from .scenes.base import WorldEvent
-
-
-NAMES =[
- "roupert",
- "roachel",
- "roeginald",
- "roichard",
- "rory",
- "roalph",
- "roabia",
- "roafi",
- "roaman",
- "roemus",
- "roadley",
- "roanaell",
- "roashwan",
- "roashid",
- "roaphael",
- "roenfield",
- "roani",
- "roaya",
- "roaza",
- "robekka",
- "rogan",
- "roiana",
- "roberta",
- ]
+from .roaches import build_roach
class World:
class World:
@@
-47,10
+21,7
@@
class World:
def _build_initial_state(self):
state = {}
state["roaches"] = [
def _build_initial_state(self):
state = {}
state["roaches"] = [
- #self._build_roach("roachel", smart=True),
- #self._build_roach("roeginald", strong=True),
- #self._build_roach("roichard", fast=True),
- self._build_roach("roupert"),
+ build_roach(self, "roupert"),
]
state["serums"] = [
"smart", "strong", "fast",
]
state["serums"] = [
"smart", "strong", "fast",
@@
-72,26
+43,27
@@
class World:
}
return state
}
return state
- def _build_roach(self, name, health=5, **kw):
- roach = {
- "name": name,
- "health": health,
- }
- roach.update(kw)
- return roach
+ def _get_obj(self, name):
+ parts = name.split(".")
+ obj = self._state
+ for p in parts[:-1]:
+ if isinstance(obj, dict):
+ obj = obj[p]
+ elif isinstance(obj, list):
+ obj = obj[int(p)]
+ else:
+ raise KeyError("%r not found in world" % (name,))
+ return obj, parts[-1]
def _apply_set(self, action, updates):
for name, value in updates.items():
def _apply_set(self, action, updates):
for name, value in updates.items():
- parts = name.split(".")
- obj = self._state
- for p in parts[:-1]:
- if isinstance(obj, dict):
- obj = obj[p]
- elif isinstance(obj, list):
- obj = obj[int(p)]
- else:
- raise KeyError("%r not found in world" % (name,))
- obj[parts[-1]] = value
+ obj, key = self._get_obj(name)
+ obj[key] = value
+
+ def _apply_append(self, action, updates):
+ for name, value in updates.items():
+ obj, key = self._get_obj(name)
+ obj.append(value)
def _apply_reset(self, action):
self._state = self._build_initial_state()
def _apply_reset(self, action):
self._state = self._build_initial_state()
@@
-102,14
+74,6
@@
class World:
def proxy(self):
return WorldDictProxy(self._state)
def proxy(self):
return WorldDictProxy(self._state)
- def add_new_roach(self):
- roach_names = [x['name'] for x in self.roaches]
- for cand in NAMES:
- if cand not in roach_names:
- roach = self._build_roach(cand)
- self._state['roaches'].append(roach)
- break
-
def apply_event(self, action, *args, **kw):
handler = getattr(self, "_apply_%s" % (action,))
return handler(action, *args, **kw)
def apply_event(self, action, *args, **kw):
handler = getattr(self, "_apply_%s" % (action,))
return handler(action, *args, **kw)
@@
-142,8
+106,8
@@
class WorldBaseProxy:
"_events": _events,
})
"_events": _events,
})
- def _record_change(self, fullname, value):
- self._events.append(WorldEvent(
"set"
, {
+ def _record_change(self, fullname, value
, action="set"
):
+ self._events.append(WorldEvent(
action
, {
fullname: value
}))
fullname: value
}))
@@
-155,10
+119,6
@@
class WorldBaseProxy:
class WorldDictProxy(WorldBaseProxy):
""" World dictionary proxy that records changes and produces events. """
class WorldDictProxy(WorldBaseProxy):
""" World dictionary proxy that records changes and produces events. """
- def items(self):
- return (
- (k, _maybe_subproxy(self, k, v)) for k, v in self._state.items())
-
def __setattr__(self, name, value):
self._top._record_change("%s%s" % (self._prefix, name), value)
def __setattr__(self, name, value):
self._top._record_change("%s%s" % (self._prefix, name), value)
@@
-173,6
+133,10
@@
class WorldDictProxy(WorldBaseProxy):
def __getitem__(self, name):
return self.__getattr__(name)
def __getitem__(self, name):
return self.__getattr__(name)
+ def items(self):
+ return (
+ (k, _maybe_subproxy(self, k, v)) for k, v in self._state.items())
+
class WorldListProxy(WorldBaseProxy):
""" World list proxy that records changes and produces events. """
class WorldListProxy(WorldBaseProxy):
""" World list proxy that records changes and produces events. """
@@
-188,3
+152,6
@@
class WorldListProxy(WorldBaseProxy):
def __bool__(self):
return bool(self._state)
def __bool__(self):
return bool(self._state)
+
+ def append(self, value):
+ self._top._record_change(self._prefix, value, action="append")