epr24pr42-ojanssen2/src/Entities/Player.h

69 lines
2.1 KiB
C
Raw Normal View History

#include "../Util/PositionVector.h"
#include "../Util/GameState.h"
#ifndef PLAYER_H
#define PLAYER_H
using game::GameState;
namespace game
{
class Maze;
/// Ein Spieler.
/// Besitzt einen veränderbaren Positionsvektor
class Player
{
private:
/// Die Position des Spielers
PositionVector pos;
int keys_in_inventory;
/// Bewege den Splieler um den Bewegungsvektor, insofern die Zielposition begehbar ist
/// @param maze Das Maze
/// @param move_vector Die gewollte Bewegung
/// @return Die neue Position des Spielers
Maze handle_move(Maze& maze, const PositionVector& move_vector);
/// Gebe oder Nehme dem Spieler Schlüssel
/// Updated auch das Maze (Reference!)
/// @param maze Das Maze
void handle_keys(Maze& maze);
/// Kontrolliere, ob der Spieler gerade in einem Geist steht
/// @param maze Das Maze
GameState handle_collisions(const GameState& prev_game_state, const Maze& maze);
public:
/// Ein Spieler.
/// Besitzt einen veränderbaren Positionsvektor
/// @param target_x Die Startposition des Spielers (X-Koordinate)
/// @param target_y Die Startposition des Spielers (Y-Koordinate)
Player(int target_x, int target_y);
/// Ein Spieler
/// @param pos Die Startposition des Spielers
explicit Player(PositionVector pos);
/// Kriege die Position des Spielers
/// @return Die Position des Spielers
PositionVector get_pos() const;
/// Aktuallisiere die Position des Spielers ohne weitere Checks
/// @param target Das ziel
void update_position(const PositionVector& target);
///
Maze handle_user_input(Maze& maze, const char& input);
///
void tick(const GameState& prev_game_state, Maze& maze);
/// Check, if a player has at least one key
/// @return If the player as an available key
bool has_key_available() const;
};
} // maze
#endif //PLAYER_H