aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamu Laaksonen <laaksonen.sj@gmail.com>2012-10-19 21:36:44 +0300
committerSamu Laaksonen <laaksonen.sj@gmail.com>2012-10-19 21:36:44 +0300
commitfe15901cad4ccc90b5702cf5061849c1ab1fd40d (patch)
tree0148609d571ae7bc93a04acf8fc45647d057aaf1
parenta0f7ab0f77fa81b77d03de751e4a5f4e07c49d25 (diff)
downloadprism-fe15901cad4ccc90b5702cf5061849c1ab1fd40d.tar.gz
prism-fe15901cad4ccc90b5702cf5061849c1ab1fd40d.zip
HUD improvement
Added - some placeholder graphics for HUD elements - just to demonstrate how HUD may be implemented with drawForeground of ActionScene
-rw-r--r--src/ActionScene.cpp7
-rw-r--r--src/ActionScene.h6
-rw-r--r--src/BarDisplay.cpp36
-rw-r--r--src/BarDisplay.h2
-rw-r--r--src/CircularDisplay.cpp30
-rw-r--r--src/CircularDisplay.h1
-rw-r--r--src/HeadsUpDisplay.cpp59
-rw-r--r--src/HeadsUpDisplay.h11
8 files changed, 119 insertions, 33 deletions
diff --git a/src/ActionScene.cpp b/src/ActionScene.cpp
index cdf1602..8c6d374 100644
--- a/src/ActionScene.cpp
+++ b/src/ActionScene.cpp
@@ -19,6 +19,7 @@
#include "Hero.h"
#include "ParallaxScrollerStatic.h"
#include "Collectible.h"
+#include "HeadsUpDisplay.h"
#include "layer.h"
#include "objectgroup.h"
@@ -26,6 +27,8 @@
#include "tile.h"
#include "tilelayer.h"
+#include "Box2D/Dynamics/b2World.h"
+
#include "ActionScene.h"
using Tiled::Map;
@@ -46,6 +49,8 @@ ActionScene::ActionScene(const QString &name, const QRectF &rect, GameView *pare
m_map = 0;
m_mapRenderer = 0;
+ m_hud = new HeadsUpDisplay(sceneRect().width(), sceneRect().height(), this, this);
+
// start setting up the world here
//b2Vec2 gravity(0.0f, -10.0f);
//m_physicalWorld = new b2World(gravity);
@@ -120,7 +125,7 @@ void ActionScene::drawBackground(QPainter *painter, const QRectF &rect)
void ActionScene::drawForeground(QPainter *painter, const QRectF &rect)
{
-
+ painter->drawPixmap(0, 0, width(), height(), *m_hud);
}
void ActionScene::loadMap(QString target)
diff --git a/src/ActionScene.h b/src/ActionScene.h
index bd40976..6460523 100644
--- a/src/ActionScene.h
+++ b/src/ActionScene.h
@@ -12,8 +12,11 @@
#include "mapreader.h"
#include "orthogonalrenderer.h"
+#include "Box2D.h"
+
class QGraphicsPixmapItem;
class Hero;
+class HeadsUpDisplay;
class b2World;
@@ -84,6 +87,9 @@ private:
//! Stops graphics rendering while scene is cleared.
bool m_clearAlert;
+ //! This item contais all hud elements, rendered in drawForeground
+ HeadsUpDisplay* m_hud;
+
signals:
void gameOver();
diff --git a/src/BarDisplay.cpp b/src/BarDisplay.cpp
index 4b27b55..b3e6260 100644
--- a/src/BarDisplay.cpp
+++ b/src/BarDisplay.cpp
@@ -1,3 +1,5 @@
+#include <QPainter>
+
#include "BarDisplay.h"
BarDisplay::BarDisplay(int w, int h) :
@@ -7,17 +9,41 @@ BarDisplay::BarDisplay(int w, int h) :
m_maxValue = 50;
m_value = 50;
- /* TODO:
- initialize this item with some kind of rectangle graphics
- that supports partitioning, e.g.
- [ / / ] or such
- */
+ fill(QColor(Qt::transparent));
}
BarDisplay::~BarDisplay()
{
}
+void BarDisplay::initShape()
+{
+ QPainter p(this);
+ QPen pen(QColor(0, 0, 0, 255));
+ pen.setWidth(1);
+
+ QBrush brush(m_displayColor);
+
+ p.setPen(pen);
+ p.fillRect(0, 0, width(), height(), brush);
+
+ // left side
+ p.drawLine(0, 0, 0, height() - 1);
+ p.drawLine(0, 0, 20, 0);
+ p.drawLine(0, height() - 1, 20, height() - 1);
+
+ // right side
+ p.drawLine(width() - 1, 0, width() - 1, height() - 1);
+ p.drawLine(width() - 1, 0, width() -1 - 20, 0);
+ p.drawLine(width() - 1, height() - 1, width() - 1 - 20, height() - 1);
+
+ pen.setWidth(2);
+ p.setPen(pen);
+ // the | -lines
+ for (int i = 1; i < 4; i++)
+ p.drawLine((160 / 3) * i, 0, (160 / 3) * i - 15, height() - 1);
+}
+
void BarDisplay::collected(int amount)
{
m_value += amount;
diff --git a/src/BarDisplay.h b/src/BarDisplay.h
index a06b9ef..27b4d2a 100644
--- a/src/BarDisplay.h
+++ b/src/BarDisplay.h
@@ -9,6 +9,8 @@ public:
BarDisplay(int w = 250, int h = 40);
virtual ~BarDisplay();
+ void initShape();
+
void collected(int);
void consumed(int);
void setDisplayColor(QColor col);
diff --git a/src/CircularDisplay.cpp b/src/CircularDisplay.cpp
index 438ebc0..31136e7 100644
--- a/src/CircularDisplay.cpp
+++ b/src/CircularDisplay.cpp
@@ -11,29 +11,29 @@ CircularDisplay::CircularDisplay(int w, int h) :
m_activated = false;
fill(QColor(Qt::transparent));
+}
+
+CircularDisplay::~CircularDisplay()
+{
+}
+void CircularDisplay::initShape()
+{
QPainter p(this);
QPen pen(QColor(0, 0, 0, 255));
+ QBrush brush(m_displayColor);
+
+ pen.setWidth(5);
p.setPen(pen);
+ p.setBrush(brush);
// draw base ellipse
- p.drawEllipse(45, 45, 35, 35);
+ p.drawEllipse(QPointF(25, 35), 20, 20);
// draw "tick" lines
- p.drawLine(45, 10, 45, 0); // 12 o'clock
- p.drawLine(62.5, 27.5, 70, 20); // 1.5 o'clock
- p.drawLine(80, 45, 90, 45); // 3 o'clock
- p.drawLine(62.5, 62.5, 70, 70); // 4.5 o'clock
- p.drawLine(45, 80, 80, 90); // 6 o'clock
-
- /* TODO:
- initialize this item with some kind of rounds graphics
- that supports partitioning
- */
-}
-
-CircularDisplay::~CircularDisplay()
-{
+ p.drawLine(25, 15, 25, 0); // 12 o'clock
+ p.drawLine(45, 35, 60, 35); // 3 o'clock
+ p.drawLine(25, 55, 25, 70); // 6 o'clock
}
void CircularDisplay::setDisplayColor(QColor col)
diff --git a/src/CircularDisplay.h b/src/CircularDisplay.h
index a82d53b..1e5f0da 100644
--- a/src/CircularDisplay.h
+++ b/src/CircularDisplay.h
@@ -9,6 +9,7 @@ public:
CircularDisplay(int w = 90, int h = 90);
virtual ~CircularDisplay();
+ void initShape();
void setDisplayColor(QColor col);
void collected(int amount);
void activate();
diff --git a/src/HeadsUpDisplay.cpp b/src/HeadsUpDisplay.cpp
index 6aec6e3..2afa0a5 100644
--- a/src/HeadsUpDisplay.cpp
+++ b/src/HeadsUpDisplay.cpp
@@ -1,22 +1,61 @@
+#include <QPainter>
+
#include "BarDisplay.h"
#include "CircularDisplay.h"
#include "HeadsUpDisplay.h"
-HeadsUpDisplay::HeadsUpDisplay(QGraphicsScene* anchorScene, QObject *parent) :
- QObject(parent)
+HeadsUpDisplay::HeadsUpDisplay(int w, int h, QGraphicsScene *anchorScene, QObject *parent) :
+ QPixmap(w, h), QObject(parent)
{
- m_healtBar = new BarDisplay();
- m_healtBar->setDisplayColor(QColor(0, 255, 255));
- m_redColor = new CircularDisplay();
- m_redColor->setDisplayColor(QColor(255, 0, 0));
- m_greenColor = new CircularDisplay();
- m_greenColor->setDisplayColor(QColor(0, 255, 0));
- m_blueColor = new CircularDisplay();
- m_blueColor->setDisplayColor(QColor(0, 0, 255));
+ fill(QColor(Qt::transparent));
+ m_healtBar = new BarDisplay(200, 40);
+ m_healtBar->setDisplayColor(QColor(255, 0, 127, 127));
+ m_healtBar->initShape();
+
+ m_redColor = new CircularDisplay(70, 70);
+ m_redColor->setDisplayColor(QColor(127, 0, 0, 127));
+ m_redColor->initShape();
+
+ m_greenColor = new CircularDisplay(70, 70);
+ m_greenColor->setDisplayColor(QColor(0, 127, 0, 127));
+ m_greenColor->initShape();
+
+ m_blueColor = new CircularDisplay(70, 70);
+ m_blueColor->setDisplayColor(QColor(0, 0, 127, 127));
+ m_blueColor->initShape();
+
+ m_anchorScene = anchorScene;
+
+ QPainter p(this);
+
+ p.drawPixmap(10, 20, *m_redColor);
+ p.drawPixmap(10, 120, *m_greenColor);
+ p.drawPixmap(10, 220, *m_blueColor);
+ p.drawPixmap(300, 430, *m_healtBar);
}
HeadsUpDisplay::~HeadsUpDisplay()
{
}
+
+CircularDisplay *HeadsUpDisplay::redDisplay() const
+{
+ return m_redColor;
+}
+
+CircularDisplay *HeadsUpDisplay::greenDisplay() const
+{
+ return m_greenColor;
+}
+
+CircularDisplay *HeadsUpDisplay::blueDisplay() const
+{
+ return m_blueColor;
+}
+
+BarDisplay *HeadsUpDisplay::healthDisplay() const
+{
+ return m_healtBar;
+}
diff --git a/src/HeadsUpDisplay.h b/src/HeadsUpDisplay.h
index ed88270..940b36a 100644
--- a/src/HeadsUpDisplay.h
+++ b/src/HeadsUpDisplay.h
@@ -1,23 +1,30 @@
#ifndef HeadsUpDisplay_h
#define HeadsUpDisplay_h
#include <QObject>
+#include <QPixmap>
class QGraphicsScene;
class BarDisplay;
class CircularDisplay;
-class HeadsUpDisplay : public QObject
+class HeadsUpDisplay : public QObject, public QPixmap
{
Q_OBJECT
public:
- HeadsUpDisplay(QGraphicsScene* anchorScene, QObject *parent = 0);
+ HeadsUpDisplay(int w, int h, QGraphicsScene* anchorScene, QObject *parent = 0);
virtual ~HeadsUpDisplay();
+
+ CircularDisplay* redDisplay() const;
+ CircularDisplay* greenDisplay() const;
+ CircularDisplay* blueDisplay() const;
+ BarDisplay* healthDisplay() const;
signals:
public slots:
private:
+ QGraphicsScene* m_anchorScene;
BarDisplay* m_healtBar;
CircularDisplay* m_redColor;
CircularDisplay* m_greenColor;