holesome/src/game/player/player.cpp

76 lines
1.6 KiB
C++
Raw Normal View History

2023-05-08 18:20:55 +02:00
#include "player.hpp"
#include "../../config.h"
2023-05-17 23:22:45 +02:00
#include <utility>
Player::Player(std::shared_ptr<InputIdentity> 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<VersatileSprite>(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};
}
2023-05-24 14:00:51 +02:00
void Player::update()
{
if (!input->isActive)
{
setActive(false);
return;
}
auto moveDirection = input->direction.asIsometricVector();
2023-05-29 00:22:36 +02:00
auto moveDelta = moveDirection * speed * FRAME_TIME.asSeconds();
coordinates->move(moveDelta);
2023-06-04 20:55:14 +02:00
if (input->isPerformingAction(GameAction::JUMP))
{
coordinates->move({0, 0, 10});
}
2023-06-04 20:55:14 +02:00
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;
}