diff options
| author | Samu Laaksonen <laaksonen.sj@gmail.com> | 2012-10-19 21:36:44 +0300 |
|---|---|---|
| committer | Samu Laaksonen <laaksonen.sj@gmail.com> | 2012-10-19 21:36:44 +0300 |
| commit | fe15901cad4ccc90b5702cf5061849c1ab1fd40d (patch) | |
| tree | 0148609d571ae7bc93a04acf8fc45647d057aaf1 | |
| parent | a0f7ab0f77fa81b77d03de751e4a5f4e07c49d25 (diff) | |
| download | prism-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.cpp | 7 | ||||
| -rw-r--r-- | src/ActionScene.h | 6 | ||||
| -rw-r--r-- | src/BarDisplay.cpp | 36 | ||||
| -rw-r--r-- | src/BarDisplay.h | 2 | ||||
| -rw-r--r-- | src/CircularDisplay.cpp | 30 | ||||
| -rw-r--r-- | src/CircularDisplay.h | 1 | ||||
| -rw-r--r-- | src/HeadsUpDisplay.cpp | 59 | ||||
| -rw-r--r-- | src/HeadsUpDisplay.h | 11 |
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; |
