-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathleveltools.py
67 lines (48 loc) · 1.59 KB
/
leveltools.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
from levels import levels
levels = sorted(levels, key=lambda level: level["n"])
level_idx = -1
def is_last_special_level(offset=0):
return level_idx + offset == len(levels)
def is_level_out_of_range(offset=0):
return level_idx + offset < 0 or level_idx + offset > len(levels)
def set_level(offset):
global level_idx
level_idx += offset
return None if level_idx < 0 or level_idx >= len(levels) else levels[level_idx]
def reset_level():
global level_idx
level_idx = -1
def get_prev_level_offset(offset=0):
if level_idx + offset > 0:
offset -= 1
return offset
def get_next_level_offset(offset=0):
if level_idx + offset < len(levels):
offset += 1
return offset
def level_to_group_n(offset=0):
if is_last_special_level(offset):
return 999999999
return int(levels[level_idx + offset]["n"])
def get_curr_level_group_offset(offset=0):
# 1.1 -> 1.1; 1.9 -> 1.1; 2.2 -> 2.1; 3.1 -> 3.1
curr_group_n = level_to_group_n(offset)
while True:
offset -= 1
if level_idx + offset < 0:
return offset + 1
if level_to_group_n(offset) < curr_group_n:
return offset + 1
def get_prev_level_group_offset(offset=0):
# 1.1 -> 1.1; 1.9 -> 1.1; 2.2 -> 1.1; 3.1 -> 2.1
offset = get_curr_level_group_offset(offset)
offset = get_prev_level_offset(offset)
offset = get_curr_level_group_offset(offset)
return offset
def get_next_level_group_offset(offset=0):
# 1.1 -> 2.1; 1.9 -> 2.1; 2.2 -> 3.1; 3.1 -> 4.1
curr_group_n = level_to_group_n(offset)
while True:
offset = get_next_level_offset(offset)
if level_idx + offset >= len(levels) or level_to_group_n(offset) > curr_group_n:
return offset