fekalnigtacko/src/game/enterable_world.cpp
2026-03-21 23:31:50 +01:00

92 lines
2.3 KiB
C++

#include "enterable_world.hpp"
#include "player_character.hpp"
#include "drivable_vehicle.hpp"
game::EnterableWorld::EnterableWorld(std::string mapname) : World(std::move(mapname)) {}
game::PlayerCharacter& game::EnterableWorld::InsertPlayer(Player& player, const CharacterTuning& tuning, const glm::vec3& pos, float yaw)
{
return CreatePlayerCharacter(player, tuning, pos, yaw);
}
void game::EnterableWorld::PlayerInput(Player& player, PlayerInputType type, bool enabled)
{
auto it = player_characters_.find(&player);
if (it == player_characters_.end())
return;
auto character = it->second;
switch (type)
{
// case IN_DEBUG1:
// if (enabled)
// {
// if (character->GetVehicle())
// character->GetVehicle()->SetPosition({100.0f, 100.0f, 5.0f});
// else
// character->SetPosition({100.0f, 100.0f, 5.0f});
// }
// break;
default:
character->ProcessInput(type, enabled);
break;
}
}
void game::EnterableWorld::PlayerViewAnglesChanged(Player& player, float yaw, float pitch)
{
auto it = player_characters_.find(&player);
if (it == player_characters_.end())
return;
auto character = it->second;
character->SetForwardYaw(yaw);
}
void game::EnterableWorld::RemovePlayer(Player& player)
{
RemovePlayerCharacter(player);
}
game::PlayerCharacter* game::EnterableWorld::GetPlayerCharacter(Player& player)
{
auto it = player_characters_.find(&player);
if (it == player_characters_.end())
return nullptr;
return it->second;
}
game::PlayerCharacter& game::EnterableWorld::CreatePlayerCharacter(Player& player, const CharacterTuning& tuning, const glm::vec3& position, float yaw)
{
RemovePlayerCharacter(player);
auto& character = Spawn<PlayerCharacter>(player, tuning);
character.SetPosition(position);
character.SetYaw(yaw);
player_characters_[&player] = &character;
return character;
}
void game::EnterableWorld::RemovePlayerCharacter(Player& player)
{
auto it = player_characters_.find(&player);
if (it == player_characters_.end())
return;
auto character = it->second;
if (character)
{
character->DetachFromPlayer();
character->Remove();
}
player_characters_.erase(it);
}