diff --git a/client/renderable/base_monster.hpp b/client/renderable/base_monster.hpp index 58d8f49..15cea7d 100644 --- a/client/renderable/base_monster.hpp +++ b/client/renderable/base_monster.hpp @@ -26,8 +26,8 @@ class BaseMonster { public: - BaseMonster(); - virtual ~BaseMonster(); + BaseMonster() = default; + virtual ~BaseMonster() = default; private: // diff --git a/client/renderable/local_character.hpp b/client/renderable/local_character.hpp index 8407fef..37e90de 100644 --- a/client/renderable/local_character.hpp +++ b/client/renderable/local_character.hpp @@ -30,9 +30,13 @@ public: LocalCharacter() = default; ~LocalCharacter() = default; + int SetRoomIndex(int i) { return roomIndex = i; } + int GetRoomIndex() { return roomIndex; } + Statistics* GetBaseStats() { return &baseStats; } private: + int roomIndex = -1; Statistics baseStats; //TODO: weapons, armour, buffs, debuffs, etc. }; diff --git a/client/scenes/in_world.cpp b/client/scenes/in_world.cpp index 4581b1a..bea05c3 100644 --- a/client/scenes/in_world.cpp +++ b/client/scenes/in_world.cpp @@ -138,7 +138,7 @@ void InWorld::Update() { } } - //update the camera + //update the camera (following the player) camera.x = localCharacter->GetOrigin().x - camera.marginX; camera.y = localCharacter->GetOrigin().y - camera.marginY; @@ -179,6 +179,7 @@ void InWorld::Render(SDL_Surface* const screen) { //draw characters for (auto& it : characterMap) { //BUG: #29 drawing order according to Y origin + //TODO: use a list of renderable objects it.second.DrawTo(screen, camera.x, camera.y); } @@ -209,10 +210,10 @@ void InWorld::MouseButtonDown(SDL_MouseButtonEvent const& button) { } void InWorld::MouseButtonUp(SDL_MouseButtonEvent const& button) { - if (disconnectButton.MouseButtonUp(button) == Button::State::HOVER) { + if (disconnectButton.MouseButtonUp(button) == Button::State::HOVER && button.button == SDL_BUTTON_LEFT) { RequestDisconnect(); } - if (shutDownButton.MouseButtonUp(button) == Button::State::HOVER) { + if (shutDownButton.MouseButtonUp(button) == Button::State::HOVER && button.button == SDL_BUTTON_LEFT) { RequestShutDown(); } } @@ -326,7 +327,7 @@ void InWorld::HandlePing(ServerPacket* const argPacket) { void InWorld::HandlePong(ServerPacket* const argPacket) { if (network.GetIPAddress(Channels::SERVER)->host != argPacket->srcAddress.host) { - throw(std::runtime_error("Heartbeat message received from unknown source")); + throw(std::runtime_error("Heartbeat message received from an unknown source")); } attemptedBeats = 0; diff --git a/client/scenes/in_world.hpp b/client/scenes/in_world.hpp index 62904d9..7f2e078 100644 --- a/client/scenes/in_world.hpp +++ b/client/scenes/in_world.hpp @@ -39,6 +39,7 @@ #include "frame_rate.hpp" #include "base_character.hpp" +#include "base_monster.hpp" #include "local_character.hpp" //client @@ -92,12 +93,13 @@ protected: //utilities void UpdateMap(); - //shared parameters + //singleton shortcut UDPNetworkUtility& network = UDPNetworkUtility::GetSingleton(); + + //indexes int& clientIndex; int& accountIndex; int characterIndex = -1; - std::map characterMap; //graphics Image buttonImage; @@ -110,6 +112,7 @@ protected: //UI Button disconnectButton; Button shutDownButton; + FrameRate fps; //the camera structure struct { @@ -117,12 +120,13 @@ protected: int width = 0, height = 0; int marginX = 0, marginY = 0; } camera; - FrameRate fps; - //game + //game components BaseCharacter* localCharacter = nullptr; + std::map characterMap; + std::map monsterMap; - //connections + //heartbeat //TODO: This needs it's own utility, for both InWorld and InCombat typedef std::chrono::steady_clock Clock; Clock::time_point lastBeat = Clock::now(); diff --git a/todo.txt b/todo.txt index 4cc86ff..ddf70e7 100644 --- a/todo.txt +++ b/todo.txt @@ -1,5 +1,7 @@ TODO: Get the rooms working, even if only via hotkeys +TODO: SerialPacketType::CHARACTER_LOCATION, CHARACTER_MOVE, CHARACTER_TELEPORT, ROOM_CHANGE, etc. TODO: Fix shoddy movement +TODO: Handle statistics server-side TODO: Remove the big "Shut Down" button TODO: Make a way for the server owner to control the server directly