summaryrefslogtreecommitdiff
path: root/common/pieceinf.h
blob: f0e4db6d329b8ca5617f62f9aae9c2f7b3ce1a0b (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
//
//	pieceinf.h
////////////////////////////////////////////////////

#ifndef _PIECEINF_H_
#define _PIECEINF_H_

#ifndef GLuint
#include <GL/gl.h>
#endif

#define LC_PIECE_COUNT		0x01 // Count this piece in the totals ?
#define LC_PIECE_LONGDATA	0x02 // unsigned long/short index
#define LC_PIECE_CCW		0x04 // Use back-face culling
#define LC_PIECE_SMALL		0x10 // scale = 10000
#define LC_PIECE_MEDIUM		0x20 // scale = 1000 (otherwise = 100)

class File;
class Texture;

typedef struct
{
	unsigned char type;
	float center[3];
	float normal[3];
} CONNECTIONINFO;

typedef struct
{
	unsigned short connections[6];
	void* drawinfo;
} DRAWGROUP;

typedef struct TEXTURE
{
	Texture* texture;
	unsigned char color;
	float vertex[4][3];
	float coords[4][2];
} TEXTURE;

unsigned char ConvertColor(int c);

class PieceInfo
{
public:
	PieceInfo();
	~PieceInfo();

	// Operations
	void ZoomExtents();
	void RenderOnce(int nColor);
	void RenderPiece(int nColor);
	void WriteWavefront(FILE* file, unsigned char color, unsigned long* start);

	// Implementation
	void LoadIndex(File* file);
	GLuint AddRef();
	void DeRef();

public:
	// Attributes
	char m_strName[9];
	char m_strDescription[65];
	float m_fDimensions[6];
	unsigned long m_nOffset;
	unsigned long m_nSize;
	unsigned long m_nGroups;

	// Nobody should change these
	unsigned char	m_nFlags;
	unsigned long 	m_nVertexCount;
	float*			m_fVertexArray;
	unsigned short	m_nConnectionCount;
	CONNECTIONINFO*	m_pConnections;
	unsigned short	m_nGroupCount;
	DRAWGROUP*		m_pGroups;
	unsigned char	m_nTextureCount;
	TEXTURE*		m_pTextures;

protected:
	int m_nRef;
	GLuint m_nBoxList;

	void LoadInformation();
	void FreeInformation();
/*
	CRModel*	m_pRModel;
*/
};

#endif // _PIECEINF_H_