Source code for game.controllers.place_controller

from game.common.enums import *
from game.common.game_object import GameObject
from game.common.items.item import Item
from game.common.map.game_board import GameBoard
from game.common.map.occupiable import Occupiable
from game.common.map.tile import Tile
from game.common.player import Player
from game.controllers.controller import Controller
from game.utils.vector import Vector
from game.common.map import occupiable
from game.common.avatar import *


[docs]class PlaceController(Controller): def __init__(self) -> None: super().__init__()
[docs] def handle_actions(self, action: ActionType, client: Player, world: GameBoard): avatar_pos: Vector = client.avatar.position pos_mod: Vector match action: case ActionType.PLACE_ITEM_UP: pos_mod = Vector(x=0, y=-1) case ActionType.PLACE_ITEM_DOWN: pos_mod = Vector(x=0, y=1) case ActionType.PLACE_ITEM_LEFT: pos_mod = Vector(x=-1, y=0) case ActionType.PLACE_ITEM_RIGHT: pos_mod = Vector(x=1, y=0) case _: return place_tile = world.game_map[avatar_pos.y + pos_mod.y][avatar_pos.x + pos_mod.x] self.__place_item(client, place_tile)
def __place_item(self, client: Player, tile: Tile) -> None: if client.avatar.held_item and isinstance(tile.get_top_of_stack(), Occupiable): tile.place_on_top_of_stack(client.avatar.held_item) client.avatar.drop_held_item()