aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.World/StructureFeatureIO.h
blob: 90fc115db01cacf7ebeed174db3ceb756c90b9d1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#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 unordered_map<wstring, structureStartCreateFn> startIdClassMap;
	static unordered_map<unsigned int, wstring> startClassIdMap;

	static unordered_map<wstring, structurePieceCreateFn> pieceIdClassMap;
	static unordered_map<unsigned int, wstring> pieceClassIdMap;

public:
	static void setStartId(EStructureStart clas, structureStartCreateFn createFn, const wstring &id);
	static void setPieceId(EStructurePiece clas, structurePieceCreateFn createFn, const wstring &id);

public:
	static void staticCtor();
	static wstring getEncodeId(StructureStart *start);
	static wstring getEncodeId(StructurePiece *piece);
	static StructureStart *loadStaticStart(CompoundTag *tag, Level *level);
	static StructurePiece *loadStaticPiece(CompoundTag *tag, Level *level);
};