Luanti 5.15.0-dev
 
Loading...
Searching...
No Matches
minimap.h
Go to the documentation of this file.
1// Luanti
2// SPDX-License-Identifier: LGPL-2.1-or-later
3// Copyright (C) 2010-2015 celeron55, Perttu Ahola <celeron55@gmail.com>
4
5#pragma once
6
7#include "irrlichttypes.h"
8#include "irr_ptr.h"
9#include "rect.h"
10#include "CMeshBuffer.h"
11
12#include "constants.h"
13#include "hud_element.h"
14#include "mapnode.h"
15#include "util/thread.h"
16#include <map>
17#include <string>
18#include <vector>
19
20namespace video {
21 class IVideoDriver;
22 class IImage;
23 class ITexture;
24}
25
26namespace scene {
27 class ISceneNode;
28}
29
30class Client;
31class NodeDefManager;
32class ITextureSource;
33class IShaderSource;
35
36#define MINIMAP_MAX_SX 512
37#define MINIMAP_MAX_SY 512
38
43
46 std::string label;
49 std::string texture;
50 u16 scale;
51};
52
54 MinimapMarker(scene::ISceneNode *parent_node):
56 {}
57
58 scene::ISceneNode *parent_node;
59};
60
67
69 void getMinimapNodes(VoxelManipulator *vmanip, const NodeDefManager *nodedef, const v3s16 &pos);
70
72};
73
81 video::IImage *minimap_mask_round = nullptr;
82 video::IImage *minimap_mask_square = nullptr;
83 video::ITexture *texture = nullptr;
84 video::ITexture *heightmap_texture = nullptr;
85 bool textures_initialised = false; // True if the following textures are not nullptrs.
86 video::ITexture *minimap_overlay_round = nullptr;
87 video::ITexture *minimap_overlay_square = nullptr;
88 video::ITexture *player_marker = nullptr;
89 video::ITexture *object_marker_red = nullptr;
90};
91
96
98public:
100 virtual ~MinimapUpdateThread();
101
102 void getMap(v3s16 pos, s16 size, s16 height);
106
107 MinimapData *data = nullptr;
108
109protected:
110 virtual void doUpdate();
111
112private:
113 std::mutex m_queue_mutex;
114 std::deque<QueuedMinimapUpdate> m_update_queue;
115 std::map<v3s16, MinimapMapblock *> m_blocks_cache;
116};
117
118class Minimap {
119public:
121 ~Minimap();
122
124
125 v3f getYawVec();
126
127 void setPos(v3s16 pos);
128 v3s16 getPos() const { return data->pos; }
129 void setAngle(f32 angle);
130 f32 getAngle() const { return m_angle; }
131 void toggleMinimapShape();
132 void setMinimapShape(MinimapShape shape);
134
135 void clearModes() { m_modes.clear(); };
136 void addMode(MinimapModeDef mode);
137 void addMode(MinimapType type, u16 size = 0, const std::string &label = "",
138 const std::string &texture = "", u16 scale = 1);
139
140 void setModeIndex(size_t index);
141 size_t getModeIndex() const { return m_current_mode_index; };
142 size_t getMaxModeIndex() const { return m_modes.size() - 1; };
143 void nextMode();
144
145 MinimapModeDef getModeDef() const { return data->mode; }
146
147 video::IImage *getMinimapMask();
148 video::ITexture *getMinimapTexture();
149
150 void blitMinimapPixelsToImageRadar(video::IImage *map_image);
151 void blitMinimapPixelsToImageSurface(video::IImage *map_image,
152 video::IImage *heightmap_image);
153
154 irr_ptr<scene::SMeshBuffer> createMinimapMeshBuffer();
155
156 MinimapMarker* addMarker(scene::ISceneNode *parent_node);
157 void removeMarker(MinimapMarker **marker);
158
159 void updateActiveMarkers();
160 void drawMinimap(core::rect<s32> rect);
161
162 video::IVideoDriver *driver = nullptr;
163 Client *client = nullptr;
164 std::unique_ptr<MinimapData> data;
165
166private:
169 const NodeDefManager *m_ndef = nullptr;
170 std::unique_ptr<MinimapUpdateThread> m_minimap_update_thread;
171 irr_ptr<scene::SMeshBuffer> m_meshbuffer;
172 std::vector<MinimapModeDef> m_modes;
176
177 std::mutex m_mutex;
178 std::vector<std::unique_ptr<MinimapMarker>> m_markers;
179 std::vector<v2f> m_active_markers;
180};
Definition client.h:106
Definition shader.h:241
Definition texturesource.h:45
Definition minimap.h:97
void enqueueBlock(v3s16 pos, MinimapMapblock *data)
Definition minimap.cpp:69
virtual void doUpdate()
Definition minimap.cpp:76
virtual ~MinimapUpdateThread()
Definition minimap.cpp:22
bool popBlockUpdate(QueuedMinimapUpdate *update)
Definition minimap.cpp:56
std::deque< QueuedMinimapUpdate > m_update_queue
Definition minimap.h:114
MinimapData * data
Definition minimap.h:107
std::mutex m_queue_mutex
Definition minimap.h:113
bool pushBlockUpdate(v3s16 pos, MinimapMapblock *data)
Definition minimap.cpp:33
std::map< v3s16, MinimapMapblock * > m_blocks_cache
Definition minimap.h:115
void getMap(v3s16 pos, s16 size, s16 height)
Definition minimap.cpp:106
MinimapUpdateThread()
Definition minimap.h:99
Definition minimap.h:118
ITextureSource * m_tsrc
Definition minimap.h:167
std::vector< std::unique_ptr< MinimapMarker > > m_markers
Definition minimap.h:178
size_t getModeIndex() const
Definition minimap.h:141
std::mutex m_mutex
Definition minimap.h:177
video::IVideoDriver * driver
Definition minimap.h:162
void addBlock(v3s16 pos, MinimapMapblock *data)
Definition minimap.cpp:225
std::unique_ptr< MinimapData > data
Definition minimap.h:164
void setMinimapShape(MinimapShape shape)
Definition minimap.cpp:239
void blitMinimapPixelsToImageRadar(video::IImage *map_image)
Definition minimap.cpp:382
void setModeIndex(size_t index)
Definition minimap.cpp:261
~Minimap()
Definition minimap.cpp:204
std::unique_ptr< MinimapUpdateThread > m_minimap_update_thread
Definition minimap.h:170
void addMode(MinimapModeDef mode)
Definition minimap.cpp:279
size_t m_current_mode_index
Definition minimap.h:173
v3s16 getPos() const
Definition minimap.h:128
MinimapShape getMinimapShape()
Definition minimap.cpp:252
video::ITexture * getMinimapTexture()
Definition minimap.cpp:458
std::vector< v2f > m_active_markers
Definition minimap.h:179
void setPos(v3s16 pos)
Definition minimap.cpp:359
void removeMarker(MinimapMarker **marker)
Definition minimap.cpp:682
IShaderSource * m_shdrsrc
Definition minimap.h:168
MinimapMarker * addMarker(scene::ISceneNode *parent_node)
Definition minimap.cpp:674
size_t getMaxModeIndex() const
Definition minimap.h:142
v3f getYawVec()
Definition minimap.cpp:531
const NodeDefManager * m_ndef
Definition minimap.h:169
std::vector< MinimapModeDef > m_modes
Definition minimap.h:172
f32 getAngle() const
Definition minimap.h:130
Minimap(Client *client)
Definition minimap.cpp:163
void nextMode()
Definition minimap.cpp:348
void blitMinimapPixelsToImageSurface(video::IImage *map_image, video::IImage *heightmap_image)
Definition minimap.cpp:398
f32 m_angle
Definition minimap.h:175
video::IImage * getMinimapMask()
Definition minimap.cpp:435
void toggleMinimapShape()
Definition minimap.cpp:230
void setAngle(f32 angle)
Definition minimap.cpp:377
MinimapModeDef getModeDef() const
Definition minimap.h:145
void clearModes()
Definition minimap.h:135
void drawMinimap(core::rect< s32 > rect)
Definition minimap.cpp:568
u16 m_surface_mode_scan_height
Definition minimap.h:174
irr_ptr< scene::SMeshBuffer > m_meshbuffer
Definition minimap.h:171
void updateActiveMarkers()
Definition minimap.cpp:694
irr_ptr< scene::SMeshBuffer > createMinimapMeshBuffer()
Definition minimap.cpp:543
This class is for getting the actual properties of nodes from their content ID.
Definition nodedef.h:509
Definition thread.h:175
Definition voxel.h:365
#define MAP_BLOCKSIZE
Definition constants.h:64
MinimapType
Definition hud_element.h:108
core::vector3d< s16 > v3s16
Definition irr_v3d.h:13
core::vector3df v3f
Definition irr_v3d.h:11
MinimapShape
Definition minimap.h:39
@ MINIMAP_SHAPE_SQUARE
Definition minimap.h:40
@ MINIMAP_SHAPE_ROUND
Definition minimap.h:41
#define MINIMAP_MAX_SY
Definition minimap.h:37
#define MINIMAP_MAX_SX
Definition minimap.h:36
Definition activeobjectmgr.cpp:11
Definition camera.h:24
Definition clientmap.h:36
Definition mapnode.h:123
Definition minimap.h:74
MinimapPixel minimap_scan[MINIMAP_MAX_SX *MINIMAP_MAX_SY]
Definition minimap.h:78
video::ITexture * minimap_overlay_square
Definition minimap.h:87
video::IImage * minimap_mask_square
Definition minimap.h:82
v3s16 old_pos
Definition minimap.h:77
video::ITexture * minimap_overlay_round
Definition minimap.h:86
video::ITexture * object_marker_red
Definition minimap.h:89
MinimapModeDef mode
Definition minimap.h:75
video::ITexture * texture
Definition minimap.h:83
bool textures_initialised
Definition minimap.h:85
video::ITexture * heightmap_texture
Definition minimap.h:84
video::ITexture * player_marker
Definition minimap.h:88
video::IImage * minimap_mask_round
Definition minimap.h:81
bool map_invalidated
Definition minimap.h:79
v3s16 pos
Definition minimap.h:76
bool minimap_shape_round
Definition minimap.h:80
Definition minimap.h:68
void getMinimapNodes(VoxelManipulator *vmanip, const NodeDefManager *nodedef, const v3s16 &pos)
Definition minimap.cpp:728
MinimapPixel data[MAP_BLOCKSIZE *MAP_BLOCKSIZE]
Definition minimap.h:71
Definition minimap.h:53
scene::ISceneNode * parent_node
Definition minimap.h:58
MinimapMarker(scene::ISceneNode *parent_node)
Definition minimap.h:54
Definition minimap.h:44
MinimapType type
Definition minimap.h:45
u16 scale
Definition minimap.h:50
std::string label
Definition minimap.h:46
u16 map_size
Definition minimap.h:48
std::string texture
Definition minimap.h:49
u16 scan_height
Definition minimap.h:47
Definition minimap.h:61
u16 height
Definition minimap.h:64
u16 air_count
Definition minimap.h:65
MapNode n
The topmost node that the minimap displays.
Definition minimap.h:63
Definition minimap.h:92
v3s16 pos
Definition minimap.h:93
MinimapMapblock * data
Definition minimap.h:94