<feed xmlns='http://www.w3.org/2005/Atom'>
<title>advtrains.git/advtrains/advtrains_luaautomation/active_common.lua, branch release-2.8.0</title>
<subtitle>Advtrains mod for minetest.</subtitle>
<id>http://git.bananach.space/advtrains.git/atom?h=release-2.8.0</id>
<link rel='self' href='http://git.bananach.space/advtrains.git/atom?h=release-2.8.0'/>
<link rel='alternate' type='text/html' href='http://git.bananach.space/advtrains.git/'/>
<updated>2017-09-20T16:05:04+00:00</updated>
<entry>
<title>Remove zip release files, move mod to root, exclude assets from Makefile (#92)</title>
<updated>2017-09-20T16:05:04+00:00</updated>
<author>
<name>rubenwardy</name>
<email>rubenwardy@gmail.com</email>
</author>
<published>2017-09-20T16:05:04+00:00</published>
<link rel='alternate' type='text/html' href='http://git.bananach.space/advtrains.git/commit/?id=d65c4916ceaeed6eec5fe3f344d4e71b3c96a80b'/>
<id>urn:sha1:d65c4916ceaeed6eec5fe3f344d4e71b3c96a80b</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Performance improvements: Don't clear paths unless absolutely necessary</title>
<updated>2017-05-03T14:31:13+00:00</updated>
<author>
<name>orwell96</name>
<email>mono96.mml@gmail.com</email>
</author>
<published>2017-05-03T14:31:13+00:00</published>
<link rel='alternate' type='text/html' href='http://git.bananach.space/advtrains.git/commit/?id=28717b4d65dc2e4080d5c7bde799fb4b87ef9a9d'/>
<id>urn:sha1:28717b4d65dc2e4080d5c7bde799fb4b87ef9a9d</id>
<content type='text'>
instead delete path elements that are too far from the train one-by-one
Also when switching a switch or changing rails, only clear train paths of trains that are nearby.
</content>
</entry>
<entry>
<title>Fix privilege enforcement being useless</title>
<updated>2017-03-16T21:04:32+00:00</updated>
<author>
<name>orwell96</name>
<email>mono96.mml@gmail.com</email>
</author>
<published>2017-03-16T21:04:32+00:00</published>
<link rel='alternate' type='text/html' href='http://git.bananach.space/advtrains.git/commit/?id=a091ac2e1da07b442c8f58237667287714adc838'/>
<id>urn:sha1:a091ac2e1da07b442c8f58237667287714adc838</id>
<content type='text'>
Privilege violations caused an error message but didn't abort the operation
</content>
</entry>
<entry>
<title>Check if node is actually loaded before querying get_meta()</title>
<updated>2017-02-05T21:54:31+00:00</updated>
<author>
<name>orwell96</name>
<email>mono96.mml@gmail.com</email>
</author>
<published>2017-02-05T21:54:31+00:00</published>
<link rel='alternate' type='text/html' href='http://git.bananach.space/advtrains.git/commit/?id=3f54727e4ff54c864ccffe6faeeec4fd089c14ca'/>
<id>urn:sha1:3f54727e4ff54c864ccffe6faeeec4fd089c14ca</id>
<content type='text'>
Known to cause a segfault in engine sometimes.
</content>
</entry>
<entry>
<title>Commit 1.6.2</title>
<updated>2017-02-04T17:35:34+00:00</updated>
<author>
<name>orwell96</name>
<email>mono96.mml@gmail.com</email>
</author>
<published>2017-02-04T17:35:34+00:00</published>
<link rel='alternate' type='text/html' href='http://git.bananach.space/advtrains.git/commit/?id=61e48fff280075ec52bfaa31644c22b08814d680'/>
<id>urn:sha1:61e48fff280075ec52bfaa31644c22b08814d680</id>
<content type='text'>
- Add some more stuff to API for LuaATC rails
- Warn on strange events even if debug info is disabled
- save atlatc on shutdown too
- fix detector rails in unloaded chunks
- do not fail silently in simple ATC rails
</content>
</entry>
<entry>
<title>Revert change to node pos hashes, and rewrite trackdb to use individual coordinates</title>
<updated>2017-02-03T19:40:30+00:00</updated>
<author>
<name>orwell96</name>
<email>mono96.mml@gmail.com</email>
</author>
<published>2017-02-03T19:40:30+00:00</published>
<link rel='alternate' type='text/html' href='http://git.bananach.space/advtrains.git/commit/?id=328d5054a105869c7e12df1941ceedb308ef1faa'/>
<id>urn:sha1:328d5054a105869c7e12df1941ceedb308ef1faa</id>
<content type='text'>
The precision of integers was not sufficient for saving pos node hashes in most cases, leading to strange bugs.
This fixes broken ATC rails, broken LuaAutomation stuff and trackdb on Windows.
Probably also fixes trains randomly stopping.
</content>
</entry>
<entry>
<title>LuaAutomation: Add interrupt to the ingame API and implement initialization code handling and env management</title>
<updated>2017-02-02T20:14:20+00:00</updated>
<author>
<name>orwell96</name>
<email>mono96.mml@gmail.com</email>
</author>
<published>2017-02-02T20:14:20+00:00</published>
<link rel='alternate' type='text/html' href='http://git.bananach.space/advtrains.git/commit/?id=948482a99e4aae4d51ff97879432140645959f46'/>
<id>urn:sha1:948482a99e4aae4d51ff97879432140645959f46</id>
<content type='text'>
</content>
</entry>
<entry>
<title>LuaAutomation - Basic component implementation</title>
<updated>2017-02-02T16:17:39+00:00</updated>
<author>
<name>orwell96</name>
<email>mono96.mml@gmail.com</email>
</author>
<published>2017-02-02T15:40:51+00:00</published>
<link rel='alternate' type='text/html' href='http://git.bananach.space/advtrains.git/commit/?id=b19033b224f4f8ec33f10ba40327f1d811c04fbb'/>
<id>urn:sha1:b19033b224f4f8ec33f10ba40327f1d811c04fbb</id>
<content type='text'>
Implements the base code for LuaAutomation, an ATC rail and a punch-operated 'operation panel' as well as interface for passive components.
Changes in advtrains code where neccessary.
Supported passive components are light signals, switches and mesecon switches
</content>
</entry>
</feed>
'>83</a>
<a id='n84' href='#n84'>84</a>
<a id='n85' href='#n85'>85</a>
<a id='n86' href='#n86'>86</a>
<a id='n87' href='#n87'>87</a>
<a id='n88' href='#n88'>88</a>
<a id='n89' href='#n89'>89</a>
<a id='n90' href='#n90'>90</a>
<a id='n91' href='#n91'>91</a>
<a id='n92' href='#n92'>92</a>
<a id='n93' href='#n93'>93</a>
<a id='n94' href='#n94'>94</a>
<a id='n95' href='#n95'>95</a>
<a id='n96' href='#n96'>96</a>
<a id='n97' href='#n97'>97</a>
<a id='n98' href='#n98'>98</a>
<a id='n99' href='#n99'>99</a>
<a id='n100' href='#n100'>100</a>
<a id='n101' href='#n101'>101</a>
<a id='n102' href='#n102'>102</a>
<a id='n103' href='#n103'>103</a>
<a id='n104' href='#n104'>104</a>
<a id='n105' href='#n105'>105</a>
<a id='n106' href='#n106'>106</a>
<a id='n107' href='#n107'>107</a>
<a id='n108' href='#n108'>108</a>
<a id='n109' href='#n109'>109</a>
<a id='n110' href='#n110'>110</a>
<a id='n111' href='#n111'>111</a>
<a id='n112' href='#n112'>112</a>
<a id='n113' href='#n113'>113</a>
<a id='n114' href='#n114'>114</a>
<a id='n115' href='#n115'>115</a>
<a id='n116' href='#n116'>116</a>
<a id='n117' href='#n117'>117</a>
<a id='n118' href='#n118'>118</a>
<a id='n119' href='#n119'>119</a>
<a id='n120' href='#n120'>120</a>
<a id='n121' href='#n121'>121</a>
<a id='n122' href='#n122'>122</a>
<a id='n123' href='#n123'>123</a>
<a id='n124' href='#n124'>124</a>
<a id='n125' href='#n125'>125</a>
<a id='n126' href='#n126'>126</a>
<a id='n127' href='#n127'>127</a>
<a id='n128' href='#n128'>128</a>
<a id='n129' href='#n129'>129</a>
<a id='n130' href='#n130'>130</a>
<a id='n131' href='#n131'>131</a>
<a id='n132' href='#n132'>132</a>
<a id='n133' href='#n133'>133</a>
<a id='n134' href='#n134'>134</a>
<a id='n135' href='#n135'>135</a>
<a id='n136' href='#n136'>136</a>
<a id='n137' href='#n137'>137</a>
<a id='n138' href='#n138'>138</a>
<a id='n139' href='#n139'>139</a>
<a id='n140' href='#n140'>140</a>
<a id='n141' href='#n141'>141</a>
<a id='n142' href='#n142'>142</a>
<a id='n143' href='#n143'>143</a>
<a id='n144' href='#n144'>144</a>
<a id='n145' href='#n145'>145</a>
<a id='n146' href='#n146'>146</a>
<a id='n147' href='#n147'>147</a>
<a id='n148' href='#n148'>148</a>
<a id='n149' href='#n149'>149</a>
<a id='n150' href='#n150'>150</a>
<a id='n151' href='#n151'>151</a>
<a id='n152' href='#n152'>152</a>
<a id='n153' href='#n153'>153</a>
<a id='n154' href='#n154'>154</a>
<a id='n155' href='#n155'>155</a>
<a id='n156' href='#n156'>156</a>
<a id='n157' href='#n157'>157</a>
<a id='n158' href='#n158'>158</a>
<a id='n159' href='#n159'>159</a>
<a id='n160' href='#n160'>160</a>
<a id='n161' href='#n161'>161</a>
<a id='n162' href='#n162'>162</a>
<a id='n163' href='#n163'>163</a>
<a id='n164' href='#n164'>164</a>
<a id='n165' href='#n165'>165</a>
<a id='n166' href='#n166'>166</a>
<a id='n167' href='#n167'>167</a>
<a id='n168' href='#n168'>168</a>
<a id='n169' href='#n169'>169</a>
<a id='n170' href='#n170'>170</a>
<a id='n171' href='#n171'>171</a>
<a id='n172' href='#n172'>172</a>
<a id='n173' href='#n173'>173</a>
<a id='n174' href='#n174'>174</a>
<a id='n175' href='#n175'>175</a>
<a id='n176' href='#n176'>176</a>
<a id='n177' href='#n177'>177</a>
<a id='n178' href='#n178'>178</a>
<a id='n179' href='#n179'>179</a>
<a id='n180' href='#n180'>180</a>
<a id='n181' href='#n181'>181</a>
<a id='n182' href='#n182'>182</a>
<a id='n183' href='#n183'>183</a>
<a id='n184' href='#n184'>184</a>
<a id='n185' href='#n185'>185</a>
<a id='n186' href='#n186'>186</a>
<a id='n187' href='#n187'>187</a>
<a id='n188' href='#n188'>188</a>
<a id='n189' href='#n189'>189</a>
<a id='n190' href='#n190'>190</a>
<a id='n191' href='#n191'>191</a>
<a id='n192' href='#n192'>192</a>
<a id='n193' href='#n193'>193</a>
<a id='n194' href='#n194'>194</a>
<a id='n195' href='#n195'>195</a>
<a id='n196' href='#n196'>196</a>
<a id='n197' href='#n197'>197</a>
<a id='n198' href='#n198'>198</a>
<a id='n199' href='#n199'>199</a>
<a id='n200' href='#n200'>200</a>
<a id='n201' href='#n201'>201</a>
<a id='n202' href='#n202'>202</a>
<a id='n203' href='#n203'>203</a>
<a id='n204' href='#n204'>204</a>
<a id='n205' href='#n205'>205</a>
<a id='n206' href='#n206'>206</a>
<a id='n207' href='#n207'>207</a>
<a id='n208' href='#n208'>208</a>
<a id='n209' href='#n209'>209</a>
<a id='n210' href='#n210'>210</a>
<a id='n211' href='#n211'>211</a>
<a id='n212' href='#n212'>212</a>
<a id='n213' href='#n213'>213</a>
<a id='n214' href='#n214'>214</a>
<a id='n215' href='#n215'>215</a>
<a id='n216' href='#n216'>216</a>
<a id='n217' href='#n217'>217</a>
<a id='n218' href='#n218'>218</a>
<a id='n219' href='#n219'>219</a>
<a id='n220' href='#n220'>220</a>
<a id='n221' href='#n221'>221</a>
<a id='n222' href='#n222'>222</a>
<a id='n223' href='#n223'>223</a>
<a id='n224' href='#n224'>224</a>
<a id='n225' href='#n225'>225</a>
<a id='n226' href='#n226'>226</a>
<a id='n227' href='#n227'>227</a>
<a id='n228' href='#n228'>228</a>
<a id='n229' href='#n229'>229</a>
<a id='n230' href='#n230'>230</a>
<a id='n231' href='#n231'>231</a>
<a id='n232' href='#n232'>232</a>
<a id='n233' href='#n233'>233</a>
<a id='n234' href='#n234'>234</a>
<a id='n235' href='#n235'>235</a>
<a id='n236' href='#n236'>236</a>
<a id='n237' href='#n237'>237</a>
<a id='n238' href='#n238'>238</a>
<a id='n239' href='#n239'>239</a>
<a id='n240' href='#n240'>240</a>
<a id='n241' href='#n241'>241</a>
<a id='n242' href='#n242'>242</a>
<a id='n243' href='#n243'>243</a>
<a id='n244' href='#n244'>244</a>
<a id='n245' href='#n245'>245</a>
<a id='n246' href='#n246'>246</a>
<a id='n247' href='#n247'>247</a>
<a id='n248' href='#n248'>248</a>
<a id='n249' href='#n249'>249</a>
<a id='n250' href='#n250'>250</a>
<a id='n251' href='#n251'>251</a>
<a id='n252' href='#n252'>252</a>
<a id='n253' href='#n253'>253</a>
<a id='n254' href='#n254'>254</a>
<a id='n255' href='#n255'>255</a>
<a id='n256' href='#n256'>256</a>
<a id='n257' href='#n257'>257</a>
<a id='n258' href='#n258'>258</a>
<a id='n259' href='#n259'>259</a>
<a id='n260' href='#n260'>260</a>
<a id='n261' href='#n261'>261</a>
<a id='n262' href='#n262'>262</a>
<a id='n263' href='#n263'>263</a>
<a id='n264' href='#n264'>264</a>
<a id='n265' href='#n265'>265</a>
<a id='n266' href='#n266'>266</a>
<a id='n267' href='#n267'>267</a>
<a id='n268' href='#n268'>268</a>
<a id='n269' href='#n269'>269</a>
<a id='n270' href='#n270'>270</a>
<a id='n271' href='#n271'>271</a>
<a id='n272' href='#n272'>272</a>
<a id='n273' href='#n273'>273</a>
<a id='n274' href='#n274'>274</a>
<a id='n275' href='#n275'>275</a>
<a id='n276' href='#n276'>276</a>
<a id='n277' href='#n277'>277</a>
<a id='n278' href='#n278'>278</a>
<a id='n279' href='#n279'>279</a>
<a id='n280' href='#n280'>280</a>
<a id='n281' href='#n281'>281</a>
<a id='n282' href='#n282'>282</a>
<a id='n283' href='#n283'>283</a>
<a id='n284' href='#n284'>284</a>
<a id='n285' href='#n285'>285</a>
<a id='n286' href='#n286'>286</a>
<a id='n287' href='#n287'>287</a>
<a id='n288' href='#n288'>288</a>
<a id='n289' href='#n289'>289</a>
<a id='n290' href='#n290'>290</a>
<a id='n291' href='#n291'>291</a>
<a id='n292' href='#n292'>292</a>
<a id='n293' href='#n293'>293</a>
<a id='n294' href='#n294'>294</a>
<a id='n295' href='#n295'>295</a>
<a id='n296' href='#n296'>296</a>
<a id='n297' href='#n297'>297</a>
<a id='n298' href='#n298'>298</a>
<a id='n299' href='#n299'>299</a>
<a id='n300' href='#n300'>300</a>
<a id='n301' href='#n301'>301</a>
<a id='n302' href='#n302'>302</a>
<a id='n303' href='#n303'>303</a>
<a id='n304' href='#n304'>304</a>
<a id='n305' href='#n305'>305</a>
<a id='n306' href='#n306'>306</a>
<a id='n307' href='#n307'>307</a>
<a id='n308' href='#n308'>308</a>
<a id='n309' href='#n309'>309</a>
<a id='n310' href='#n310'>310</a>
<a id='n311' href='#n311'>311</a>
<a id='n312' href='#n312'>312</a>
<a id='n313' href='#n313'>313</a>
<a id='n314' href='#n314'>314</a>
<a id='n315' href='#n315'>315</a>
<a id='n316' href='#n316'>316</a>
<a id='n317' href='#n317'>317</a>
<a id='n318' href='#n318'>318</a>
<a id='n319' href='#n319'>319</a>
<a id='n320' href='#n320'>320</a>
</pre></td>
<td class='lines'><pre><code><span class="hl com">/*</span>
<span class="hl com">Minetest</span>
<span class="hl com">Copyright (C) 2013 celeron55, Perttu Ahola &lt;celeron55&#64;gmail.com&gt;</span>
<span class="hl com"></span>
<span class="hl com">This program is free software; you can redistribute it and/or modify</span>
<span class="hl com">it under the terms of the GNU Lesser General Public License as published by</span>
<span class="hl com">the Free Software Foundation; either version 2.1 of the License, or</span>
<span class="hl com">(at your option) any later version.</span>
<span class="hl com"></span>
<span class="hl com">This program is distributed in the hope that it will be useful,</span>
<span class="hl com">but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<span class="hl com">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
<span class="hl com">GNU Lesser General Public License for more details.</span>
<span class="hl com"></span>
<span class="hl com">You should have received a copy of the GNU Lesser General Public License along</span>
<span class="hl com">with this program; if not, write to the Free Software Foundation, Inc.,</span>
<span class="hl com">51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.</span>
<span class="hl com">*/</span>

<span class="hl ppc">#include</span> <span class="hl pps">&quot;voxel.h&quot;</span><span class="hl ppc"></span>
<span class="hl ppc">#include</span> <span class="hl pps">&quot;map.h&quot;</span><span class="hl ppc"></span>
<span class="hl ppc">#include</span> <span class="hl pps">&quot;gettime.h&quot;</span><span class="hl ppc"></span>
<span class="hl ppc">#include</span> <span class="hl pps">&quot;nodedef.h&quot;</span><span class="hl ppc"></span>
<span class="hl ppc">#include</span> <span class="hl pps">&quot;util/directiontables.h&quot;</span><span class="hl ppc"></span>
<span class="hl ppc">#include</span> <span class="hl pps">&quot;util/timetaker.h&quot;</span><span class="hl ppc"></span>
<span class="hl ppc">#include &lt;cstring&gt;</span>  <span class="hl slc">// memcpy, memset</span>
<span class="hl ppc"></span>
<span class="hl com">/*</span>
<span class="hl com">	Debug stuff</span>
<span class="hl com">*/</span>
u64 addarea_time <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span>
u64 emerge_time <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span>
u64 emerge_load_time <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span>
u64 clearflag_time <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span>

<span class="hl kwc">VoxelManipulator</span><span class="hl opt">::~</span><span class="hl kwd">VoxelManipulator</span><span class="hl opt">()</span>
<span class="hl opt">{</span>
	<span class="hl kwd">clear</span><span class="hl opt">();</span>
<span class="hl opt">}</span>

<span class="hl kwb">void</span> <span class="hl kwc">VoxelManipulator</span><span class="hl opt">::</span><span class="hl kwd">clear</span><span class="hl opt">()</span>
<span class="hl opt">{</span>
	<span class="hl slc">// Reset area to volume=0</span>
	m_area <span class="hl opt">=</span> <span class="hl kwd">VoxelArea</span><span class="hl opt">();</span>
	<span class="hl kwa">delete</span><span class="hl opt">[]</span> m_data<span class="hl opt">;</span>
	m_data <span class="hl opt">=</span> <span class="hl kwc">nullptr</span><span class="hl opt">;</span>
	<span class="hl kwa">delete</span><span class="hl opt">[]</span> m_flags<span class="hl opt">;</span>
	m_flags <span class="hl opt">=</span> <span class="hl kwc">nullptr</span><span class="hl opt">;</span>
<span class="hl opt">}</span>

<span class="hl kwb">void</span> <span class="hl kwc">VoxelManipulator</span><span class="hl opt">::</span><span class="hl kwd">print</span><span class="hl opt">(</span><span class="hl kwc">std</span><span class="hl opt">::</span>ostream <span class="hl opt">&amp;</span>o<span class="hl opt">,</span> <span class="hl kwb">const</span> NodeDefManager <span class="hl opt">*</span>ndef<span class="hl opt">,</span>
	VoxelPrintMode mode<span class="hl opt">)</span>
<span class="hl opt">{</span>
	<span class="hl kwb">const</span> v3s16 <span class="hl opt">&amp;</span>em <span class="hl opt">=</span> m_area<span class="hl opt">.</span><span class="hl kwd">getExtent</span><span class="hl opt">();</span>
	v3s16 of <span class="hl opt">=</span> m_area<span class="hl opt">.</span>MinEdge<span class="hl opt">;</span>
	o<span class="hl opt">&lt;&lt;</span><span class="hl str">&quot;size: &quot;</span><span class="hl opt">&lt;&lt;</span>em<span class="hl opt">.</span>X<span class="hl opt">&lt;&lt;</span><span class="hl str">&quot;x&quot;</span><span class="hl opt">&lt;&lt;</span>em<span class="hl opt">.</span>Y<span class="hl opt">&lt;&lt;</span><span class="hl str">&quot;x&quot;</span><span class="hl opt">&lt;&lt;</span>em<span class="hl opt">.</span>Z
	 <span class="hl opt">&lt;&lt;</span><span class="hl str">&quot; offset: (&quot;</span><span class="hl opt">&lt;&lt;</span>of<span class="hl opt">.</span>X<span class="hl opt">&lt;&lt;</span><span class="hl str">&quot;,&quot;</span><span class="hl opt">&lt;&lt;</span>of<span class="hl opt">.</span>Y<span class="hl opt">&lt;&lt;</span><span class="hl str">&quot;,&quot;</span><span class="hl opt">&lt;&lt;</span>of<span class="hl opt">.</span>Z<span class="hl opt">&lt;&lt;</span><span class="hl str">&quot;)&quot;</span><span class="hl opt">&lt;&lt;</span><span class="hl kwc">std</span><span class="hl opt">::</span>endl<span class="hl opt">;</span>

	<span class="hl kwa">for</span><span class="hl opt">(</span>s32 y<span class="hl opt">=</span>m_area<span class="hl opt">.</span>MaxEdge<span class="hl opt">.</span>Y<span class="hl opt">;</span> y<span class="hl opt">&gt;=</span>m_area<span class="hl opt">.</span>MinEdge<span class="hl opt">.</span>Y<span class="hl opt">;</span> y<span class="hl opt">--)</span>
	<span class="hl opt">{</span>
		<span class="hl kwa">if</span><span class="hl opt">(</span>em<span class="hl opt">.</span>X <span class="hl opt">&gt;=</span> <span class="hl num">3</span> <span class="hl opt">&amp;&amp;</span> em<span class="hl opt">.</span>Y <span class="hl opt">&gt;=</span> <span class="hl num">3</span><span class="hl opt">)</span>
		<span class="hl opt">{</span>
			<span class="hl kwa">if</span>     <span class="hl opt">(</span>y<span class="hl opt">==</span>m_area<span class="hl opt">.</span>MinEdge<span class="hl opt">.</span>Y<span class="hl opt">+</span><span class="hl num">2</span><span class="hl opt">)</span> o<span class="hl opt">&lt;&lt;</span><span class="hl str">&quot;^     &quot;</span><span class="hl opt">;</span>
			<span class="hl kwa">else if</span><span class="hl opt">(</span>y<span class="hl opt">==</span>m_area<span class="hl opt">.</span>MinEdge<span class="hl opt">.</span>Y<span class="hl opt">+</span><span class="hl num">1</span><span class="hl opt">)</span> o<span class="hl opt">&lt;&lt;</span><span class="hl str">&quot;|     &quot;</span><span class="hl opt">;</span>
			<span class="hl kwa">else if</span><span class="hl opt">(</span>y<span class="hl opt">==</span>m_area<span class="hl opt">.</span>MinEdge<span class="hl opt">.</span>Y<span class="hl opt">+</span><span class="hl num">0</span><span class="hl opt">)</span> o<span class="hl opt">&lt;&lt;</span><span class="hl str">&quot;y x-&gt; &quot;</span><span class="hl opt">;</span>
			<span class="hl kwa">else</span>                           o<span class="hl opt">&lt;&lt;</span><span class="hl str">&quot;      &quot;</span><span class="hl opt">;</span>
		<span class="hl opt">}</span>

		<span class="hl kwa">for</span><span class="hl opt">(</span>s32 z<span class="hl opt">=</span>m_area<span class="hl opt">.</span>MinEdge<span class="hl opt">.</span>Z<span class="hl opt">;</span> z<span class="hl opt">&lt;=</span>m_area<span class="hl opt">.</span>MaxEdge<span class="hl opt">.</span>Z<span class="hl opt">;</span> z<span class="hl opt">++)</span>
		<span class="hl opt">{</span>
			<span class="hl kwa">for</span><span class="hl opt">(</span>s32 x<span class="hl opt">=</span>m_area<span class="hl opt">.</span>MinEdge<span class="hl opt">.</span>X<span class="hl opt">;</span> x<span class="hl opt">&lt;=</span>m_area<span class="hl opt">.</span>MaxEdge<span class="hl opt">.</span>X<span class="hl opt">;</span> x<span class="hl opt">++)</span>
			<span class="hl opt">{</span>
				u8 f <span class="hl opt">=</span> m_flags<span class="hl opt">[</span>m_area<span class="hl opt">.</span><span class="hl kwd">index</span><span class="hl opt">(</span>x<span class="hl opt">,</span>y<span class="hl opt">,</span>z<span class="hl opt">)];</span>
				<span class="hl kwb">char</span> c<span class="hl opt">;</span>
				<span class="hl kwa">if</span><span class="hl opt">(</span>f <span class="hl opt">&amp;</span> VOXELFLAG_NO_DATA<span class="hl opt">)</span>
					c <span class="hl opt">=</span> <span class="hl str">&apos;N&apos;</span><span class="hl opt">;</span>
				<span class="hl kwa">else</span>
				<span class="hl opt">{</span>
					c <span class="hl opt">=</span> <span class="hl str">&apos;X&apos;</span><span class="hl opt">;</span>
					MapNode n <span class="hl opt">=</span> m_data<span class="hl opt">[</span>m_area<span class="hl opt">.</span><span class="hl kwd">index</span><span class="hl opt">(</span>x<span class="hl opt">,</span>y<span class="hl opt">,</span>z<span class="hl opt">)];</span>
					content_t m <span class="hl opt">=</span> n<span class="hl opt">.</span><span class="hl kwd">getContent</span><span class="hl opt">();</span>
					u8 pr <span class="hl opt">=</span> n<span class="hl opt">.</span>param2<span class="hl opt">;</span>
					<span class="hl kwa">if</span><span class="hl opt">(</span>mode <span class="hl opt">==</span> VOXELPRINT_MATERIAL<span class="hl opt">)</span>
					<span class="hl opt">{</span>
						<span class="hl kwa">if</span><span class="hl opt">(</span>m <span class="hl opt">&lt;=</span> <span class="hl num">9</span><span class="hl opt">)</span>
							c <span class="hl opt">=</span> m <span class="hl opt">+</span> <span class="hl str">&apos;0&apos;</span><span class="hl opt">;</span>
					<span class="hl opt">}</span>
					<span class="hl kwa">else if</span><span class="hl opt">(</span>mode <span class="hl opt">==</span> VOXELPRINT_WATERPRESSURE<span class="hl opt">)</span>
					<span class="hl opt">{</span>
						<span class="hl kwa">if</span><span class="hl opt">(</span>ndef<span class="hl opt">-&gt;</span><span class="hl kwd">get</span><span class="hl opt">(</span>m<span class="hl opt">).</span><span class="hl kwd">isLiquid</span><span class="hl opt">())</span>
						<span class="hl opt">{</span>
							c <span class="hl opt">=</span> <span class="hl str">&apos;w&apos;</span><span class="hl opt">;</span>
							<span class="hl kwa">if</span><span class="hl opt">(</span>pr <span class="hl opt">&lt;=</span> <span class="hl num">9</span><span class="hl opt">)</span>
								c <span class="hl opt">=</span> pr <span class="hl opt">+</span> <span class="hl str">&apos;0&apos;</span><span class="hl opt">;</span>
						<span class="hl opt">}</span>
						<span class="hl kwa">else if</span><span class="hl opt">(</span>m <span class="hl opt">==</span> CONTENT_AIR<span class="hl opt">)</span>
						<span class="hl opt">{</span>
							c <span class="hl opt">=</span> <span class="hl str">&apos; &apos;</span><span class="hl opt">;</span>
						<span class="hl opt">}</span>
						<span class="hl kwa">else</span>
						<span class="hl opt">{</span>
							c <span class="hl opt">=</span> <span class="hl str">&apos;#&apos;</span><span class="hl opt">;</span>
						<span class="hl opt">}</span>
					<span class="hl opt">}</span>
					<span class="hl kwa">else if</span><span class="hl opt">(</span>mode <span class="hl opt">==</span> VOXELPRINT_LIGHT_DAY<span class="hl opt">)</span>
					<span class="hl opt">{</span>
						<span class="hl kwa">if</span><span class="hl opt">(</span>ndef<span class="hl opt">-&gt;</span><span class="hl kwd">get</span><span class="hl opt">(</span>m<span class="hl opt">).</span>light_source <span class="hl opt">!=</span> <span class="hl num">0</span><span class="hl opt">)</span>
							c <span class="hl opt">=</span> <span class="hl str">&apos;S&apos;</span><span class="hl opt">;</span>
						<span class="hl kwa">else if</span><span class="hl opt">(!</span>ndef<span class="hl opt">-&gt;</span><span class="hl kwd">get</span><span class="hl opt">(</span>m<span class="hl opt">).</span>light_propagates<span class="hl opt">)</span>
							c <span class="hl opt">=</span> <span class="hl str">&apos;X&apos;</span><span class="hl opt">;</span>
						<span class="hl kwa">else</span>
						<span class="hl opt">{</span>
							u8 light <span class="hl opt">=</span> n<span class="hl opt">.</span><span class="hl kwd">getLight</span><span class="hl opt">(</span>LIGHTBANK_DAY<span class="hl opt">,</span> ndef<span class="hl opt">);</span>
							<span class="hl kwa">if</span><span class="hl opt">(</span>light <span class="hl opt">&lt;</span> <span class="hl num">10</span><span class="hl opt">)</span>
								c <span class="hl opt">=</span> <span class="hl str">&apos;0&apos;</span> <span class="hl opt">+</span> light<span class="hl opt">;</span>
							<span class="hl kwa">else</span>
								c <span class="hl opt">=</span> <span class="hl str">&apos;a&apos;</span> <span class="hl opt">+ (</span>light<span class="hl opt">-</span><span class="hl num">10</span><span class="hl opt">);</span>
						<span class="hl opt">}</span>
					<span class="hl opt">}</span>
				<span class="hl opt">}</span>
				o<span class="hl opt">&lt;&lt;</span>c<span class="hl opt">;</span>
			<span class="hl opt">}</span>
			o<span class="hl opt">&lt;&lt;</span><span class="hl str">&apos; &apos;</span><span class="hl opt">;</span>
		<span class="hl opt">}</span>
		o<span class="hl opt">&lt;&lt;</span><span class="hl kwc">std</span><span class="hl opt">::</span>endl<span class="hl opt">;</span>
	<span class="hl opt">}</span>
<span class="hl opt">}</span>

<span class="hl kwb">void</span> <span class="hl kwc">VoxelManipulator</span><span class="hl opt">::</span><span class="hl kwd">addArea</span><span class="hl opt">(</span><span class="hl kwb">const</span> VoxelArea <span class="hl opt">&amp;</span>area<span class="hl opt">)</span>
<span class="hl opt">{</span>
	<span class="hl slc">// Cancel if requested area has zero volume</span>
	<span class="hl kwa">if</span> <span class="hl opt">(</span>area<span class="hl opt">.</span><span class="hl kwd">hasEmptyExtent</span><span class="hl opt">())</span>
		<span class="hl kwa">return</span><span class="hl opt">;</span>

	<span class="hl slc">// Cancel if m_area already contains the requested area</span>
	<span class="hl kwa">if</span><span class="hl opt">(</span>m_area<span class="hl opt">.</span><span class="hl kwd">contains</span><span class="hl opt">(</span>area<span class="hl opt">))</span>
		<span class="hl kwa">return</span><span class="hl opt">;</span>

	TimeTaker <span class="hl kwd">timer</span><span class="hl opt">(</span><span class="hl str">&quot;addArea&quot;</span><span class="hl opt">, &amp;</span>addarea_time<span class="hl opt">);</span>

	<span class="hl slc">// Calculate new area</span>
	VoxelArea new_area<span class="hl opt">;</span>
	<span class="hl slc">// New area is the requested area if m_area has zero volume</span>
	<span class="hl kwa">if</span><span class="hl opt">(</span>m_area<span class="hl opt">.</span><span class="hl kwd">hasEmptyExtent</span><span class="hl opt">())</span>
	<span class="hl opt">{</span>
		new_area <span class="hl opt">=</span> area<span class="hl opt">;</span>
	<span class="hl opt">}</span>
	<span class="hl slc">// Else add requested area to m_area</span>
	<span class="hl kwa">else</span>
	<span class="hl opt">{</span>
		new_area <span class="hl opt">=</span> m_area<span class="hl opt">;</span>
		new_area<span class="hl opt">.</span><span class="hl kwd">addArea</span><span class="hl opt">(</span>area<span class="hl opt">);</span>
	<span class="hl opt">}</span>

	s32 new_size <span class="hl opt">=</span> new_area<span class="hl opt">.</span><span class="hl kwd">getVolume</span><span class="hl opt">();</span>

	<span class="hl com">/*dstream&lt;&lt;&quot;adding area &quot;;</span>
<span class="hl com">	area.print(dstream);</span>
<span class="hl com">	dstream&lt;&lt;&quot;, old area &quot;;</span>
<span class="hl com">	m_area.print(dstream);</span>
<span class="hl com">	dstream&lt;&lt;&quot;, new area &quot;;</span>
<span class="hl com">	new_area.print(dstream);</span>
<span class="hl com">	dstream&lt;&lt;&quot;, new_size=&quot;&lt;&lt;new_size;</span>
<span class="hl com">	dstream&lt;&lt;std::endl;*/</span>

	<span class="hl slc">// Allocate new data and clear flags</span>
	MapNode <span class="hl opt">*</span>new_data <span class="hl opt">=</span> <span class="hl kwa">new</span> MapNode<span class="hl opt">[</span>new_size<span class="hl opt">];</span>
	<span class="hl kwa">assert</span><span class="hl opt">(</span>new_data<span class="hl opt">);</span>
	u8 <span class="hl opt">*</span>new_flags <span class="hl opt">=</span> <span class="hl kwa">new</span> u8<span class="hl opt">[</span>new_size<span class="hl opt">];</span>
	<span class="hl kwa">assert</span><span class="hl opt">(</span>new_flags<span class="hl opt">);</span>
	<span class="hl kwd">memset</span><span class="hl opt">(</span>new_flags<span class="hl opt">,</span> VOXELFLAG_NO_DATA<span class="hl opt">,</span> new_size<span class="hl opt">);</span>

	<span class="hl slc">// Copy old data</span>
	s32 old_x_width <span class="hl opt">=</span> m_area<span class="hl opt">.</span>MaxEdge<span class="hl opt">.</span>X <span class="hl opt">-</span> m_area<span class="hl opt">.</span>MinEdge<span class="hl opt">.</span>X <span class="hl opt">+</span> <span class="hl num">1</span><span class="hl opt">;</span>
	<span class="hl kwa">for</span><span class="hl opt">(</span>s32 z<span class="hl opt">=</span>m_area<span class="hl opt">.</span>MinEdge<span class="hl opt">.</span>Z<span class="hl opt">;</span> z<span class="hl opt">&lt;=</span>m_area<span class="hl opt">.</span>MaxEdge<span class="hl opt">.</span>Z<span class="hl opt">;</span> z<span class="hl opt">++)</span>
	<span class="hl kwa">for</span><span class="hl opt">(</span>s32 y<span class="hl opt">=</span>m_area<span class="hl opt">.</span>MinEdge<span class="hl opt">.</span>Y<span class="hl opt">;</span> y<span class="hl opt">&lt;=</span>m_area<span class="hl opt">.</span>MaxEdge<span class="hl opt">.</span>Y<span class="hl opt">;</span> y<span class="hl opt">++)</span>
	<span class="hl opt">{</span>
		<span class="hl kwb">unsigned int</span> old_index <span class="hl opt">=</span> m_area<span class="hl opt">.</span><span class="hl kwd">index</span><span class="hl opt">(</span>m_area<span class="hl opt">.</span>MinEdge<span class="hl opt">.</span>X<span class="hl opt">,</span>y<span class="hl opt">,</span>z<span class="hl opt">);</span>
		<span class="hl kwb">unsigned int</span> new_index <span class="hl opt">=</span> new_area<span class="hl opt">.</span><span class="hl kwd">index</span><span class="hl opt">(</span>m_area<span class="hl opt">.</span>MinEdge<span class="hl opt">.</span>X<span class="hl opt">,</span>y<span class="hl opt">,</span>z<span class="hl opt">);</span>

		<span class="hl kwd">memcpy</span><span class="hl opt">(&amp;</span>new_data<span class="hl opt">[</span>new_index<span class="hl opt">], &amp;</span>m_data<span class="hl opt">[</span>old_index<span class="hl opt">],</span>
				old_x_width <span class="hl opt">*</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>MapNode<span class="hl opt">));</span>
		<span class="hl kwd">memcpy</span><span class="hl opt">(&amp;</span>new_flags<span class="hl opt">[</span>new_index<span class="hl opt">], &amp;</span>m_flags<span class="hl opt">[</span>old_index<span class="hl opt">],</span>
				old_x_width <span class="hl opt">*</span> <span class="hl kwa">sizeof</span><span class="hl opt">(</span>u8<span class="hl opt">));</span>
	<span class="hl opt">}</span>

	<span class="hl slc">// Replace area, data and flags</span>

	m_area <span class="hl opt">=</span> new_area<span class="hl opt">;</span>

	MapNode <span class="hl opt">*</span>old_data <span class="hl opt">=</span> m_data<span class="hl opt">;</span>
	u8 <span class="hl opt">*</span>old_flags <span class="hl opt">=</span> m_flags<span class="hl opt">;</span>

	<span class="hl com">/*dstream&lt;&lt;&quot;old_data=&quot;&lt;&lt;(int)old_data&lt;&lt;&quot;, new_data=&quot;&lt;&lt;(int)new_data</span>
<span class="hl com">	&lt;&lt;&quot;, old_flags=&quot;&lt;&lt;(int)m_flags&lt;&lt;&quot;, new_flags=&quot;&lt;&lt;(int)new_flags&lt;&lt;std::endl;*/</span>

	m_data <span class="hl opt">=</span> new_data<span class="hl opt">;</span>
	m_flags <span class="hl opt">=</span> new_flags<span class="hl opt">;</span>

	<span class="hl kwa">delete</span><span class="hl opt">[]</span> old_data<span class="hl opt">;</span>
	<span class="hl kwa">delete</span><span class="hl opt">[]</span> old_flags<span class="hl opt">;</span>

	<span class="hl slc">//dstream&lt;&lt;&quot;addArea done&quot;&lt;&lt;std::endl;</span>
<span class="hl opt">}</span>

<span class="hl kwb">void</span> <span class="hl kwc">VoxelManipulator</span><span class="hl opt">::</span><span class="hl kwd">copyFrom</span><span class="hl opt">(</span>MapNode <span class="hl opt">*</span>src<span class="hl opt">,</span> <span class="hl kwb">const</span> VoxelArea<span class="hl opt">&amp;</span> src_area<span class="hl opt">,</span>
		v3s16 from_pos<span class="hl opt">,</span> v3s16 to_pos<span class="hl opt">,</span> <span class="hl kwb">const</span> v3s16 <span class="hl opt">&amp;</span>size<span class="hl opt">)</span>
<span class="hl opt">{</span>
	<span class="hl com">/* The reason for this optimised code is that we&apos;re a member function</span>
<span class="hl com">	 * and the data type/layout of m_data is know to us: it&apos;s stored as</span>
<span class="hl com">	 * [z*h*w + y*h + x]. Therefore we can take the calls to m_area index</span>
<span class="hl com">	 * (which performs the preceding mapping/indexing of m_data) out of the</span>
<span class="hl com">	 * inner loop and calculate the next index as we&apos;re iterating to gain</span>
<span class="hl com">	 * performance.</span>
<span class="hl com">	 *</span>
<span class="hl com">	 * src_step and dest_step is the amount required to be added to our index</span>
<span class="hl com">	 * every time y increments. Because the destination area may be larger</span>
<span class="hl com">	 * than the source area we need one additional variable (otherwise we could</span>
<span class="hl com">	 * just continue adding dest_step as is done for the source data): dest_mod.</span>
<span class="hl com">	 * dest_mod is the difference in size between a &quot;row&quot; in the source data</span>
<span class="hl com">	 * and a &quot;row&quot; in the destination data (I am using the term row loosely</span>
<span class="hl com">	 * and for illustrative purposes). E.g.</span>
<span class="hl com">	 *</span>
<span class="hl com">	 * src       &lt;--------------------&gt;|&apos;&apos;&apos;&apos;&apos;&apos; dest mod &apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;</span>
<span class="hl com">	 * dest      &lt;---------------------------------------------&gt;</span>
<span class="hl com">	 *</span>
<span class="hl com">	 * dest_mod (it&apos;s essentially a modulus) is added to the destination index</span>
<span class="hl com">	 * after every full iteration of the y span.</span>
<span class="hl com">	 *</span>
<span class="hl com">	 * This method falls under the category &quot;linear array and incrementing</span>
<span class="hl com">	 * index&quot;.</span>
<span class="hl com">	 */</span>

	s32 src_step <span class="hl opt">=</span> src_area<span class="hl opt">.</span><span class="hl kwd">getExtent</span><span class="hl opt">().</span>X<span class="hl opt">;</span>
	s32 dest_step <span class="hl opt">=</span> m_area<span class="hl opt">.</span><span class="hl kwd">getExtent</span><span class="hl opt">().</span>X<span class="hl opt">;</span>
	s32 dest_mod <span class="hl opt">=</span> m_area<span class="hl opt">.</span><span class="hl kwd">index</span><span class="hl opt">(</span>to_pos<span class="hl opt">.</span>X<span class="hl opt">,</span> to_pos<span class="hl opt">.</span>Y<span class="hl opt">,</span> to_pos<span class="hl opt">.</span>Z <span class="hl opt">+</span> <span class="hl num">1</span><span class="hl opt">)</span>
			<span class="hl opt">-</span> m_area<span class="hl opt">.</span><span class="hl kwd">index</span><span class="hl opt">(</span>to_pos<span class="hl opt">.</span>X<span class="hl opt">,</span> to_pos<span class="hl opt">.</span>Y<span class="hl opt">,</span> to_pos<span class="hl opt">.</span>Z<span class="hl opt">)</span>
			<span class="hl opt">-</span> dest_step <span class="hl opt">*</span> size<span class="hl opt">.</span>Y<span class="hl opt">;</span>

	s32 i_src <span class="hl opt">=</span> src_area<span class="hl opt">.</span><span class="hl kwd">index</span><span class="hl opt">(</span>from_pos<span class="hl opt">.</span>X<span class="hl opt">,</span> from_pos<span class="hl opt">.</span>Y<span class="hl opt">,</span> from_pos<span class="hl opt">.</span>Z<span class="hl opt">);</span>
	s32 i_local <span class="hl opt">=</span> m_area<span class="hl opt">.</span><span class="hl kwd">index</span><span class="hl opt">(</span>to_pos<span class="hl opt">.</span>X<span class="hl opt">,</span> to_pos<span class="hl opt">.</span>Y<span class="hl opt">,</span> to_pos<span class="hl opt">.</span>Z<span class="hl opt">);</span>

	<span class="hl kwa">for</span> <span class="hl opt">(</span>s16 z <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> z <span class="hl opt">&lt;</span> size<span class="hl opt">.</span>Z<span class="hl opt">;</span> z<span class="hl opt">++) {</span>
		<span class="hl kwa">for</span> <span class="hl opt">(</span>s16 y <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> y <span class="hl opt">&lt;</span> size<span class="hl opt">.</span>Y<span class="hl opt">;</span> y<span class="hl opt">++) {</span>
			<span class="hl kwd">memcpy</span><span class="hl opt">(&amp;</span>m_data<span class="hl opt">[</span>i_local<span class="hl opt">], &amp;</span>src<span class="hl opt">[</span>i_src<span class="hl opt">],</span> size<span class="hl opt">.</span>X <span class="hl opt">*</span> <span class="hl kwa">sizeof</span><span class="hl opt">(*</span>m_data<span class="hl opt">));</span>
			<span class="hl kwd">memset</span><span class="hl opt">(&amp;</span>m_flags<span class="hl opt">[</span>i_local<span class="hl opt">],</span> <span class="hl num">0</span><span class="hl opt">,</span> size<span class="hl opt">.</span>X<span class="hl opt">);</span>
			i_src <span class="hl opt">+=</span> src_step<span class="hl opt">;</span>
			i_local <span class="hl opt">+=</span> dest_step<span class="hl opt">;</span>
		<span class="hl opt">}</span>
		i_local <span class="hl opt">+=</span> dest_mod<span class="hl opt">;</span>
	<span class="hl opt">}</span>
<span class="hl opt">}</span>

<span class="hl kwb">void</span> <span class="hl kwc">VoxelManipulator</span><span class="hl opt">::</span><span class="hl kwd">copyTo</span><span class="hl opt">(</span>MapNode <span class="hl opt">*</span>dst<span class="hl opt">,</span> <span class="hl kwb">const</span> VoxelArea<span class="hl opt">&amp;</span> dst_area<span class="hl opt">,</span>
		v3s16 dst_pos<span class="hl opt">,</span> v3s16 from_pos<span class="hl opt">,</span> <span class="hl kwb">const</span> v3s16 <span class="hl opt">&amp;</span>size<span class="hl opt">)</span>
<span class="hl opt">{</span>
	<span class="hl kwa">for</span><span class="hl opt">(</span>s16 z<span class="hl opt">=</span><span class="hl num">0</span><span class="hl opt">;</span> z<span class="hl opt">&lt;</span>size<span class="hl opt">.</span>Z<span class="hl opt">;</span> z<span class="hl opt">++)</span>
	<span class="hl kwa">for</span><span class="hl opt">(</span>s16 y<span class="hl opt">=</span><span class="hl num">0</span><span class="hl opt">;</span> y<span class="hl opt">&lt;</span>size<span class="hl opt">.</span>Y<span class="hl opt">;</span> y<span class="hl opt">++)</span>
	<span class="hl opt">{</span>
		s32 i_dst <span class="hl opt">=</span> dst_area<span class="hl opt">.</span><span class="hl kwd">index</span><span class="hl opt">(</span>dst_pos<span class="hl opt">.</span>X<span class="hl opt">,</span> dst_pos<span class="hl opt">.</span>Y<span class="hl opt">+</span>y<span class="hl opt">,</span> dst_pos<span class="hl opt">.</span>Z<span class="hl opt">+</span>z<span class="hl opt">);</span>
		s32 i_local <span class="hl opt">=</span> m_area<span class="hl opt">.</span><span class="hl kwd">index</span><span class="hl opt">(</span>from_pos<span class="hl opt">.</span>X<span class="hl opt">,</span> from_pos<span class="hl opt">.</span>Y<span class="hl opt">+</span>y<span class="hl opt">,</span> from_pos<span class="hl opt">.</span>Z<span class="hl opt">+</span>z<span class="hl opt">);</span>
		<span class="hl kwa">for</span> <span class="hl opt">(</span>s16 x <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> x <span class="hl opt">&lt;</span> size<span class="hl opt">.</span>X<span class="hl opt">;</span> x<span class="hl opt">++) {</span>
			<span class="hl kwa">if</span> <span class="hl opt">(</span>m_data<span class="hl opt">[</span>i_local<span class="hl opt">].</span><span class="hl kwd">getContent</span><span class="hl opt">() !=</span> CONTENT_IGNORE<span class="hl opt">)</span>
				dst<span class="hl opt">[</span>i_dst<span class="hl opt">] =</span> m_data<span class="hl opt">[</span>i_local<span class="hl opt">];</span>
			i_dst<span class="hl opt">++;</span>
			i_local<span class="hl opt">++;</span>
		<span class="hl opt">}</span>
	<span class="hl opt">}</span>
<span class="hl opt">}</span>

<span class="hl com">/*</span>
<span class="hl com">	Algorithms</span>
<span class="hl com">	-----------------------------------------------------</span>
<span class="hl com">*/</span>

<span class="hl kwb">void</span> <span class="hl kwc">VoxelManipulator</span><span class="hl opt">::</span><span class="hl kwd">clearFlag</span><span class="hl opt">(</span>u8 flags<span class="hl opt">)</span>
<span class="hl opt">{</span>
	<span class="hl slc">// 0-1ms on moderate area</span>
	TimeTaker <span class="hl kwd">timer</span><span class="hl opt">(</span><span class="hl str">&quot;clearFlag&quot;</span><span class="hl opt">, &amp;</span>clearflag_time<span class="hl opt">);</span>

	<span class="hl slc">//v3s16 s = m_area.getExtent();</span>

	<span class="hl com">/*dstream&lt;&lt;&quot;clearFlag clearing area of size &quot;</span>
<span class="hl com">			&lt;&lt;&quot;&quot;&lt;&lt;s.X&lt;&lt;&quot;x&quot;&lt;&lt;s.Y&lt;&lt;&quot;x&quot;&lt;&lt;s.Z&lt;&lt;&quot;&quot;</span>
<span class="hl com">			&lt;&lt;std::endl;*/</span>

	<span class="hl slc">//s32 count = 0;</span>

	<span class="hl com">/*for(s32 z=m_area.MinEdge.Z; z&lt;=m_area.MaxEdge.Z; z++)</span>
<span class="hl com">	for(s32 y=m_area.MinEdge.Y; y&lt;=m_area.MaxEdge.Y; y++)</span>
<span class="hl com">	for(s32 x=m_area.MinEdge.X; x&lt;=m_area.MaxEdge.X; x++)</span>
<span class="hl com">	{</span>
<span class="hl com">		u8 f = m_flags[m_area.index(x,y,z)];</span>
<span class="hl com">		m_flags[m_area.index(x,y,z)] &amp;= ~flags;</span>
<span class="hl com">		if(m_flags[m_area.index(x,y,z)] != f)</span>
<span class="hl com">			count++;</span>
<span class="hl com">	}*/</span>

	s32 volume <span class="hl opt">=</span> m_area<span class="hl opt">.</span><span class="hl kwd">getVolume</span><span class="hl opt">();</span>
	<span class="hl kwa">for</span><span class="hl opt">(</span>s32 i<span class="hl opt">=</span><span class="hl num">0</span><span class="hl opt">;</span> i<span class="hl opt">&lt;</span>volume<span class="hl opt">;</span> i<span class="hl opt">++)</span>
	<span class="hl opt">{</span>
		m_flags<span class="hl opt">[</span>i<span class="hl opt">] &amp;= ~</span>flags<span class="hl opt">;</span>
	<span class="hl opt">}</span>

	<span class="hl com">/*s32 volume = m_area.getVolume();</span>
<span class="hl com">	for(s32 i=0; i&lt;volume; i++)</span>
<span class="hl com">	{</span>
<span class="hl com">		u8 f = m_flags[i];</span>
<span class="hl com">		m_flags[i] &amp;= ~flags;</span>
<span class="hl com">		if(m_flags[i] != f)</span>
<span class="hl com">			count++;</span>
<span class="hl com">	}</span>
<span class="hl com"></span>
<span class="hl com">	dstream&lt;&lt;&quot;clearFlag changed &quot;&lt;&lt;count&lt;&lt;&quot; flags out of &quot;</span>
<span class="hl com">			&lt;&lt;volume&lt;&lt;&quot; nodes&quot;&lt;&lt;std::endl;*/</span>
<span class="hl opt">}</span>

<span class="hl kwb">const</span> MapNode <span class="hl kwc">VoxelManipulator</span><span class="hl opt">::</span>ContentIgnoreNode <span class="hl opt">=</span> <span class="hl kwd">MapNode</span><span class="hl opt">(</span>CONTENT_IGNORE<span class="hl opt">);</span>

<span class="hl slc">//END</span>
</code></pre></td></tr></table>
</div> <!-- class=content -->
<div class='footer'>generated by <a href='https://git.zx2c4.com/cgit/about/'>cgit v1.2.3</a> (<a href='https://git-scm.com/'>git 2.39.1</a>) at 2026-11-01 16:35:20 +0000</div>
</div> <!-- id=cgit -->
</body>
</html>
