#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 startIdClassMap; static std::unordered_map startClassIdMap; static std::unordered_map pieceIdClassMap; static std::unordered_map 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); };