-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathShip.h
More file actions
125 lines (92 loc) · 2.38 KB
/
Ship.h
File metadata and controls
125 lines (92 loc) · 2.38 KB
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
/*
* Ship.h
* SPACEBATS
*
* Created by D! on 3/8/11.
* Copyright 2011 Stanford University. All rights reserved.
*/
class ParticleEngine;
class ParticleEmitter;
class LevelManager;
#ifndef SHIP_H
#define SHIP_H
#include "Framework.h"
#include "InputListener.h"
#include "Model.h"
#include "Camera.h"
#include "StatusBar.h"
#include "ParticleEngine.h"
#include "StatusText.h"
#include "btBulletDynamicsCommon.h"
#include "LevelManager.h"
#include "MusicManager.h"
#include <cmath>
#include "Body.h"
using namespace std;
#define NORMAL_SPEED 150.0
#define BOOST_SPEED 250.0
struct Rotation {
btQuaternion start;
btQuaternion end;
GLfloat time, duration;
};
struct Shake {
btVector3 position;
GLfloat time, duration;
};
class Ship : public InputListener {
public:
Ship(btVector3 pos, Camera* c, ParticleEngine* pE, LevelManager* lM, MusicManager* mM);
~Ship();
void handleEvent(sf::Event &event, const sf::Input &input);
void update(float tstep);
void setBoostBar(StatusBar* s);
void setHealthBar(StatusBar* s);
void setStatusText(StatusText *st);
Rotation *curRot;
Model model;
btVector3 pos;
btVector3 velocity;
btVector3 acceleration;
btQuaternion quat;
bool isStopping;
Camera* cam;
void setWorld(btDiscreteDynamicsWorld* world);
void testCollision();
btCollisionShape* spaceshipShape;
btCollisionObject* spaceshipCollider;
aiMesh* GetMesh();
private:
struct ShipContactCallback : public btCollisionWorld::ContactResultCallback {
Ship* spaceship;
ShipContactCallback(Ship* ship);
virtual btScalar addSingleResult(btManifoldPoint & cp,
const btCollisionObject* colObj0, int partId0, int index0,
const btCollisionObject* colObj1, int partId1, int index1);
};
friend struct ShipContactCallback;
btCollisionObject* lastCollision;
btDiscreteDynamicsWorld *world;
ShipContactCallback* callback;
StatusBar* boostBar;
StatusBar* healthBar;
StatusText *statusText;
void updatePosition(float tstep);
void updateRotation(float tstep);
void setRotation(btQuaternion end);
void shiverMeTimbers(bool goodExplosion);
void updateShake(float tstep);
Shake* curShake;
btQuaternion neutral;
btQuaternion maxRollLeft;
btQuaternion maxRollRight;
btQuaternion maxPitchUp;
btQuaternion maxPitchDown;
bool boostMode;
bool freezeBoost;
float freezeTime;
ParticleEngine* pEngine;
LevelManager* levelManager;
MusicManager* music;
};
#endif