Bit shifts!
[naja.git] / naja / gamestate.py
index 8d00756f8c85c318f7d30a224683f75c6b274f76..a32438170e3c5663366850cde744027507b57ceb 100644 (file)
@@ -2,8 +2,23 @@
 The current game state.
 """
 
+try:
+    import yaml
+except ImportError:
+    yaml = None
+    import json
+
 from naja.gameboard import GameBoard
-from naja.constants import BITS
+from naja.resources import resources
+
+
+def load_location_deck(name):
+    if yaml:
+        with resources.get_file('location_decks', '%s.yaml' % name) as deck_fp:
+            return yaml.safe_load(deck_fp)
+    else:
+        with resources.get_file('location_decks', '%s.json' % name) as deck_fp:
+            return json.load(deck_fp)
 
 
 class GameState(object):
@@ -11,19 +26,17 @@ class GameState(object):
     Naja game state.
     """
 
-    def __init__(self):
-        # This is a very simple deck to allow testing more drawing logic
-        # on tiles. These will need to be replaced with better stuff.
-        self.gameboard = GameBoard.new_game(
-            locations_definition=[
-                {'actions': []},
-                {'actions': [{'required_bits': [BITS.CYAN],
-                              'action_class': 'DoNothing'}]},
-                {'actions': [{'required_bits': [BITS.YELLOW],
-                              'action_class': 'DoNothing'}]},
-                {'actions': [{'required_bits': [BITS.YELLOW, BITS.MAGENTA],
-                              'action_class': 'DoNothing'}]},
-                ])
+    def __init__(self, gameboard):
+        self.gameboard = gameboard
+
+    @classmethod
+    def new(cls, deck='standard', **kw):
+        deck = load_location_deck(deck)
+        return cls(GameBoard.new_game(deck, **kw))
+
+    @classmethod
+    def load(cls, data):
+        return cls(GameBoard.import_game(data))
 
     @property
     def player(self):