forked from ISNABE/scape-me
/
LevelManager.py
77 lines (63 loc) · 2.33 KB
/
LevelManager.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
from kivy.uix.widget import Widget
from Level import Level
from LevelService import LevelService
from EventDispatchers import LevelEventDispatcher
class LevelManager(Widget):
def __init__(self, **kwargs):
"""
Instantiate the LevelManager with event listener.
:param kwargs:
"""
super(LevelManager, self).__init__(**kwargs)
self.level_service = LevelService()
self.level_event_dispatcher = LevelEventDispatcher()
self.level_event_dispatcher.bind(on_level_completed=self.do_level_up)
self.levels_completed_pool = list()
def add_widget(self, widget, index=0):
"""
Add widget only after removing any widget previously present.
:param widget:
:param index:
:return:
"""
self.clear_widgets()
super(LevelManager, self).add_widget(widget, index)
def do_level_up(self, instance, completion_details, *args):
"""
Save advancement and level up the player loading next level.
:param instance:
:param completion_details:
:param args:
:return:
"""
self.levels_completed_pool.append(completion_details)
if completion_details['level_id_in_set'] >= 5:
self.do_set_up()
self.load_level_in_set()
return
self.load_level_in_set(completion_details['set_id'], completion_details['level_id_in_set'] + 1)
def do_set_up(self):
if len(self.levels_completed_pool) > 5:
self.levels_completed_pool = list()
return
if len(self.levels_completed_pool) < 5:
return
for level_completed in self.levels_completed_pool:
self.level_service.save_completion(level_completed)
def load_set(self, set_id=None):
"""
Load level in set
:param set_id:
:return:
"""
self.load_level_in_set(set_id)
def load_level_in_set(self, set_id=None, level_id_in_set=1):
"""
Load given level in given set with checking.
:param set_id:
:param level_id_in_set:
:return:
"""
if not self.level_service.does_set_exist(set_id) or not set_id:
set_id = self.level_service.get_resuming_set()
self.add_widget(Level(self.level_event_dispatcher, set_id, level_id_in_set))