1 #pragma once
2 
3 #include "lc_math.h"
4 
5 enum LC_MFW_TYPES
6 {
7 	LC_MFW_HATS,
8 	LC_MFW_HATS2,
9 	LC_MFW_HEAD,
10 	LC_MFW_NECK,
11 	LC_MFW_BODY,
12 	LC_MFW_BODY2,
13 	LC_MFW_BODY3,
14 	LC_MFW_RARM,
15 	LC_MFW_LARM,
16 	LC_MFW_RHAND,
17 	LC_MFW_LHAND,
18 	LC_MFW_RHANDA,
19 	LC_MFW_LHANDA,
20 	LC_MFW_RLEG,
21 	LC_MFW_LLEG,
22 	LC_MFW_RLEGA,
23 	LC_MFW_LLEGA,
24 	LC_MFW_NUMITEMS
25 };
26 
27 struct lcMinifigPieceInfo
28 {
29 	char Description[128];
30 	PieceInfo* Info;
31 	lcMatrix44 Offset;
32 };
33 
34 struct lcMinifig
35 {
36 	PieceInfo* Parts[LC_MFW_NUMITEMS];
37 	int Colors[LC_MFW_NUMITEMS];
38 	float Angles[LC_MFW_NUMITEMS];
39 	lcMatrix44 Matrices[LC_MFW_NUMITEMS];
40 };
41 
42 struct lcMinifigTemplate
43 {
44 	QString Parts[LC_MFW_NUMITEMS];
45 	int Colors[LC_MFW_NUMITEMS];
46 	float Angles[LC_MFW_NUMITEMS];
47 };
48 
49 class MinifigWizard
50 {
51 public:
52 	MinifigWizard();
53 	~MinifigWizard();
54 
55 	MinifigWizard(const MinifigWizard&) = delete;
56 	MinifigWizard& operator=(const MinifigWizard&) = delete;
57 
GetModel()58 	lcModel* GetModel() const
59 	{
60 		return mModel.get();
61 	}
62 
GetTemplates()63 	const std::map<QString, lcMinifigTemplate>& GetTemplates() const
64 	{
65 		return mTemplates;
66 	}
67 
68 	void SaveTemplate(const QString& TemplateName, const lcMinifigTemplate& Template);
69 	void DeleteTemplate(const QString& TemplateName);
70 	void AddTemplatesJson(const QByteArray& TemplateData);
71 	QByteArray GetTemplatesJson() const;
72 
73 	void LoadDefault();
74 
75 	void Calculate();
76 	int GetSelectionIndex(int Type) const;
77 	void SetSelectionIndex(int Type, int Index);
78 	void SetColor(int Type, int Color);
79 	void SetAngle(int Type, float Angle);
80 
81 	std::vector<lcMinifigPieceInfo> mSettings[LC_MFW_NUMITEMS];
82 
83 	lcMinifig mMinifig;
84 
85 protected:
86 	void LoadSettings();
87 	void ParseSettings(lcFile& Settings);
88 
89 	void LoadTemplates();
90 	void SaveTemplates();
91 
92 	std::unique_ptr<lcModel> mModel;
93 	std::map<QString, lcMinifigTemplate> mTemplates;
94 	static const char* mSectionNames[LC_MFW_NUMITEMS];
95 };
96 
97