playscii/games/maze/scripts/player.py
Jared Miller 4f8b009a71
Reorganize source into playscii/ package
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.
2026-02-13 09:19:59 -05:00

56 lines
1.7 KiB
Python

import math
from games.maze.scripts.rooms import OutsideRoom
from playscii.game_util_objects import BlobShadow, Player
class PlayerBlobShadow(BlobShadow):
z = 0
fixed_z = True
scale_x = scale_y = 0.5
offset_y = -0.5
def pre_first_update(self):
BlobShadow.pre_first_update(self)
# TODO: figure out why class default scale isn't taking?
self.set_scale(0.5, 0.5, 1)
class MazePlayer(Player):
art_src = "player"
move_state = "stand"
col_radius = 0.5
# TODO: setting this to 2 fixes tunneling, but shouldn't slow down the player!
fast_move_steps = 2
attachment_classes = {"shadow": "PlayerBlobShadow"}
def __init__(self, world, obj_data=None):
Player.__init__(self, world, obj_data)
self.held_object = None
def pick_up(self, pickup):
# drop any other held item first
if self.held_object:
self.drop(self.held_object, pickup)
self.held_object = pickup
pickup.picked_up(self)
def drop(self, pickup, new_pickup=None):
# drop pickup in place of one we're swapping with, else drop at feet
if new_pickup:
pickup.x, pickup.y = new_pickup.x, new_pickup.y
else:
pickup.x, pickup.y = self.x, self.y
pickup.holder = None
def use_item(self):
self.world.hud.post_msg(self.held_object.used_message)
self.held_object.used(self)
def update(self):
Player.update(self)
if type(self.world.current_room) is OutsideRoom:
self.z = 5 + math.sin(self.world.get_elapsed_time() / 300) * 2
else:
# slightly above blob shadow
self.z = 0.01