1 #pragma once
2 
3 #include "Types.h"
4 #include "Stream.h"
5 #include <memory>
6 
7 class CIcon
8 {
9 public:
10 	struct VERTEX
11 	{
12 		float nX;
13 		float nY;
14 		float nZ;
15 	};
16 
17 	struct TEXCOORD
18 	{
19 		float nS;
20 		float nT;
21 	};
22 
23 #pragma pack(push, 1)
24 
25 	struct KEY
26 	{
27 		float nTime;
28 		float nAmplitude;
29 	};
30 
31 #pragma pack(pop)
32 
33 	struct FRAME
34 	{
35 		uint32 nShapeId;
36 		uint32 nKeyCount;
37 		KEY* pKeys;
38 	};
39 
40 	CIcon(Framework::CStream&);
41 	virtual ~CIcon();
42 
43 	const VERTEX* GetShape(unsigned int) const;
44 	const TEXCOORD* GetTexCoords() const;
45 	const FRAME* GetFrame(unsigned int) const;
46 	const uint16* GetTexture() const;
47 	unsigned int GetShapeCount() const;
48 	unsigned int GetVertexCount() const;
49 	unsigned int GetFrameCount() const;
50 
51 private:
52 	void ReadHeader(Framework::CStream&);
53 	void ReadVertices(Framework::CStream&);
54 	void ReadAnimations(Framework::CStream&);
55 	void ReadTexture(Framework::CStream&);
56 	void UncompressTexture(Framework::CStream&);
57 
58 	VERTEX** m_pShapes;
59 	TEXCOORD* m_pTexCoords;
60 	FRAME* m_pFrames;
61 
62 	uint32 m_nShapeCount;
63 	uint32 m_nVertexCount;
64 	uint32 m_nFrameCount;
65 	uint32 m_nTextureType;
66 	uint16* m_pTexture;
67 };
68 
69 typedef std::shared_ptr<CIcon> IconPtr;
70