fixed opengl data clean up

This commit is contained in:
2021-08-21 13:54:42 +02:00
parent 2ed590d065
commit 7e2193dbfb

View File

@@ -23,7 +23,7 @@
namespace TowerGui{ namespace TowerGui{
static GLFWwindow* window; static GLFWwindow* window;
static td::client::Client client; static std::unique_ptr<td::client::Client> client = std::make_unique<td::client::Client>();
static std::thread* serverThread; static std::thread* serverThread;
bool serverShouldStop = false; bool serverShouldStop = false;
@@ -112,7 +112,7 @@ void renderMainMenu(){
ImGui::InputText("Server Adress", buffer, sizeof(buffer)); ImGui::InputText("Server Adress", buffer, sizeof(buffer));
ImGui::InputInt("Port", &port, -1); ImGui::InputInt("Port", &port, -1);
if (ImGui::Button("Rejoindre")){ if (ImGui::Button("Rejoindre")){
client.connect(buffer, port); client->connect(buffer, port);
triedToConnect = true; triedToConnect = true;
} }
if (triedToConnect){ if (triedToConnect){
@@ -144,7 +144,7 @@ void renderMainMenu(){
triedToCreate = true; triedToCreate = true;
} }
else{ else{
client.connect("localhost", port); client->connect("localhost", port);
} }
} }
if (triedToCreate) if (triedToCreate)
@@ -170,8 +170,8 @@ ImVec4 getImGuiTeamColor(td::game::TeamColor color){
} }
void showPlayers(){ void showPlayers(){
if (ImGui::TreeNode(std::string("Players (" + std::to_string(client.getGame().getPlayers().size()) + ")##player_list").c_str())){ if (ImGui::TreeNode(std::string("Players (" + std::to_string(client->getGame().getPlayers().size()) + ")##player_list").c_str())){
for (auto pair : client.getGame().getPlayers()){ for (auto pair : client->getGame().getPlayers()){
const td::game::Player& player = pair.second; const td::game::Player& player = pair.second;
ImGui::PushStyleColor(ImGuiCol_Text, getImGuiTeamColor(player.getTeamColor())); ImGui::PushStyleColor(ImGuiCol_Text, getImGuiTeamColor(player.getTeamColor()));
ImGui::Text(player.getName().c_str()); ImGui::Text(player.getName().c_str());
@@ -182,30 +182,30 @@ void showPlayers(){
} }
void showTeamSelection(){ void showTeamSelection(){
if (client.getGame().getPlayer() == nullptr) if (client->getGame().getPlayer() == nullptr)
return; return;
td::game::TeamColor playerTeam = client.getGame().getPlayer()->getTeamColor(); td::game::TeamColor playerTeam = client->getGame().getPlayer()->getTeamColor();
if (ImGui::Button(std::string((playerTeam == td::game::TeamColor::Red ? "Leave" : "Join") + std::string(" Red Team")).c_str())){ if (ImGui::Button(std::string((playerTeam == td::game::TeamColor::Red ? "Leave" : "Join") + std::string(" Red Team")).c_str())){
if (playerTeam == td::game::TeamColor::Red) if (playerTeam == td::game::TeamColor::Red)
client.selectTeam(td::game::TeamColor::None); client->selectTeam(td::game::TeamColor::None);
else else
client.selectTeam(td::game::TeamColor::Red); client->selectTeam(td::game::TeamColor::Red);
} }
ImGui::SameLine(); ImGui::SameLine();
if (ImGui::Button(std::string((playerTeam == td::game::TeamColor::Blue ? "Leave" : "Join") + std::string(" Blue Team")).c_str())){ if (ImGui::Button(std::string((playerTeam == td::game::TeamColor::Blue ? "Leave" : "Join") + std::string(" Blue Team")).c_str())){
if (playerTeam == td::game::TeamColor::Blue) if (playerTeam == td::game::TeamColor::Blue)
client.selectTeam(td::game::TeamColor::None); client->selectTeam(td::game::TeamColor::None);
else else
client.selectTeam(td::game::TeamColor::Blue); client->selectTeam(td::game::TeamColor::Blue);
} }
} }
void showLobbyProgress(){ void showLobbyProgress(){
const int timePassed = LOBBY_WAITING_TIME - client.getGame().getLobbyTime(); const int timePassed = LOBBY_WAITING_TIME - client->getGame().getLobbyTime();
const float progress = (float)timePassed / (float)(LOBBY_WAITING_TIME); const float progress = (float)timePassed / (float)(LOBBY_WAITING_TIME);
if (progress > 0 && progress < 1 && client.getGame().getPlayers().size() >= 2){ if (progress > 0 && progress < 1 && client->getGame().getPlayers().size() >= 2){
ImGui::ProgressBar(progress, ImVec2(0.0f, 0.0f), std::string(std::to_string(client.getGame().getLobbyTime() / 1000) + "s").c_str()); ImGui::ProgressBar(progress, ImVec2(0.0f, 0.0f), std::string(std::to_string(client->getGame().getLobbyTime() / 1000) + "s").c_str());
ImGui::SameLine(0.0f, ImGui::GetStyle().ItemInnerSpacing.x); ImGui::SameLine(0.0f, ImGui::GetStyle().ItemInnerSpacing.x);
ImGui::Text("Time Remaining"); ImGui::Text("Time Remaining");
} }
@@ -215,12 +215,12 @@ void showLobbyProgress(){
} }
void showTPS(){ void showTPS(){
ImGui::Text("Server TPS : %.1f", client.getConnexion().getServerTPS()); ImGui::Text("Server TPS : %.1f", client->getConnexion().getServerTPS());
ImGui::Text("Server Ping : %i", client.getConnexion().getServerPing()); ImGui::Text("Server Ping : %i", client->getConnexion().getServerPing());
} }
void showStats(){ void showStats(){
ImGui::Text("Gold : %i", client.getGame().getPlayer()->getGold()); ImGui::Text("Gold : %i", client->getGame().getPlayer()->getGold());
} }
void renderSummonMenu(){ void renderSummonMenu(){
@@ -267,7 +267,7 @@ void renderSummonMenu(){
} }
void renderGame(){ void renderGame(){
if (client.getGame().getGameState() == td::game::GameState::Lobby){ if (client->getGame().getGameState() == td::game::GameState::Lobby){
ImGui::Begin("Lobby"); ImGui::Begin("Lobby");
showTPS(); showTPS();
@@ -277,7 +277,7 @@ void renderGame(){
ImGui::End(); ImGui::End();
} }
if (client.getGame().getGameState() == td::game::GameState::Game){ if (client->getGame().getGameState() == td::game::GameState::Game){
ImGui::Begin("Game"); ImGui::Begin("Game");
showTPS(); showTPS();
@@ -294,16 +294,16 @@ void tick(){
std::uint64_t delta = time - lastTime; std::uint64_t delta = time - lastTime;
client.tick(delta); client->tick(delta);
lastTime = td::utils::getTime(); lastTime = td::utils::getTime();
} }
void render(){ void render(){
tick(); tick();
client.render(); client->render();
beginFrame(); beginFrame();
if (client.isConnected()) if (client->isConnected())
renderGame(); renderGame();
else else
renderMainMenu(); renderMainMenu();
@@ -316,7 +316,8 @@ void render(){
} }
void destroy(){ void destroy(){
client.closeConnection(); client->closeConnection();
client.reset();
serverShouldStop = true; serverShouldStop = true;
if (serverThread != nullptr){ if (serverThread != nullptr){
serverThread->join(); serverThread->join();