mirror of
https://github.com/GabsPuNs/Project-Zenith-Main.git
synced 2026-05-21 18:24:34 +00:00
178 lines
3.6 KiB
C++
178 lines
3.6 KiB
C++
#pragma once
|
|
|
|
using namespace std;
|
|
|
|
enum eGenerateStructure
|
|
{
|
|
eGenerateStructure_Block = 0,
|
|
eGenerateStructure_maybeGenerateBlock,
|
|
eGenerateStructure_AirBox,
|
|
eGenerateStructure_Box,
|
|
eGenerateStructure_MaybeBox,
|
|
eGenerateStructure_UpperHalfSphere,
|
|
eGenerateStructure_FullSphere,
|
|
eGenerateStructure_AirColumnUp,
|
|
eGenerateStructure_fillColumnDown,
|
|
eGenerateStructure_fillBoxDown,
|
|
eGenerateStructure_generateAirBoxUp,
|
|
eGenerateStructure_Crops,
|
|
eGenerateStructure_CreateDoor,
|
|
eGenerateStructure_CheckBlock,
|
|
eGenerateStructure_Count
|
|
};
|
|
|
|
enum eGenerateObject
|
|
{
|
|
eGenerateObject_Chest = 0,
|
|
eGenerateObject_Dispenser,
|
|
eGenerateObject_Count
|
|
};
|
|
|
|
enum eGenerateEntity
|
|
{
|
|
eGenerateEntity_Villager = 0,
|
|
eGenerateEntity_Witch,
|
|
eGenerateEntity_Count
|
|
};
|
|
|
|
class StructureTable
|
|
{
|
|
public:
|
|
|
|
enum eBlockDataType
|
|
{
|
|
eBlockDataType_Default = 0,
|
|
eBlockDataType_Orientation,
|
|
eBlockDataType_Inverted
|
|
};
|
|
|
|
public:
|
|
struct StructureData
|
|
{
|
|
int id;
|
|
wstring name;
|
|
|
|
int tileId;
|
|
int data;
|
|
int dataType;
|
|
|
|
int secondTileId;
|
|
int secondData;
|
|
int secondDataType;
|
|
|
|
int x0;
|
|
int y0;
|
|
int z0;
|
|
|
|
int x1;
|
|
int y1;
|
|
int z1;
|
|
|
|
int startRemap0;
|
|
int startRemap1;
|
|
int startRemap2;
|
|
|
|
int endRemap0;
|
|
int endRemap1;
|
|
int endRemap2;
|
|
|
|
vector<int> cropAges;
|
|
vector<int> v25;
|
|
vector<int> v26;
|
|
vector<int> v27;
|
|
};
|
|
|
|
struct TreasureData
|
|
{
|
|
int itemId;
|
|
int auxValue;
|
|
int minCount;
|
|
int maxCount;
|
|
int weight;
|
|
};
|
|
|
|
struct ObjectData
|
|
{
|
|
int id;
|
|
wstring name;
|
|
|
|
int x;
|
|
int y;
|
|
int z;
|
|
|
|
int minEnchantedBooks;
|
|
int maxEnchantedBooks;
|
|
int enchantedBookWeight;
|
|
int rollCount;
|
|
bool canGenEnchantedBooks;
|
|
int rollWeight;
|
|
int dispenserDir;
|
|
};
|
|
|
|
struct EntityData
|
|
{
|
|
int id;
|
|
int x;
|
|
int y;
|
|
int z;
|
|
int count;
|
|
vector<int> professions;
|
|
};
|
|
|
|
struct StructurePiece
|
|
{
|
|
wstring name;
|
|
|
|
int width;
|
|
int height;
|
|
int depth;
|
|
|
|
vector<StructureData> structures;
|
|
vector<TreasureData> treasure;
|
|
vector<ObjectData> objects;
|
|
vector<EntityData> entities;
|
|
|
|
int v8;
|
|
|
|
vector<int> v11;
|
|
vector<int> cropTiles;
|
|
};
|
|
|
|
struct StructureFeature
|
|
{
|
|
wstring name;
|
|
|
|
vector<int> options;
|
|
unordered_map<int, int> tiles; // @3UR: this maps one tile id to another
|
|
};
|
|
|
|
private:
|
|
StructurePiece m_structurePieces[eMinecraftStructurePiece_Count];
|
|
StructureFeature m_structureFeatures[eMinecraftStructureFeature_Count];
|
|
|
|
static const wchar_t *StructureFeatureElements[eMinecraftStructureFeature_Count];
|
|
static const wchar_t *StructurePieceElements[eMinecraftStructurePiece_Count];
|
|
static const wchar_t *GenerateObjectElements[eGenerateObject_Count];
|
|
static const wchar_t *GenerateEntityElements[eGenerateEntity_Count];
|
|
static const wchar_t *GenerateStructureElements[eGenerateStructure_Count];
|
|
|
|
static unordered_map<wstring, eMinecraftStructureFeature> s_structureFeatureNamesMap;
|
|
static unordered_map<wstring, eMinecraftStructurePiece> s_structurePieceNamesMap;
|
|
static unordered_map<wstring, eGenerateObject> s_generateObjectNamesMap;
|
|
static unordered_map<wstring, eGenerateEntity> s_generateEntityNamesMap;
|
|
static unordered_map<wstring, eGenerateStructure> s_generateStructureNamesMap;
|
|
|
|
public:
|
|
static void staticCtor();
|
|
|
|
StructureTable(PBYTE pbData, DWORD dwLength);
|
|
|
|
StructurePiece *getStructurePiece(eMinecraftStructurePiece piece);
|
|
StructureFeature *getStructureFeature(eMinecraftStructureFeature feature);
|
|
|
|
void loadStructuresFromData(PBYTE pbData, DWORD dwLength);
|
|
void setStructurePiece(const wstring& name, const StructurePiece& piece);
|
|
|
|
// @Patoke: seems to be inlined in Wii U, functionality is 1:1 with StructurePiece::readIntSaveData
|
|
inline void readIntSaveData(DataInputStream& dis, vector<int>& container);
|
|
}; |