blob: c41ba238540071ec8d5c4dc641647ac9a86d70fe (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
#ifndef CLIENT_PLAYER_HH_
#define CLIENT_PLAYER_HH_
#include <chrono>
#include <optional>
#include <string>
#include <utility>
#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<std::chrono::steady_clock> receive_time;
message(const std::string& message) noexcept {
this->text = message;
this->receive_time = std::chrono::steady_clock::now();
}
};
std::optional<message> message;
private:
glm::vec3 get_world_pos(const shared::player& lp) noexcept;
public:
player(shared::player&& p) noexcept
: shared::player(std::forward<shared::player>(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<struct message>& get_message() const noexcept {
return this->message;
}
};
using players = std::vector<player>;
static inline client::player& get_localplayer(players& players) noexcept {
return players[0];
}
} // namespace client
#endif
|