Terminus
abstractwagon.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <QString>
4 #include <memory>
5 
6 #include <util/timer.h>
8 
9 namespace terminus
10 {
11 class Train;
12 
14 {
15  INVALID = 0,
19 };
20 
26 {
27 public:
28  AbstractWagon(World & world, Train * train);
29  virtual ~AbstractWagon();
30 
35  virtual void primaryAction() final;
36 
40  virtual void primaryActionDebug() final;
41 
46  virtual void primaryActionInternal() = 0;
47 
51  virtual void localUpdate() override;
52 
57  virtual void onBindCamera() override;
58 
65  virtual void adjustCamera();
66 
71  virtual void rotateEvent(QVector2D rotation);
72 
73  virtual void setHealth(float health);
74  virtual float currentHealth() const;
75  virtual float maxHealth() const;
76 
77  virtual void resetCooldown() const;
78  virtual float cooldown() const;
79  virtual float cooldownTime() const = 0;
80  virtual bool isOnCooldown() const;
81 
82  virtual bool isDisabled() const;
83  virtual WagonType wagonType() const;
84  virtual float length() const;
85 
90  virtual bool isOtherTrainLeft() const;
91 
96  virtual void setPositionOffset(float accumulatedOffset);
97 
103  virtual void onCollisionWith(AbstractPhysicsObject * other) override;
104 
105 protected:
106  virtual short myCollisionType() const override;
107  virtual short possibleCollisionTypes() const override;
108 
113  virtual QVector3D localCameraCenter();
114 
119  virtual QVector3D localCameraEye();
120 
121 protected:
122  QVector3D m_cameraEyeOffset;
123  QVector3D m_previousEye;
124  QVector3D m_previousCenter;
126 
128  float m_health;
130 
132 
134 };
135 
136 }
virtual void setPositionOffset(float accumulatedOffset)
Sets the distance between this wagon and the first wagon on the spline.
Definition: abstractwagon.cpp:167
float m_health
Definition: abstractwagon.h:128
virtual bool isOnCooldown() const
Definition: abstractwagon.cpp:113
virtual void resetCooldown() const
Definition: abstractwagon.cpp:108
virtual void onBindCamera() override
saves the previous camera position to animate the camera transition
Definition: abstractwagon.cpp:68
virtual float cooldownTime() const =0
Train * m_train
Definition: abstractwagon.h:133
virtual void primaryActionInternal()=0
The method that every wagon should override in order to define the wagon-specific primary action...
virtual QVector3D localCameraCenter()
Calculates the camera position vector in model space.
Definition: abstractwagon.cpp:191
virtual ~AbstractWagon()
Definition: abstractwagon.cpp:29
virtual void primaryActionDebug() final
Invokes wagon-specific primary action without any checks.
Definition: abstractwagon.cpp:47
AbstractWagon(World &world, Train *train)
Definition: abstractwagon.cpp:19
virtual void onCollisionWith(AbstractPhysicsObject *other) override
Shakes the camera if the wagon was hit by a Projectile.
Definition: abstractwagon.cpp:172
virtual WagonType wagonType() const
Definition: abstractwagon.cpp:162
The AbstractPhysicsObject class represents a graphical scene element with a physics-based aspect...
Definition: abstractphysicsobject.h:21
virtual void localUpdate() override
Updates wagon position and rotation.
Definition: abstractwagon.cpp:52
virtual void setHealth(float health)
Definition: abstractwagon.cpp:128
Definition: abstractwagon.h:16
virtual void adjustCamera()
moves the camera according to this wagons position and orientation
Definition: abstractwagon.cpp:76
unsigned int TimerID
Definition: timer.h:21
virtual float length() const
Definition: abstractwagon.cpp:147
Definition: abstractwagon.h:18
bool m_disabled
Definition: abstractwagon.h:129
virtual float currentHealth() const
Definition: abstractwagon.cpp:123
virtual void rotateEvent(QVector2D rotation)
rotates the camera position in model space
Definition: abstractwagon.cpp:92
virtual QVector3D localCameraEye()
Calculates the camera eye vector in model space.
Definition: abstractwagon.cpp:208
QVector3D m_cameraEyeOffset
Definition: abstractwagon.h:122
Definition: abstractwagon.h:17
virtual float maxHealth() const
Definition: abstractwagon.cpp:103
The World class represents a running game instance and contains all graphical (3D) elements of the sc...
Definition: world.h:46
virtual short possibleCollisionTypes() const override
The groups of objects that this object will collide with.
Definition: abstractwagon.cpp:186
virtual short myCollisionType() const override
The collision group that this object is member of.
Definition: abstractwagon.cpp:181
Timer::TimerID m_cooldownTimer
Definition: abstractwagon.h:131
A kinematic physics object is a "scripted" physics object, meaning that it will set its own movement...
Definition: kinematicphysicsobject.h:13
virtual bool isDisabled() const
Definition: abstractwagon.cpp:157
QVector3D m_previousCenter
Definition: abstractwagon.h:124
Definition: eventhandler.cpp:18
The AbstractWagon class provides a common interface for all wagon types and contains common functiona...
Definition: abstractwagon.h:25
Timer::TimerID m_cameraTimer
Definition: abstractwagon.h:125
QQuaternion rotation() const
Definition: abstractgraphicsobject.cpp:156
float m_positionOffset
Definition: abstractwagon.h:127
virtual float cooldown() const
Definition: abstractwagon.cpp:118
virtual void primaryAction() final
Invokes wagon-specific primary action if the wagon is enabled and is not on cooldown.
Definition: abstractwagon.cpp:35
virtual bool isOtherTrainLeft() const
Determines whether the primary view direction should be left or right.
Definition: abstractwagon.cpp:152
WagonType
Definition: abstractwagon.h:13
Definition: abstractwagon.h:15
QVector3D m_previousEye
Definition: abstractwagon.h:123
The Train class works as a logical container for all wagons one train consists of.
Definition: train.h:25