aboutsummaryrefslogtreecommitdiff
path: root/engines/titanic/star_control/star_camera.h
blob: ecc185c8f454e2f320f2bdd76df127dd3e387ea0 (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
/* ScummVM - Graphic Adventure Engine
 *
 * ScummVM is the legal property of its developers, whose names
 * are too numerous to list here. Please refer to the COPYRIGHT
 * file distributed with this source distribution.
 *
 * 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 2
 * 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, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 *
 */

#ifndef TITANIC_STAR_CAMERA_H
#define TITANIC_STAR_CAMERA_H

#include "titanic/support/simple_file.h"
#include "titanic/star_control/fmatrix.h"
#include "titanic/star_control/fpoint.h"
#include "titanic/star_control/base_stars.h"
#include "titanic/star_control/star_control_sub13.h"
#include "titanic/star_control/star_control_sub20.h"
#include "titanic/star_control/error_code.h"

namespace Titanic {

class CStarCamera {
private:
	static FMatrix *_matrix1;
	static FMatrix *_matrix2;
private:
	int _matrixRow;
	FMatrix _matrix;
	CStarControlSub20 *_handlerP;
	CStarControlSub13 _sub13;
	int _field108;
private:
	/**
	 * Set up a handler
	 */
	bool setupHandler(const CStar20Data *src);

	/**
	 * Deletes any previous handler
	 */
	void deleteHandler();

	/**
	 * Return whether the handler is locked
	 */
	bool isLocked() { return _handlerP->isLocked(); }
public:
	static void init();
	static void deinit();
public:
	CStarCamera(const CStar20Data *data);
	CStarCamera(CStarControlSub13 *src);
	virtual ~CStarCamera();

	virtual void proc2(const CStarControlSub13 *src);
	virtual void proc3(const CStar20Data *src);
	virtual void setPosition(const FVector &v);
	virtual void proc5(const FVector &v);
	virtual void proc6(int v);
	virtual void proc7(int v);
	virtual void proc8(int v);
	virtual void proc9(int v);
	virtual void proc10(int v);
	virtual void proc11();
	virtual void proc12(StarMode mode, double v2);
	virtual void proc13(CStarControlSub13 *dest);
	virtual void proc14(FVector &v);
	virtual void proc15(CErrorCode *errorCode);
	virtual void proc16();
	virtual void proc17();
	virtual void proc18();
	virtual void proc19();
	virtual void proc20(double factor);
	virtual void proc21(const FPose &pose);
	virtual void proc22(FMatrix &m);
	virtual FPose proc23();
	virtual FPose proc24();
	virtual double proc25() const;
	virtual double proc26() const;
	virtual int proc27() const;
	virtual FVector proc28(int index, const FVector &src);
	virtual FVector proc29(int index, const FVector &src);
	virtual FVector proc30(int index, const FVector &v);
	virtual FVector proc31(int index, const FVector &v);

	/**
	 * Sets the viewport position within the starfield
	 */
	virtual void setViewportPosition(const FPoint &angles);

	virtual int getMatrixRow() const { return _matrixRow; }
	virtual bool addMatrixRow(const FVector &v);
	virtual bool removeMatrixRow();
	virtual void proc36(double *v1, double *v2, double *v3, double *v4);

	/**
	 * Load the data for the class from file
	 */
	virtual void load(SimpleFile *file, int param);

	/**
	 * Save the data for the class to file
	 */
	virtual void save(SimpleFile *file, int indent);


	bool is108() const { return _field108; }
	void set108() { _field108 = true; }
	void reset108() { _field108 = false; }

	void fn1(CStarControlSub13 *sub13, const FVector &v);
	void fn2(FVector v1, FVector v2, FVector v3);
	void fn3(CStarControlSub13 *sub13, const FVector &v);
};

} // End of namespace Titanic

#endif /* TITANIC_STAR_CAMERA_H */