#include "player.hpp" #include "../../config.h" #include Player::Player(std::shared_ptr assignedInput, const std::string &skinRessourceName, sf::Vector2f spawnPosition) { playerId = playerCreationCounter++; this->spawnPosition = spawnPosition; coordinates->set(spawnPosition); input = std::move(assignedInput); auto radiusInIso = getIsoRadius(); auto sprite = std::make_shared(skinRessourceName, sf::Vector2f{radiusInIso * 2.f, radiusInIso * 2.f}); addChildScreenOffset(sprite, {-radiusInIso, -radiusInIso}); } sf::Vector2f Player::getTrackablePosition() const { return coordinates->isometric().toScreen(); } sf::Vector2f Player::getTrackableSize() const { auto isoRadius = getIsoRadius(); return {isoRadius * 2.f, isoRadius * 2.f}; } void Player::update() { if (!input->isActive) { setActive(false); return; } auto moveDirection = input->direction.asIsometricVector(); auto moveDelta = moveDirection * speed * FRAME_TIME.asSeconds(); coordinates->move(moveDelta); if (input->isPerformingAction(GameAction::JUMP)) { coordinates->move({0, 0, 10}); } GameObject::update(); } TrackableState Player::getTrackableState() const { if (getActive()) { return TrackableState::TRACKING; } else { return TrackableState::END_TRACKING; } } int Player::getPlayerId() const { return playerId; } float Player::getIsoRadius() const { return radiusInWorld * WORLD_TO_ISO_SCALE; } float Player::getWorldRadius() const { return radiusInWorld; }