diff options
author | madmaxoft@gmail.com <madmaxoft@gmail.com@0a769ca7-a7f5-676a-18bf-c427514a06d6> | 2013-07-06 21:56:03 +0200 |
---|---|---|
committer | madmaxoft@gmail.com <madmaxoft@gmail.com@0a769ca7-a7f5-676a-18bf-c427514a06d6> | 2013-07-06 21:56:03 +0200 |
commit | 8f18510dec4eab5f00e0ff311cf31ae2ce4f2d4d (patch) | |
tree | 786de8ccf882511206a8113eb3cad5b7e19a80b3 /Tools/AnvilStats/Statistics.h | |
parent | ProtoProxy: moved into the Tools folder (diff) | |
download | cuberite-8f18510dec4eab5f00e0ff311cf31ae2ce4f2d4d.tar cuberite-8f18510dec4eab5f00e0ff311cf31ae2ce4f2d4d.tar.gz cuberite-8f18510dec4eab5f00e0ff311cf31ae2ce4f2d4d.tar.bz2 cuberite-8f18510dec4eab5f00e0ff311cf31ae2ce4f2d4d.tar.lz cuberite-8f18510dec4eab5f00e0ff311cf31ae2ce4f2d4d.tar.xz cuberite-8f18510dec4eab5f00e0ff311cf31ae2ce4f2d4d.tar.zst cuberite-8f18510dec4eab5f00e0ff311cf31ae2ce4f2d4d.zip |
Diffstat (limited to 'Tools/AnvilStats/Statistics.h')
-rw-r--r-- | Tools/AnvilStats/Statistics.h | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/Tools/AnvilStats/Statistics.h b/Tools/AnvilStats/Statistics.h new file mode 100644 index 000000000..2c0a86cc1 --- /dev/null +++ b/Tools/AnvilStats/Statistics.h @@ -0,0 +1,138 @@ +
+// Statistics.h
+
+// Interfaces to the cStatistics class representing a statistics-collecting callback
+
+
+
+
+
+#pragma once
+
+#include "Callback.h"
+#include "Utils.h"
+
+
+
+
+
+class cStatistics :
+ public cCallback
+{
+public:
+ class cStats
+ {
+ public:
+ UInt64 m_TotalChunks; // Total number of chunks that go through this callback (OnNewChunk())
+ UInt64 m_BiomeCounts[256];
+ UInt64 m_BlockCounts[256][256]; // First dimension is the biome, second dimension is BlockType
+ UInt64 m_BiomeNumChunks; // Num chunks that have been processed for biome stats
+ UInt64 m_BlockNumChunks; // Num chunks that have been processed for block stats
+ UInt64 m_NumEntities;
+ UInt64 m_NumTileEntities;
+ UInt64 m_NumTileTicks;
+ int m_MinChunkX, m_MaxChunkX; // X coords range
+ int m_MinChunkZ, m_MaxChunkZ; // Z coords range
+
+ Int64 m;
+ UInt64 m_SpawnerEntity[entMax + 1];
+
+ cStats(void);
+ void Add(const cStats & a_Stats);
+ void UpdateCoordsRange(int a_ChunkX, int a_ChunkZ);
+ } ;
+
+ cStatistics(void);
+
+ const cStats & GetStats(void) const { return m_Stats; }
+
+protected:
+ cStats m_Stats;
+
+ bool m_IsBiomesValid; // Set to true in OnBiomes(), reset to false in OnNewChunk(); if true, the m_BiomeData is valid for the current chunk
+ unsigned char m_BiomeData[16 * 16];
+ bool m_IsFirstSectionInChunk; // True if there was no section in the chunk yet. Set by OnNewChunk(), reset by OnSection()
+
+ // 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 OnEmptySection(unsigned char a_Y) override;
+
+ virtual bool OnEntity(
+ const AString & a_EntityType,
+ double a_PosX, double a_PosY, double a_PosZ,
+ double a_SpeedX, double a_SpeedY, double a_SpeedZ,
+ float a_Yaw, float a_Pitch,
+ float a_FallDistance,
+ short a_FireTicksLeft,
+ short a_AirTicks,
+ char a_IsOnGround,
+ cParsedNBT & a_NBT,
+ int a_NBTTag
+ ) override;
+
+ virtual bool OnTileEntity(
+ const AString & a_EntityType,
+ int a_PosX, int a_PosY, int a_PosZ,
+ cParsedNBT & a_NBT,
+ int a_NBTTag
+ ) override;
+
+ virtual bool OnTileTick(
+ int a_BlockType,
+ int a_TicksLeft,
+ int a_PosX, int a_PosY, int a_PosZ
+ ) override;
+
+ void OnSpawner(cParsedNBT & a_NBT, int a_TileEntityTag);
+} ;
+
+
+
+
+
+class cStatisticsFactory :
+ public cCallbackFactory
+{
+public:
+ cStatisticsFactory(void);
+ virtual ~cStatisticsFactory();
+
+ virtual cCallback * CreateNewCallback(void)
+ {
+ return new cStatistics;
+ }
+
+protected:
+ // The results, combined, are stored here:
+ cStatistics::cStats m_CombinedStats;
+
+ clock_t m_BeginTick;
+
+ void JoinResults(void);
+ void SaveBiomes(void);
+ void SaveBlockTypes(void);
+ void SaveBiomeBlockTypes(void);
+ void SaveStatistics(void);
+ void SaveSpawners(void);
+} ;
+
+
+
+
|