Rename internal:directions to .mudpy.movement.*
authorJeremy Stanley <fungi@yuggoth.org>
Wed, 24 Aug 2016 01:17:08 +0000 (01:17 +0000)
committerJeremy Stanley <fungi@yuggoth.org>
Wed, 24 Aug 2016 01:17:08 +0000 (01:17 +0000)
Convert the old style internal:directions element to a series of new
style .mudpy.movement.* elements and adjust the move_direction()
function accordingly. Also extend the Universe class to provide a
set-based index of direction names found in the data.

etc/mudpy.yaml
lib/mudpy/data.py
lib/mudpy/misc.py

index 74cfe6e..512f27f 100644 (file)
@@ -23,6 +23,25 @@ __control__:
 .mudpy.log.stdout: true
 #.mudpy.log.syslog: mudpy
 
+.mudpy.movement.down.enter_term: above
+.mudpy.movement.down.exit_term: downward
+.mudpy.movement.down.vector: [0,0,-1]
+.mudpy.movement.east.enter_term: the west
+.mudpy.movement.east.exit_term: to the east
+.mudpy.movement.east.vector: [1,0,0]
+.mudpy.movement.north.enter_term: the south
+.mudpy.movement.north.exit_term: to the north
+.mudpy.movement.north.vector: [0,1,0]
+.mudpy.movement.south.enter_term: the north
+.mudpy.movement.south.exit_term: to the south
+.mudpy.movement.south.vector: [0,-1,0]
+.mudpy.movement.up.enter_term: below
+.mudpy.movement.up.exit_term: upward
+.mudpy.movement.up.vector: [0,0,1]
+.mudpy.movement.west.enter_term: the east
+.mudpy.movement.west.exit_term: to the west
+.mudpy.movement.west.vector: [-1,0,0]
+
 internal:network:
     host: ::1
     #host: 127.0.0.1
@@ -50,11 +69,3 @@ internal:time:
     linkdead: { "default": 6000, "entering_account_name": 600, "active": 6048000 }
     idle: { "default": 5000, "entering_account_name": 500, "active": 5040000 }
     increment: 0.1
-
-internal:directions:
-    down: { "vector": [0,0,-1], "exit": "downward", "enter": "above" }
-    east: { "vector": [1,0,0], "exit": "to the east", "enter": "the west" }
-    north: { "vector": [0,1,0], "exit": "to the north", "enter": "the south" }
-    south: { "vector": [0,-1,0], "exit": "to the south", "enter": "the north" }
-    up: { "vector": [0,0,1], "exit": "upward", "enter": "below" }
-    west: { "vector": [-1,0,0], "exit": "to the west", "enter": "the east" }
index 02a9139..00ab923 100644 (file)
@@ -99,6 +99,9 @@ class DataFile:
                     element = mudpy.misc.Element(prefix, self.universe,
                         self.filename)
                 element.set(node[facet_pos:], self.data[node])
+                if prefix.startswith("mudpy.movement."):
+                    self.universe.directions.add(
+                        prefix[prefix.rfind(".") + 1:])
         for include_file in includes:
             if not os.path.isabs(include_file):
                 include_file = find_file(
index c5e1d1b..616065b 100644 (file)
@@ -252,48 +252,17 @@ class Element:
 
     def move_direction(self, direction):
         """Relocate the element in a specified direction."""
-        self.echo_to_location(
-            self.get(
-                "name"
-            ) + " exits " + self.universe.categories[
-                "internal"
-            ][
-                "directions"
-            ].get(
-                direction
-            )[
-                "exit"
-            ] + "."
-        )
-        self.send(
-            "You exit " + self.universe.categories[
-                "internal"
-            ][
-                "directions"
-            ].get(
-                direction
-            )[
-                "exit"
-            ] + ".",
-            add_prompt=False
-        )
+        motion = self.universe.contents["mudpy.movement.%s" % direction]
+        enter_term = motion.get("enter_term")
+        exit_term = motion.get("exit_term")
+        self.echo_to_location("%s exits %s." % (self.get("name"), exit_term))
+        self.send("You exit %s." % exit_term, add_prompt=False)
         self.go_to(
             self.universe.contents[
                 self.get("location")].link_neighbor(direction)
         )
-        self.echo_to_location(
-            self.get(
-                "name"
-            ) + " arrives from " + self.universe.categories[
-                "internal"
-            ][
-                "directions"
-            ].get(
-                direction
-            )[
-                "enter"
-            ] + "."
-        )
+        self.echo_to_location("%s arrives from %s." % (
+            self.get("name"), enter_term))
 
     def look_at(self, key):
         """Show an element to another element."""
@@ -331,14 +300,9 @@ class Element:
         if re.match("""^area:-?\d+,-?\d+,-?\d+$""", self.key):
             coordinates = [(int(x))
                            for x in self.key.split(":")[1].split(",")]
-            directions = self.universe.categories["internal"]["directions"]
-            offsets = dict(
-                [
-                    (
-                        x, directions.get(x)["vector"]
-                    ) for x in directions.facets()
-                ]
-            )
+            offsets = dict((x,
+                self.universe.contents["mudpy.movement.%s" % x].get("vector")
+                ) for x in self.universe.directions)
             for portal in self.get("gridlinks"):
                 adjacent = map(lambda c, o: c + o,
                                coordinates, offsets[portal])
@@ -379,6 +343,7 @@ class Universe:
         self.categories = {}
         self.contents = {}
         self.default_origins = {}
+        self.directions = set()
         self.loglines = []
         self.private_files = []
         self.reload_flag = False