fekalnigtacko/src/gameview/client_session.hpp
2026-06-13 17:11:53 +02:00

78 lines
2.1 KiB
C++

#pragma once
#include <memory>
#include "worldview.hpp"
#include "gfx/draw_list.hpp"
#include "gfx/renderer.hpp"
#include "net/defs.hpp"
#include "net/inmessage.hpp"
#include "net/msg_producer.hpp"
#include "game/player_input.hpp"
#include "gui/use_target_hud.hpp"
#include "remote_menu_view.hpp"
#include "game/camera_info.hpp"
#include "game/camera_controller.hpp"
class App;
namespace game::view
{
class ClientSession : public net::MsgProducer
{
public:
ClientSession(App& app);
bool ProcessMessage(net::InMessage& msg);
bool ProcessSingleMessage(net::MessageType type, net::InMessage& msg);
void Input(game::PlayerInputType in, bool pressed, bool repeated);
void ProcessMouseMove(float delta_yaw, float delta_pitch);
void Update(const UpdateInfo& info);
void Draw(gfx::DrawList& dlist, gfx::DrawListParams& params, gui::Context& gui);
const WorldView* GetWorld() const { return world_.get(); }
audio::Master& GetAudioMaster() const;
private:
// msg handlers
bool ProcessWorldMsg(net::InMessage& msg);
bool ProcessCameraMsg(net::InMessage& msg);
bool ProcessChatMsg(net::InMessage& msg);
bool ProcessUseTargetMsg(net::InMessage& msg);
bool ProcessMenuMsg(net::InMessage& msg);
void UpdateCamera(const UpdateInfo& info);
void DrawWorld(gfx::DrawList& dlist, gfx::DrawListParams& params, gui::Context& gui);
void SendInput(game::PlayerInputType type, bool enable);
void SendViewAngles(float time);
void DrawMenus(gui::Context& gui) const;
bool ProcessMenuInput(game::PlayerInputType in);
RemoteMenuView* FindMenu(net::MenuId id) const;
void DrawCrosshair(gui::Context& gui) const;
private:
App& app_;
std::unique_ptr<WorldView> world_;
CameraController camera_controller_;
CameraInfo camera_info_;
net::ViewYawQ view_yaw_q_;
net::ViewPitchQ view_pitch_q_;
float last_send_time_ = 0.0f;
gui::UseTargetHud use_target_hud_;
std::vector<std::unique_ptr<RemoteMenuView>> remote_menus_;
std::shared_ptr<const gfx::Texture> crosshair_texture_;
};
} // namespace game::view