summaryrefslogtreecommitdiffstats
path: root/AnvilStats/SpringStats.h
diff options
context:
space:
mode:
authormadmaxoft@gmail.com <madmaxoft@gmail.com@0a769ca7-a7f5-676a-18bf-c427514a06d6>2013-03-12 12:25:19 +0100
committermadmaxoft@gmail.com <madmaxoft@gmail.com@0a769ca7-a7f5-676a-18bf-c427514a06d6>2013-03-12 12:25:19 +0100
commitcf3f09e9c1073d5c883245e532f65dac3d8b0750 (patch)
tree8ff354c2c1d989140a21cce320af4c5e59b594f1 /AnvilStats/SpringStats.h
parentInitial nether composition generator (diff)
downloadcuberite-cf3f09e9c1073d5c883245e532f65dac3d8b0750.tar
cuberite-cf3f09e9c1073d5c883245e532f65dac3d8b0750.tar.gz
cuberite-cf3f09e9c1073d5c883245e532f65dac3d8b0750.tar.bz2
cuberite-cf3f09e9c1073d5c883245e532f65dac3d8b0750.tar.lz
cuberite-cf3f09e9c1073d5c883245e532f65dac3d8b0750.tar.xz
cuberite-cf3f09e9c1073d5c883245e532f65dac3d8b0750.tar.zst
cuberite-cf3f09e9c1073d5c883245e532f65dac3d8b0750.zip
Diffstat (limited to 'AnvilStats/SpringStats.h')
-rw-r--r--AnvilStats/SpringStats.h102
1 files changed, 102 insertions, 0 deletions
diff --git a/AnvilStats/SpringStats.h b/AnvilStats/SpringStats.h
new file mode 100644
index 000000000..292c5b82d
--- /dev/null
+++ b/AnvilStats/SpringStats.h
@@ -0,0 +1,102 @@
+
+// SpringStats.h
+
+// Declares the cSpringStats class representing a cCallback descendant that collects statistics on lava and water springs
+
+
+
+
+
+#pragma once
+
+#include "Callback.h"
+
+
+
+
+
+class cSpringStats :
+ public cCallback
+{
+public:
+ class cStats
+ {
+ public:
+ /// Per-height, per-biome frequencies of springs
+ typedef UInt64 SpringStats[256][256];
+
+ SpringStats m_LavaSprings;
+ SpringStats m_WaterSprings;
+
+ UInt64 m_TotalChunks; ///< Total number of chunks that are fully processed through this callback(OnSectionsFinished())
+
+ cStats(void);
+ void Add(const cStats & a_Other);
+ } ;
+
+ cSpringStats(void);
+
+ const cStats & GetStats(void) const { return m_Stats; }
+
+protected:
+
+ BLOCKTYPE m_BlockTypes[16 * 16 * 256];
+ NIBBLETYPE m_BlockMetas[16 * 16 * 256 / 2];
+ char m_Biomes[16 * 16];
+ bool m_AreBiomesValid;
+
+ cStats m_Stats;
+
+ // cCallback overrides:
+ virtual bool OnNewChunk(int a_ChunkX, int a_ChunkZ) override;
+ virtual bool OnHeader(int a_FileOffset, unsigned char a_NumSectors, int a_Timestamp) override { return false; }
+ virtual bool OnCompressedDataSizePos(int a_CompressedDataSize, int a_DataOffset, char a_CompressionMethod) override { return false; }
+ virtual bool OnDecompressedData(const char * a_DecompressedNBT, int a_DataSize) override { return false; }
+ virtual bool OnRealCoords(int a_ChunkX, int a_ChunkZ) override { return false; }
+ virtual bool OnLastUpdate(Int64 a_LastUpdate) override { return false; }
+ virtual bool OnTerrainPopulated(bool a_Populated) override { return !a_Populated; } // If not populated, we don't want it!
+ virtual bool OnBiomes(const unsigned char * a_BiomeData) override;
+ virtual bool OnHeightMap(const int * a_HeightMap) override { return false; }
+ virtual bool OnSection(
+ unsigned char a_Y,
+ const BLOCKTYPE * a_BlockTypes,
+ const NIBBLETYPE * a_BlockAdditional,
+ const NIBBLETYPE * a_BlockMeta,
+ const NIBBLETYPE * a_BlockLight,
+ const NIBBLETYPE * a_BlockSkyLight
+ ) override;
+ virtual bool OnSectionsFinished(void) override;
+
+ /// Tests the specified block, if it appears to be a spring, it is added to a_Stats
+ void TestSpring(int a_RelX, int a_RelY, int a_RelZ, cStats::SpringStats & a_Stats);
+} ;
+
+
+
+
+
+class cSpringStatsFactory :
+ public cCallbackFactory
+{
+public:
+ virtual ~cSpringStatsFactory();
+
+ virtual cCallback * CreateNewCallback(void) override
+ {
+ return new cSpringStats;
+ }
+
+ cSpringStats::cStats m_CombinedStats;
+
+ void JoinResults(void);
+
+ /// Saves total per-height data (summed through biomes) for both spring types to the file
+ void SaveTotals(const AString & a_FileName);
+
+ /// Saves complete per-height, per-biome statistics for the springs to the file
+ void SaveStatistics(const cSpringStats::cStats::SpringStats & a_Stats, const AString & a_FileName);
+} ;
+
+
+
+