From 1cc08c51eb4b0f95c30c0a98ad1fc5ad3459b2df Mon Sep 17 00:00:00 2001 From: Nicolas James Date: Wed, 12 Feb 2025 18:05:18 +1100 Subject: initial commit --- src/client/player.hh | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 src/client/player.hh (limited to 'src/client/player.hh') diff --git a/src/client/player.hh b/src/client/player.hh new file mode 100644 index 0000000..c41ba23 --- /dev/null +++ b/src/client/player.hh @@ -0,0 +1,64 @@ +#ifndef CLIENT_PLAYER_HH_ +#define CLIENT_PLAYER_HH_ + +#include +#include +#include +#include + +#include "client/math.hh" +#include "client/render/camera.hh" +#include "client/render/model.hh" +#include "client/render/program.hh" +#include "shared/player.hh" + +namespace client { + +// Renderable player, similar to client::chunk. We also store the message the +// player wants to say. +class player : public shared::player { +public: + static constexpr auto MSG_SHOW_TIME = std::chrono::seconds(15); + struct message { + std::string text; + std::chrono::time_point receive_time; + message(const std::string& message) noexcept { + this->text = message; + this->receive_time = std::chrono::steady_clock::now(); + } + }; + std::optional message; + +private: + glm::vec3 get_world_pos(const shared::player& lp) noexcept; + +public: + player(shared::player&& p) noexcept + : shared::player(std::forward(p)) {} + player(const shared::player& p) noexcept : shared::player(p) {} + + void update(const shared::player& p) noexcept { + this->index = p.index; // there is no syntax for doing this in one line + this->commands = p.commands; + this->chunk_pos = p.chunk_pos; + this->local_pos = p.local_pos; + this->viewangles = p.viewangles; + this->velocity = p.velocity; + } + + void draw_playermodel(const shared::player& localplayer) noexcept; + void draw_message(const shared::player& localplayer) noexcept; + + const std::optional& get_message() const noexcept { + return this->message; + } +}; + +using players = std::vector; +static inline client::player& get_localplayer(players& players) noexcept { + return players[0]; +} + +} // namespace client + +#endif -- cgit v1.2.3