Zappy GUI
C++ graphic client: renderer, camera, network
Loading...
Searching...
No Matches
RaylibRenderer.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <optional>
4#include <string>
5#include <unordered_map>
6#include <vector>
7
8#include "ARenderer.hpp"
9#include "raylib.h"
10
11// rlights.h must come after raylib.h — it depends on Vector3 and other raylib types
12#include "../../external/rlights.h"
22
26class RaylibRenderer : public ARenderer {
27 public:
28 RaylibRenderer() = default;
29 ~RaylibRenderer() override = default;
30
31 void init() override;
32 void render() override;
33 void handleInput() override;
34 bool shouldClose() override;
35 void shutdown() override;
36 void setDevMode(bool dev, int port, const std::string& machine) override;
37 std::optional<int> getPendingSpeedChange() override;
38
39 private:
40 static constexpr std::string_view PLAYER_MODEL_PATH = "gui/assets/models/rimuru.glb";
41 static constexpr std::string_view EGG_MODEL_PATH = "gui/assets/models/egg.glb";
42 static constexpr std::string_view FOOD_MODEL_PATH = "gui/assets/models/apple.glb";
43 static constexpr std::string_view CRYSTAL_MODEL_PATH = "gui/assets/models/crystal.glb";
44 static constexpr std::string_view FONT_PATH = "gui/assets/fonts/JetBrainsMono-Bold.ttf";
45
46 static constexpr float PLAYER_MODEL_SIZE = 0.25f;
47 static constexpr float EGG_MODEL_SIZE = 0.15f;
48 static constexpr float FOOD_MODEL_SIZE = 1.0f;
49 static constexpr float CRYSTAL_MODEL_SIZE = 2.0f;
50 static constexpr float RESOURCE_SPHERE_BASE_SIZE = 0.05f;
51 static constexpr float TILE_SIZE = 1.0f;
52 static constexpr float SELECTION_LINE_THICKNESS = 5.0f;
53 static constexpr float SELECTION_WIREFRAME_THICKNESS = 5.0f;
54 static constexpr Color SELECTION_COLOR = {128, 0, 128, 255}; // purple
55
57
58 Model _playerModel = {};
59 Color _playerModelBaseMats[6] = {};
60
61 Model _eggModel = {};
62 Color _eggModelBaseMats[2] = {};
63
64 Model _foodModel = {};
65
66 Model _crystalModel = {};
67
68 Shader _lightingShader = {};
69 Light _sun = {};
71
72 std::unordered_map<std::string, Color> _teamColors;
73
81 std::unique_ptr<IBackground> _background;
82 std::optional<int> _pendingSpeed;
83
85 int width = 800, height = 600;
86 Vector2 position = {0, 0};
87 int monitor = 0;
88 bool fullscreen = false;
89 bool valid = false;
90 };
92
93 bool _devMode = false;
94 int _devPort = -1;
95 std::string _devMachine;
96
97 void _render3D();
98 void _render2D();
99
101
102 void _initTeamColors();
103 Color _getTeamColor(const std::string& teamName);
104 int _getScaledFontSize(int baseFontSize) const;
105
106 void _updateSelection(float deltaTime);
107
108 void _performRaycast();
109 void _drawBehaviorParticles(const VisualState& visual);
110
111 std::vector<std::vector<const Player*>> _groupPlayersByVisualProximity() const;
112 Vector3 _groupLabelAnchor(const std::vector<const Player*>& group) const;
113
114 void _drawSelectionArrow(Vector3 basePos, float modelTopY) const;
115 void _drawSpeedSlider();
116};
Owns all camera logic: orbital, freecam, follow, and smooth transitions.
Tooltip widget for selected entities (tile, player, egg).
HUD panel displaying general game information.
Widget displaying players and allowing selection.
End-game overlay widget.
Abstract base class for renderers. Provides common default implementations so concrete renderers only...
Definition ARenderer.hpp:11
HUD widget for general information (map, uptime, fps, etc).
Definition HudWidget.hpp:13
Widget displaying players and allowing selection.
A renderer that uses Raylib to display the game state graphically.
void render() override
SelectionFinder::Selection _selection
int _getScaledFontSize(int baseFontSize) const
EntityTooltipWidget _entityTooltip
static constexpr std::string_view FOOD_MODEL_PATH
void _updateSelection(float deltaTime)
SpeedSlider _speedSlider
std::unordered_map< std::string, Color > _teamColors
Color _playerModelBaseMats[6]
std::unique_ptr< IBackground > _background
std::optional< int > _pendingSpeed
void _drawSelectionHighlight()
static constexpr float EGG_MODEL_SIZE
std::string _devMachine
static constexpr std::string_view CRYSTAL_MODEL_PATH
Color _eggModelBaseMats[2]
std::vector< std::vector< const Player * > > _groupPlayersByVisualProximity() const
static constexpr std::string_view FONT_PATH
void init() override
Vector3 _groupLabelAnchor(const std::vector< const Player * > &group) const
static constexpr float CRYSTAL_MODEL_SIZE
static constexpr float RESOURCE_SPHERE_BASE_SIZE
static constexpr std::string_view PLAYER_MODEL_PATH
static constexpr float PLAYER_MODEL_SIZE
std::optional< int > getPendingSpeedChange() override
bool shouldClose() override
void _drawSelectionArrow(Vector3 basePos, float modelTopY) const
static constexpr Color SELECTION_COLOR
Color _getTeamColor(const std::string &teamName)
void handleInput() override
WindowSnapshot _savedWindow
void shutdown() override
static constexpr float FOOD_MODEL_SIZE
CameraController _cam
PlayerPanel _playerPanel
void _drawBehaviorParticles(const VisualState &visual)
static constexpr std::string_view EGG_MODEL_PATH
static constexpr float TILE_SIZE
RaylibRenderer()=default
void setDevMode(bool dev, int port, const std::string &machine) override
static constexpr float SELECTION_LINE_THICKNESS
TileSlotMap _tileSlotMap
static constexpr float SELECTION_WIREFRAME_THICKNESS
~RaylibRenderer() override=default
Self-contained speed slider widget.
Manages 8-slot spatial assignment per tile for resources and eggs.
Visual-only state for an entity, driven by behaviors each frame. Logical state (x,...
Semi-transparent overlay shown when a team wins.
Definition WinScreen.hpp:27