projects
/
erdslangetjie.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Less buggy Kivy 1.7 hackery
[erdslangetjie.git]
/
erdslangetjie
/
level.py
diff --git
a/erdslangetjie/level.py
b/erdslangetjie/level.py
index fc23cc626238bb965d69eea370098cffad96293f..9ebb6f4912525a3f0f34c7589badbb80cf3525af 100644
(file)
--- a/
erdslangetjie/level.py
+++ b/
erdslangetjie/level.py
@@
-3,6
+3,9
@@
import os
from data import load_image, load, filepath
import os
from data import load_image, load, filepath
+
+from kivy.logger import Logger
+
WALL = '.'
FLOOR = ' '
ENTRY = 'E'
WALL = '.'
FLOOR = ' '
ENTRY = 'E'
@@
-13,7
+16,7
@@
BUTTON = 'B'
class Level(object):
class Level(object):
- def __init__(self, levelfile):
+ def __init__(self, levelfile
, name
):
self._data = []
self.exit_pos = []
self.enter_pos = None
self._data = []
self.exit_pos = []
self.enter_pos = None
@@
-21,6
+24,7
@@
class Level(object):
self._changed = []
self._gates = {}
self._buttons = {}
self._changed = []
self._gates = {}
self._buttons = {}
+ self._name = name
# Because of how kivy's coordinate system works,
# we reverse the lines so things match up between
# the file and the display (top of file == top of display)
# Because of how kivy's coordinate system works,
# we reverse the lines so things match up between
# the file and the display (top of file == top of display)
@@
-29,6
+33,7
@@
class Level(object):
def load_tiles(self):
"""Load the list of tiles for the level"""
def load_tiles(self):
"""Load the list of tiles for the level"""
+ Logger.info('%s: load tiles' % self._name)
self._tiles = []
self._gates = {}
self._buttons = {}
self._tiles = []
self._gates = {}
self._buttons = {}
@@
-228,8
+233,7
@@
class Level(object):
if tile == WALL or tile == ENTRY:
return True
if tile == GATE:
if tile == WALL or tile == ENTRY:
return True
if tile == GATE:
- print tile, pos, self._gates[pos]
- if self._gates[pos] != -1:
+ if self._gates[pos] > 0:
return True
return False
return True
return False
@@
-237,11
+241,20
@@
class Level(object):
return abs(pos1[0] - pos2[0]) + abs(pos1[1] - pos2[1])
def is_gate(self, pos):
return abs(pos1[0] - pos2[0]) + abs(pos1[1] - pos2[1])
def is_gate(self, pos):
+ if not self._in_limits(pos):
+ return False
return self._data[pos[1]][pos[0]] == GATE
def is_button(self, pos):
return self._data[pos[1]][pos[0]] == GATE
def is_button(self, pos):
+ if not self._in_limits(pos):
+ return False
return self._data[pos[1]][pos[0]] == BUTTON
return self._data[pos[1]][pos[0]] == BUTTON
+ def is_wall(self, pos):
+ if not self._in_limits(pos):
+ return True
+ return self._data[pos[1]][pos[0]] == WALL
+
def trigger_button(self, pos):
if not self.is_button(pos):
return False
def trigger_button(self, pos):
if not self.is_button(pos):
return False
@@
-256,20
+269,18
@@
class Level(object):
gate_pos = cand
mindist = dist
if gate_pos:
gate_pos = cand
mindist = dist
if gate_pos:
- self._buttons[pos] =
=
'pressed'
+ self._buttons[pos] = 'pressed'
self._gates[gate_pos] = 3 # Raise gate
self._fix_tile(pos)
self._fix_tile(gate_pos)
def damage_gate(self, pos):
if not self.is_gate(pos):
self._gates[gate_pos] = 3 # Raise gate
self._fix_tile(pos)
self._fix_tile(gate_pos)
def damage_gate(self, pos):
if not self.is_gate(pos):
- return
False
+ return
if self._gates[pos] == -1 or self._gates[pos] == 0:
if self._gates[pos] == -1 or self._gates[pos] == 0:
- return
False
+ return
self._gates[pos] = self._gates[pos] - 1
self._gates[pos] = self._gates[pos] - 1
- self._fix_gate_tile(pos)
- self._changed.append((pos, self.get_single_tile(pos)))
- return True
+ self._fix_tile(pos)
def get_changed_tiles(self):
ret = self._changed[:]
def get_changed_tiles(self):
ret = self._changed[:]
@@
-282,35
+293,44
@@
class LevelList(object):
LEVELS = 'level_list'
def __init__(self):
LEVELS = 'level_list'
def __init__(self):
- self.levels = []
- self.errors = []
+ self._levels = []
+ self._level_names = []
+ self._errors = []
level_list = load(self.LEVELS)
for line in level_list:
line = line.strip()
if os.path.exists(filepath(line)):
level_file = load(line)
level_list = load(self.LEVELS)
for line in level_list:
line = line.strip()
if os.path.exists(filepath(line)):
level_file = load(line)
- level = Level(level_file)
+ level = Level(level_file
, line
)
level_file.close()
try:
level.validate()
level_file.close()
try:
level.validate()
- self.levels.append(level)
+ self._levels.append(level)
+ self._level_names.append(line)
except RuntimeError as err:
except RuntimeError as err:
- self.errors.append(
+ self.
_
errors.append(
'Invalid level %s in level_list: %s' % (line, err))
else:
'Invalid level %s in level_list: %s' % (line, err))
else:
- self.errors.append(
+ self.
_
errors.append(
'Level list includes non-existant level %s' % line)
level_list.close()
self._cur_level = 0
def get_current_level(self):
'Level list includes non-existant level %s' % line)
level_list.close()
self._cur_level = 0
def get_current_level(self):
- if self._cur_level < len(self.levels):
- return self.levels[self._cur_level]
+ if self._cur_level < len(self.
_
levels):
+ return self.
_
levels[self._cur_level]
else:
return None
def get_errors(self):
else:
return None
def get_errors(self):
- return self.errors
+ return self._errors
+
+ def get_level_names(self):
+ return self._level_names
+
+ def set_level_to(self, level_name):
+ if level_name in self._level_names:
+ self._cur_level = self._level_names.index(level_name)
def advance_to_next_level(self):
self._cur_level += 1
def advance_to_next_level(self):
self._cur_level += 1