+ # Player position in viewpoint coordinates
+ check_point = (sprite_pos[0] + TILE_SIZE / 2,
+ sprite_pos[1] + TILE_SIZE / 2)
+ true_point = self.to_parent(*check_point)
+ if not self.included(true_point):
+ # Scroll ourselves
+ while true_point[0] >= self.view.size[0] - TILE_SIZE:
+ self.pos = (self.pos[0] - 1.5 * TILE_SIZE, self.pos[1])
+ true_point = self.to_parent(*check_point)
+ while true_point[0] < TILE_SIZE:
+ self.pos = (self.pos[0] + 1.5 * TILE_SIZE, self.pos[1])
+ true_point = self.to_parent(*check_point)
+ while true_point[1] >= self.view.size[1] - TILE_SIZE:
+ self.pos = (self.pos[0], self.pos[1] - 1.5 * TILE_SIZE)
+ true_point = self.to_parent(*check_point)
+ while true_point[1] < TILE_SIZE:
+ self.pos = (self.pos[0], self.pos[1] + 1.5 * TILE_SIZE)
+ true_point = self.to_parent(*check_point)
+
+ def included(self, point):
+ if point[0] < TILE_SIZE:
+ return False
+ if point[0] >= self.view.pos[0] - TILE_SIZE:
+ return False
+ if point[1] < TILE_SIZE:
+ return False
+ if point[1] >= self.view.pos[1] - TILE_SIZE:
+ return False
+
+ def draw_nemesis(self):
+ if not self.nemesis.on_board():
+ return
+ if self.nemesis_tile:
+ self.remove_widget(self.nemesis_tile)
+ sprite_pos = (self.nemesis.pos[0] * TILE_SIZE,
+ self.nemesis.pos[1] * TILE_SIZE)
+ self.nemesis_tile = Widget(size=(TILE_SIZE, TILE_SIZE),
+ pos=sprite_pos)
+ with self.nemesis_tile.canvas:
+ Color(1, 1, 1)
+ Rectangle(pos=sprite_pos, size=self.nemesis_tile.size,
+ texture=self.nemesis.get_texture())
+ self.add_widget(self.nemesis_tile)