source: trunk/common/pieceinf.h @ 638

Last change on this file since 638 was 638, checked in by leo, 9 years ago

Fixed formating.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 2.7 KB
Line 
1#ifndef _PIECEINF_H_
2#define _PIECEINF_H_
3
4#include <stdio.h>
5#ifndef GLuint
6#include "opengl.h"
7#endif
8#include "algebra.h"
9
10#define LC_PIECE_COUNT            0x01 // Count this piece in the totals ?
11#define LC_PIECE_LONGDATA         0x02 // unsigned long/short index
12#define LC_PIECE_CCW              0x04 // Use back-face culling
13#define LC_PIECE_SMALL            0x10 // scale = 10000
14#define LC_PIECE_MEDIUM           0x20 // scale = 1000 (otherwise = 100)
15#define LC_PIECE_LONGDATA_RUNTIME 0x40 // If the original data is 16 bits but we expanded to 32 bits
16
17class File;
18class Texture;
19class lcMesh;
20
21struct CONNECTIONINFO
22{
23        unsigned char type;
24        float center[3];
25        float normal[3];
26};
27
28struct DRAWGROUP
29{
30        unsigned short connections[6];
31        int NumSections;
32};
33
34struct TEXTURE
35{
36        Texture* texture;
37        unsigned char color;
38        float vertex[4][3];
39        float coords[4][2];
40};
41
42unsigned char ConvertColor(int c);
43
44class PieceInfo
45{
46public:
47        PieceInfo();
48        ~PieceInfo();
49
50        bool IsPatterned() const
51        {
52                const char* Name = m_strName;
53
54                while (*Name)
55                {
56                        if (*Name < '0' || *Name > '9')
57                                break;
58
59                        Name++;
60                }
61
62                if (*Name == 'P')
63                        return true;
64
65                return false;
66        }
67
68        bool IsSubPiece() const
69        {
70                return (m_strDescription[0] == '~');
71        }
72
73        Vector3 GetCenter() const
74        {
75                return Vector3((m_fDimensions[0] + m_fDimensions[3]) * 0.5f,
76                               (m_fDimensions[1] + m_fDimensions[4]) * 0.5f,
77                               (m_fDimensions[2] + m_fDimensions[5]) * 0.5f);
78        }
79
80        // Operations
81        void ZoomExtents(float Fov, float Aspect, float* EyePos = NULL) const;
82        void RenderOnce(int nColor);
83        void RenderPiece(int nColor);
84        void WriteWavefront(FILE* file, unsigned char color, unsigned long* start);
85        void WritePOV(FILE* file);
86
87        // Implementation
88        lcMesh* GetMesh() const
89        { return m_Mesh; }
90        GLuint GetBoxDisplayList()
91        {
92                if (!m_nBoxList)
93                        CreateBoxDisplayList();
94                return m_nBoxList;
95        };
96        void LoadIndex(File& file);
97        void AddRef();
98        void DeRef();
99
100public:
101        // Attributes
102        char m_strName[9];
103        char m_strDescription[65];
104        float m_fDimensions[6];
105        unsigned long m_nOffset;
106        unsigned long m_nSize;
107
108        // Nobody should change these
109        unsigned char m_nFlags;
110        unsigned short m_nConnectionCount;
111        CONNECTIONINFO* m_pConnections;
112        unsigned short m_nGroupCount;
113        DRAWGROUP* m_pGroups;
114        unsigned char m_nTextureCount;
115        TEXTURE* m_pTextures;
116
117        // Bounding box / sphere.
118        Vector3 m_Center;
119        Vector4 m_Dimensions; // xyz = box extents, w = sphere radius
120
121protected:
122        int m_nRef;
123        GLuint m_nBoxList;
124        lcMesh* m_Mesh;
125
126        // Workaround for MSVC6 poor template support.
127        template <class T>
128        struct TypeToType
129        {
130                typedef T type;
131        };
132
133        template<class T>
134        void BuildMesh(TypeToType<T>, void* Data, void* MeshStart, bool LongData);
135
136        void LoadInformation();
137        void FreeInformation();
138        void CreateBoxDisplayList();
139};
140
141#endif // _PIECEINF_H_
Note: See TracBrowser for help on using the repository browser.