4jcraft/Minecraft.World/WorldGen/StructureFeatureIO.h
2026-03-21 17:45:10 -05:00

96 lines
3.1 KiB
C++

#pragma once
class StructurePiece;
class StructureStart;
typedef StructurePiece* (*structurePieceCreateFn)();
typedef StructureStart* (*structureStartCreateFn)();
enum EStructureStart {
eStructureStart_MineShaftStart,
eStructureStart_VillageStart,
eStructureStart_NetherBridgeStart,
eStructureStart_StrongholdStart,
eStructureStart_ScatteredFeatureStart,
};
enum EStructurePiece {
eStructurePiece_MineShaftRoom,
eStructurePiece_MineShaftCorridor,
eStructurePiece_MineShaftCrossing,
eStructurePiece_MineShaftStairs,
eStructurePiece_BridgeStraight,
eStructurePiece_BridgeEndFiller,
eStructurePiece_BridgeCrossing,
eStructurePiece_RoomCrossing,
eStructurePiece_StairsRoom,
eStructurePiece_MonsterThrone,
eStructurePiece_CastleEntrance,
eStructurePiece_CastleStalkRoom,
eStructurePiece_CastleSmallCorridorPiece,
eStructurePiece_CastleSmallCorridorCrossingPiece,
eStructurePiece_CastleSmallCorridorRightTurnPiece,
eStructurePiece_CastleSmallCorridorLeftTurnPiece,
eStructurePiece_CastleCorridorStairsPiece,
eStructurePiece_CastleCorridorTBalconyPiece,
eStructurePiece_NetherBridgeStartPiece,
eStructurePiece_DesertPyramidPiece,
eStructurePiece_JunglePyramidPiece,
eStructurePiece_SwamplandHut,
eStructurePiece_FillerCorridor,
eStructurePiece_StairsDown,
eStructurePiece_Straight,
eStructurePiece_ChestCorridor,
eStructurePiece_StraightStairsDown,
eStructurePiece_LeftTurn,
eStructurePiece_RightTurn,
eStructurePiece_StrongholdRoomCrossing,
eStructurePiece_PrisonHall,
eStructurePiece_Library,
eStructurePiece_FiveCrossing,
eStructurePiece_PortalRoom,
eStructurePiece_StrongholdStartPiece,
eStructurePiece_Well,
eStructurePiece_StraightRoad,
eStructurePiece_SimpleHouse,
eStructurePiece_SmallTemple,
eStructurePiece_BookHouse,
eStructurePiece_SmallHut,
eStructurePiece_PigHouse,
eStructurePiece_TwoRoomHouse,
eStructurePiece_Smithy,
eStructurePiece_Farmland,
eStructurePiece_DoubleFarmland,
eStructurePiece_LightPost,
eStructurePiece_VillageStartPiece,
};
class StructureFeatureIO {
private:
static std::unordered_map<std::wstring, structureStartCreateFn>
startIdClassMap;
static std::unordered_map<unsigned int, std::wstring> startClassIdMap;
static std::unordered_map<std::wstring, structurePieceCreateFn>
pieceIdClassMap;
static std::unordered_map<unsigned int, std::wstring> pieceClassIdMap;
public:
static void setStartId(EStructureStart clas,
structureStartCreateFn createFn,
const std::wstring& id);
static void setPieceId(EStructurePiece clas,
structurePieceCreateFn createFn,
const std::wstring& id);
public:
static void staticCtor();
static std::wstring getEncodeId(StructureStart* start);
static std::wstring getEncodeId(StructurePiece* piece);
static StructureStart* loadStaticStart(CompoundTag* tag, Level* level);
static StructurePiece* loadStaticPiece(CompoundTag* tag, Level* level);
};