playscii/games/crawler/scripts/player.py

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()