Gem Illuminator
 All Classes Namespaces Files Functions Variables Enumerations Enumerator Macros
scene.h
Go to the documentation of this file.
1 #ifndef SCENE_H
2 #define SCENE_H
3 
4 #include <QQuickItem>
5 #include <QQmlListProperty>
6 
7 class QOpenGLFunctions;
8 class QOpenGLShaderProgram;
9 class QMatrix4x4;
10 
11 class AbstractGem;
12 class Camera;
13 class LightRay;
14 class Navigation;
15 class SceneBounds;
16 class Triangle;
17 
22 class Scene : public QQuickItem
23 {
24  Q_OBJECT
25  Q_PROPERTY(QQmlListProperty<AbstractGem> geometries READ geometriesQML NOTIFY geometriesChanged)
26  Q_PROPERTY(Camera* camera READ camera WRITE setCamera)
27  Q_PROPERTY(Camera* previewCamera READ previewCamera WRITE setPreviewCamera)
29 
30 public:
36  explicit Scene(QQuickItem *parent = 0);
37  virtual ~Scene();
38 
46  QQmlListProperty<AbstractGem> geometriesQML();
48 
49  Camera* camera() const;
50  void setCamera(Camera *camera);
51 
52  Camera* previewCamera() const;
53  void setPreviewCamera(Camera *camera);
54 
61  AbstractGem *findGemWithBoundingSphereIntersectedBy(const LightRay &ray, QVector3D *collisionPoint = nullptr) const;
62 
69  AbstractGem *findGemIntersectedBy(const LightRay &ray, QVector3D *collisionPoint = nullptr) const;
70 
75  void setCurrentGem(AbstractGem *currentGem);
76 
77  LightRay *rootLightRay() const;
78  void setRootLightRay(LightRay *rootLightRay);
79 
80 signals:
81  void cubesChanged();
82  void geometriesChanged();
83  void rootLightRayChanged();
84  void gameStarted();
85  void gameLost();
86 
87 public slots:
88  virtual void update(int elapsedTime);
89 
90  void handleGameLost();
91  void handleGameStarted();
92 
93  void registerNavigation(Navigation *navigation);
94  void rotateCurrentGem(const QQuaternion &quaternion);
95 
96 protected:
104 };
105 
106 #endif // SCENE_H
void handleGameLost()
Definition: scene.cpp:42
AbstractGem * findGemIntersectedBy(const LightRay &ray, QVector3D *collisionPoint=nullptr) const
Finds the nearest gem with bounding sphere intersected by given ray.
Definition: scene.cpp:102
The LightRay class describes the lightrays sent into Scene. Because LightRays are sent into Scene ri...
Definition: lightray.h:24
void registerNavigation(Navigation *navigation)
Definition: scene.cpp:57
void setPreviewCamera(Camera *camera)
Definition: scene.cpp:87
The Triangle class represents a triangle in three dimensional space.
Definition: triangle.h:11
Scene(QQuickItem *parent=0)
Creates a new scene without any further information. Before use scene you have to set geometries()...
Definition: scene.cpp:16
void gameStarted()
virtual ~Scene()
Definition: scene.cpp:27
void setCamera(Camera *camera)
Definition: scene.cpp:77
AbstractGem * m_currentGem
Definition: scene.h:100
The Camera class provides view and perspective projection matrices. Additional the viewport of camera...
Definition: camera.h:16
AbstractGem * findGemWithBoundingSphereIntersectedBy(const LightRay &ray, QVector3D *collisionPoint=nullptr) const
Finds the nearest gem, that bounding sphere is intersected by given ray.
Definition: scene.cpp:121
Camera * camera() const
void handleGameStarted()
Definition: scene.cpp:47
void geometriesChanged()
void cubesChanged()
Definition: moc_scene.cpp:194
The Scene class provides access to geometry and collision detection methods. Furthermore, some game logic is implemented, so the scene holds the player, the gem influenced by player and cameras.
Definition: scene.h:22
Camera * m_previewCamera
Definition: scene.h:99
LightRay * rootLightRay() const
Navigation * m_navigation
Definition: scene.h:102
virtual void update(int elapsedTime)
Definition: scene.cpp:37
void gameLost()
QList< AbstractGem * > m_gems
Definition: scene.h:101
The Navigation class provides an interface for all navigation techniques. The navigation takes euler...
Definition: navigation.h:16
Camera * previewCamera() const
SceneBounds * m_bounds
Definition: scene.h:97
QList< AbstractGem * > geometries()
The SceneBounds class is a special kind of gem describing the bounds of scene. The shape of the bound...
Definition: scenebounds.h:17
void setRootLightRay(LightRay *rootLightRay)
Definition: scene.cpp:97
LightRay * m_rootLightRay
Definition: scene.h:103
The AbstractGem class is the base class of all gems. As base class all required information of a gem...
Definition: abstractgem.h:39
QQmlListProperty< AbstractGem > geometriesQML()
Allow QML classes to read our gems. Initially it was planned to manipulate our gems from QML classes...
Definition: scene.cpp:52
void rotateCurrentGem(const QQuaternion &quaternion)
Definition: scene.cpp:67
Camera * m_camera
Definition: scene.h:98
void rootLightRayChanged()
void setCurrentGem(AbstractGem *currentGem)
Sets the gem, that will be controlled by player.
Definition: scene.cpp:140