127
|
1 import json
|
|
2
|
|
3 from skaapsteker import data
|
|
4 from skaapsteker.sprites.base import find_sprite
|
|
5
|
|
6
|
|
7 class struct(dict):
|
|
8 def __getattr__(self, key):
|
|
9 try:
|
|
10 return self[key]
|
|
11 except KeyError:
|
|
12 raise AttributeError
|
|
13
|
|
14
|
|
15 def __setattr__(self, key, value):
|
|
16 self[key] = value
|
|
17
|
|
18
|
|
19 class GameState(object):
|
|
20 def __init__(self, game_file=None):
|
|
21 if game_file is None:
|
|
22 game_file = 'game.json'
|
|
23 self.data = json.loads(data.load(game_file).read())
|
|
24 self.build_mission_data()
|
|
25 self.build_item_data()
|
|
26 self.build_level_data()
|
|
27 print self.missions
|
|
28 print self.items
|
|
29 print self.levels
|
|
30
|
|
31
|
|
32 def build_mission_data(self):
|
|
33 self.missions = struct()
|
|
34 for name, mission in self.data['missions'].items():
|
|
35 self.missions[name] = struct(mission)
|
|
36
|
|
37
|
|
38 def build_item_data(self):
|
|
39 self.items = struct()
|
|
40 for item in self.data['items']:
|
|
41 istruct = struct(item)
|
|
42 istruct.missions = struct()
|
|
43 self.items[item['type']] = istruct
|
|
44 for mission_name, mission in self.missions.items():
|
|
45 for name, item in mission['items'].items():
|
|
46 self.items[name].missions[mission_name] = item
|
|
47
|
|
48
|
|
49 def build_level_data(self):
|
|
50 self.levels = struct()
|
|
51 for item in self.items.values():
|
|
52 item_level = item.pop('level')
|
|
53 self.levels.setdefault(item_level, []).append(find_sprite(item, 'items'))
|
|
54
|
|
55
|