summaryrefslogtreecommitdiffstats
path: root/src/old/model.h
blob: 9acfbbc6fe067a5dbcfc3d02813cfd07654dc157 (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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
// * This file is part of the COLOBOT source code
// * Copyright (C) 2001-2008, Daniel ROUX & EPSITEC SA, www.epsitec.ch
// *
// * This program is free software: you can redistribute it and/or modify
// * it under the terms of the GNU General Public License as published by
// * the Free Software Foundation, either version 3 of the License, or
// * (at your option) any later version.
// *
// * This program is distributed in the hope that it will be useful,
// * but WITHOUT ANY WARRANTY; without even the implied warranty of
// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// * GNU General Public License for more details.
// *
// * You should have received a copy of the GNU General Public License
// * along with this program. If not, see  http://www.gnu.org/licenses/.

// model.h

#pragma once


#include "common/event.h"
#include "old/modfile.h"
#include "math/point.h"


class CInstanceManager;
class CD3DEngine;
class CModFile;
class CInterface;



class CModel
{
public:
	CModel(CInstanceManager* iMan);
	~CModel();

	void		StartUserAction();
	void		StopUserAction();

	bool		EventProcess(const Event &event);

	void		InitView();
	void		InitViewFromSelect();
	void		UpdateView();
	void		ViewMove(const Event &event, float speed);

protected:
	bool		EventFrame(const Event &event);
	bool		GetVertex(int rank, D3DVERTEX2 &vertex);
	bool		SetVertex(int rank, D3DVERTEX2 &vertex);
	Math::Vector	RetSelectCDG();
	Math::Vector	RetSelectNormal();
	void		SmoothSelect();
	void		PlaneSelect();
	void		ColorSelect();
	void		StateSelect();
	void		MoveSelect(Math::Vector move);
	void		OperSelect(Math::Vector move, char oper);
	void		ReadScript(char *filename);
	void		BBoxCompute(Math::Vector &min, Math::Vector &max);
	bool		IsMappingSelectPlausible(D3DMaping D3Dmode);
	void		MappingSelect(int mode, int rotate, bool bMirrorX, bool bMirrorY, Math::Point ti, Math::Point ts, char *texName);
	void		MappingSelectSpherical(int mode, int rotate, bool bMirrorX, bool bMirrorY, Math::Point ti, Math::Point ts, char *texName);
	Math::Vector	RetMappingCenter(Math::Vector pos, Math::Vector min);
	void		MappingSelectCylindrical(int mode, int rotate, bool bMirrorX, bool bMirrorY, Math::Point ti, Math::Point ts, char *texName);
	void		MappingSelectFace(int mode, int rotate, bool bMirrorX, bool bMirrorY, Math::Point ti, Math::Point ts, char *texName);
	void		MappingSelect2(int texNum2, int subdiv, int offsetU, int offsetV, bool bMirrorX, bool bMirrorY);
	void		MappingSelectPlane2(int mode, bool bMirrorX, bool bMirrorY);
	void		MappingSelectSpherical2(bool bMirrorX, bool bMirrorY);
	void		MappingSelectMagic2(bool bMirrorX, bool bMirrorY);
	int			SearchNext(int rank, int step);
	int			SearchSamePlane(int first, int step);
	void		CurrentSearchNext(int step, bool bControl);
	void		CurrentInit();
	void		CurrentSelect(bool bSelect);
	void		DeselectAll();
	void		SelectAll();
	void		SelectZone(int first, int last);
	void		SelectTerm();
	void		DefaultSelect();
	void		SelectDelete();
	void		Compress();
	void		MinMaxSelect();
	void		MinMaxChange();
	void		UpdateInfoText();
	int*		RetTextureTable();
	void		TexturePartUpdate();
	void		TextureRankChange(int step);
	void		TexturePartChange(int step);
	void		PutTextureValues();
	void		GetTextureValues();
	void		GetModelName(char *buffer);
	void		GetDXFName(char *buffer);
	void		GetScriptName(char *buffer);
	bool		IsEditFocus();

protected:
	CInstanceManager* m_iMan;
	CD3DEngine*		m_engine;
	CModFile*		m_modFile;
	CInterface*		m_interface;

	float			m_time;
	ModelTriangle*	m_triangleTable;
	int				m_triangleSel1;
	int				m_triangleSel2;
	int				m_mode;
	int				m_textureMode;
	int				m_textureRotate;
	bool			m_bTextureMirrorX;
	bool			m_bTextureMirrorY;
	Math::Point			m_textureInf;
	Math::Point			m_textureSup;
	int				m_texturePart;
	int				m_textureRank;
	char			m_textureName[20];
	bool			m_bDisplayTransparent;
	bool			m_bDisplayOnlySelection;
	float			m_viewHeight;
	float			m_viewDist;
	float			m_viewAngleH;
	float			m_viewAngleV;
	int				m_color;
	int				m_state;
	int				m_secondTexNum;
	int				m_secondSubdiv;
	int				m_secondOffsetU;
	int				m_secondOffsetV;
	char			m_oper;
	float			m_min;
	float			m_max;
};