Move all root .py files into playscii/ package directory. Rename playscii.py to app.py, add __main__.py entry point. Convert bare imports to relative (within package) and absolute (in formats/ and games/). Data dirs stay at root.
64 lines
2.2 KiB
Python
64 lines
2.2 KiB
Python
from games.crawler.scripts.crawler import (
|
|
DIR_EAST,
|
|
DIR_NAMES,
|
|
DIR_NORTH,
|
|
DIR_SOUTH,
|
|
DIR_WEST,
|
|
LEFT_TURN_DIRS,
|
|
OPPOSITE_DIRS,
|
|
RIGHT_TURN_DIRS,
|
|
)
|
|
from playscii.game_util_objects import Player
|
|
|
|
|
|
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(f"can't go {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()
|