Minetest 5.9.0-dev
 
Loading...
Searching...
No Matches
emerge_internal.h
Go to the documentation of this file.
1/*
2Minetest
3Copyright (C) 2010-2013 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
4
5This program is free software; you can redistribute it and/or modify
6it under the terms of the GNU Lesser General Public License as published by
7the Free Software Foundation; either version 2.1 of the License, or
8(at your option) any later version.
9
10This program is distributed in the hope that it will be useful,
11but WITHOUT ANY WARRANTY; without even the implied warranty of
12MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13GNU Lesser General Public License for more details.
14
15You should have received a copy of the GNU Lesser General Public License along
16with this program; if not, write to the Free Software Foundation, Inc.,
1751 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18*/
19
20#pragma once
21
22/******************************************************************/
23/* may only be included by emerge.cpp or emerge scripting related */
24/******************************************************************/
25
26#include "emerge.h"
27
28#include <queue>
29
30#include "util/thread.h"
31#include "threading/event.h"
32
33class Server;
34class ServerMap;
35class Mapgen;
36
37class EmergeManager;
38class EmergeScripting;
39
40class EmergeThread : public Thread {
41public:
43 int id;
44
45 EmergeThread(Server *server, int ethreadid);
46 ~EmergeThread() = default;
47
48 void *run();
49 void signal();
50
51 // Requires queue mutex held
52 bool pushBlock(const v3s16 &pos);
53
54 void cancelPendingItems();
55
57 Mapgen *getMapgen() { return m_mapgen; }
58
59protected:
60
62 const v3s16 &pos, EmergeAction action,
63 const EmergeCallbackList &callbacks);
64
65private:
70
71 std::unique_ptr<EmergeScripting> m_script;
72 // read from scripting:
73 UniqueQueue<v3s16> *m_trans_liquid; //< non-null only when generating a mapblock
74
76 std::queue<v3s16> m_block_queue;
77
78 bool initScripting();
79
80 bool popBlockEmerge(v3s16 *pos, BlockEmergeData *bedata);
81
83 const v3s16 &pos, bool allow_gen, MapBlock **block, BlockMakeData *data);
85 std::map<v3s16, MapBlock *> *modified_blocks);
86
87 friend class EmergeManager;
88 friend class EmergeScripting;
89 friend class ModApiMapgen;
90};
91
92// Scoped helper to set Server::m_ignore_map_edit_events_area
94{
95public:
96 MapEditEventAreaIgnorer(VoxelArea *ignorevariable, const VoxelArea &a):
97 m_ignorevariable(ignorevariable)
98 {
99 if (m_ignorevariable->getVolume() == 0)
100 *m_ignorevariable = a;
101 else
102 m_ignorevariable = nullptr;
103 }
104
106 {
107 if (m_ignorevariable) {
108 assert(m_ignorevariable->getVolume() != 0);
110 }
111 }
112
113private:
115};
Definition: emerge.h:130
Definition: scripting_emerge.h:31
Definition: emerge_internal.h:40
bool enable_mapgen_debug_info
Definition: emerge_internal.h:42
UniqueQueue< v3s16 > * m_trans_liquid
Definition: emerge_internal.h:73
void signal()
Definition: emerge.cpp:463
void cancelPendingItems()
Definition: emerge.cpp:476
void runCompletionCallbacks(const v3s16 &pos, EmergeAction action, const EmergeCallbackList &callbacks)
Definition: emerge.cpp:494
void * run()
Definition: emerge.cpp:641
MapBlock * finishGen(v3s16 pos, BlockMakeData *bmdata, std::map< v3s16, MapBlock * > *modified_blocks)
Definition: emerge.cpp:553
EmergeAction getBlockOrStartGen(const v3s16 &pos, bool allow_gen, MapBlock **block, BlockMakeData *data)
Definition: emerge.cpp:527
~EmergeThread()=default
Event m_queue_event
Definition: emerge_internal.h:75
Mapgen * getMapgen()
Definition: emerge_internal.h:57
Mapgen * m_mapgen
Definition: emerge_internal.h:69
std::queue< v3s16 > m_block_queue
Definition: emerge_internal.h:76
ServerMap * m_map
Definition: emerge_internal.h:67
EmergeManager * getEmergeManager()
Definition: emerge_internal.h:56
int id
Definition: emerge_internal.h:43
bool pushBlock(const v3s16 &pos)
Definition: emerge.cpp:469
std::unique_ptr< EmergeScripting > m_script
Definition: emerge_internal.h:71
bool initScripting()
Definition: emerge.cpp:611
EmergeManager * m_emerge
Definition: emerge_internal.h:68
Server * m_server
Definition: emerge_internal.h:66
bool popBlockEmerge(v3s16 *pos, BlockEmergeData *bedata)
Definition: emerge.cpp:511
A syncronization primitive that will wake up one waiting thread when signaled.
Definition: event.h:37
Definition: mapblock.h:73
Definition: emerge_internal.h:94
MapEditEventAreaIgnorer(VoxelArea *ignorevariable, const VoxelArea &a)
Definition: emerge_internal.h:96
~MapEditEventAreaIgnorer()
Definition: emerge_internal.h:105
VoxelArea * m_ignorevariable
Definition: emerge_internal.h:114
Definition: mapgen.h:168
Definition: servermap.h:46
Definition: server.h:146
Definition: thread.h:57
Definition: container.h:41
Definition: voxel.h:59
s32 getVolume() const
Definition: voxel.h:140
std::vector< std::pair< EmergeCompletionCallback, void * > > EmergeCallbackList
Definition: emerge.h:90
EmergeAction
Definition: emerge.h:65
core::vector3d< s16 > v3s16
Definition: irr_v3d.h:28
Definition: activeobjectmgr.cpp:26
Definition: emerge.h:92
Definition: emerge.h:51
Definition: l_mapgen.cpp:42