58 lines
2.2 KiB
Python
58 lines
2.2 KiB
Python
|
|
from game_object import GameObject
|
|
from game_util_objects import Player
|
|
|
|
from games.crawler.scripts.crawler import DIR_NORTH, DIR_SOUTH, DIR_EAST, DIR_WEST, LEFT_TURN_DIRS, RIGHT_TURN_DIRS, DIR_NAMES, OPPOSITE_DIRS
|
|
|
|
|
|
class CrawlPlayer(Player):
|
|
should_save = False # we are spawned by maze
|
|
generate_art = True
|
|
art_width, art_height = 1, 1
|
|
art_charset, art_palette = 'jpetscii', 'c64_pepto'
|
|
art_off_pct_x, art_off_pct_y = 0, 0
|
|
# bespoke grid-based movement method
|
|
physics_move = False
|
|
handle_key_events = True
|
|
|
|
view_range_tiles = 8
|
|
fg_color = 8 # yellow
|
|
dir_chars = { DIR_NORTH: 147,
|
|
DIR_SOUTH: 163,
|
|
DIR_EAST: 181,
|
|
DIR_WEST: 180
|
|
}
|
|
|
|
def pre_first_update(self):
|
|
Player.pre_first_update(self)
|
|
# top-down facing
|
|
self.direction = DIR_NORTH
|
|
self.maze.update_tile_visibilities()
|
|
self.art.set_tile_at(0, 0, 0, 0, self.dir_chars[self.direction], self.fg_color)
|
|
|
|
def handle_key_down(self, key, shift_pressed, alt_pressed, ctrl_pressed):
|
|
# turning?
|
|
if key == 'left':
|
|
self.direction = LEFT_TURN_DIRS[self.direction]
|
|
elif key == 'right':
|
|
self.direction = RIGHT_TURN_DIRS[self.direction]
|
|
# moving?
|
|
elif key == 'up' or key == 'down':
|
|
x, y = self.maze.get_tile_at_point(self.x, self.y)
|
|
if key == 'up':
|
|
new_x = x + self.direction[0]
|
|
new_y = y + self.direction[1]
|
|
else:
|
|
new_x = x - self.direction[0]
|
|
new_y = y - self.direction[1]
|
|
# is move valid?
|
|
if self.maze.is_tile_solid(new_x, new_y):
|
|
# TEMP negative feedback
|
|
dir_name = DIR_NAMES[self.direction] if key == 'up' else DIR_NAMES[OPPOSITE_DIRS[self.direction]]
|
|
self.app.log("can't go %s!" % dir_name)
|
|
else:
|
|
self.x, self.y = self.maze.x + new_x, self.maze.y - new_y
|
|
# update art to show facing
|
|
self.art.set_char_index_at(0, 0, 0, 0, self.dir_chars[self.direction])
|
|
# update maze tiles
|
|
self.maze.update_tile_visibilities()
|