aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamu Laaksonen <laaksonen.sj@gmail.com>2012-09-29 17:02:52 +0300
committerSamu Laaksonen <laaksonen.sj@gmail.com>2012-09-29 17:02:52 +0300
commit87618947d1de7cdd1ff9a8047acec3279ef253b4 (patch)
tree986b1c867878c373aa3c94a67ccfeedec9333576
parent1cf5a427a829b22abea7027b18a130a01da3ed6a (diff)
downloadprism-87618947d1de7cdd1ff9a8047acec3279ef253b4.tar.gz
prism-87618947d1de7cdd1ff9a8047acec3279ef253b4.zip
Level loading update
Improved level loading - added better first test level - mapLoader now loads all data layers from level files - TODO: further improve loader so it can read layer depths too - added unloadMap() to release resources used by levels
-rw-r--r--data/levels/level_1.tmx19
-rw-r--r--data/levels/tileset/tileset.pngbin695 -> 0 bytes
-rw-r--r--data/levels/tileset/tileset2.pngbin0 -> 2815 bytes
-rw-r--r--src/ActionScene.cpp99
-rw-r--r--src/ActionScene.h20
5 files changed, 111 insertions, 27 deletions
diff --git a/data/levels/level_1.tmx b/data/levels/level_1.tmx
index 6d374fc..6c77c45 100644
--- a/data/levels/level_1.tmx
+++ b/data/levels/level_1.tmx
@@ -1,11 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<map version="1.0" orientation="orthogonal" width="25" height="15" tilewidth="32" tileheight="32">
- <tileset firstgid="1" name="base" tilewidth="32" tileheight="32">
- <image source="tileset/tileset.png" width="32" height="32"/>
+ <tileset firstgid="1" name="tileset2" tilewidth="32" tileheight="32">
+ <image source="tileset/tileset2.png" width="96" height="96"/>
</tileset>
- <layer name="solidground" width="25" height="15">
+ <layer name="solid" width="25" height="15">
+ <properties>
+ <property name="type" value="solid"/>
+ </properties>
<data encoding="base64" compression="zlib">
- eJxjYBgFwxUwomFS1ROjZ6iDweTfoRD+2NxIT3fisn8UY2IAdcAAZA==
+ eJxjYBgFo2BwARYgZgViNjT2SAKjYTBwAFfYU5PNDsQcQMxJQzYAG8cBgA==
+ </data>
+ </layer>
+ <layer name="plants" width="25" height="15">
+ <properties>
+ <property name="type" value="covering"/>
+ </properties>
+ <data encoding="base64" compression="zlib">
+ eJxjYBgFo4B4wAjETEDMjMYeSWA0DAYO4Ap7arKHCwAAgOgASg==
</data>
</layer>
</map>
diff --git a/data/levels/tileset/tileset.png b/data/levels/tileset/tileset.png
deleted file mode 100644
index 017027b..0000000
--- a/data/levels/tileset/tileset.png
+++ /dev/null
Binary files differ
diff --git a/data/levels/tileset/tileset2.png b/data/levels/tileset/tileset2.png
new file mode 100644
index 0000000..a840ea9
--- /dev/null
+++ b/data/levels/tileset/tileset2.png
Binary files differ
diff --git a/src/ActionScene.cpp b/src/ActionScene.cpp
index c121f33..cc6faa4 100644
--- a/src/ActionScene.cpp
+++ b/src/ActionScene.cpp
@@ -5,6 +5,7 @@
#include <QDebug>
#include <QGraphicsPixmapItem>
#include <QGraphicsSceneMouseEvent>
+#include <QKeyEvent>
#include <QSettings>
@@ -43,10 +44,12 @@ ActionScene::ActionScene(const QString &name, const QRectF &rect, GameView *pare
m_map = 0;
m_mapRenderer = 0;
+ // initialize rand here
qsrand(QTime::currentTime().msec());
+ // TODO: implement some logic to randomize color bubbles given to player
- m_hero = new Hero(this, QPointF(100, 300));
- connect(m_hero, SIGNAL(removeMe()), this, SLOT(removeSprite()));
+ //m_hero = new Hero(this, QPointF(100, 300));
+ //connect(m_hero, SIGNAL(removeMe()), this, SLOT(removeSprite()));
}
ActionScene::~ActionScene()
@@ -71,6 +74,33 @@ void ActionScene::updateLogic()
void ActionScene::keyPressEvent(QKeyEvent *event)
{
QGraphicsScene::keyPressEvent(event);
+
+ switch(event->key())
+ {
+ // arrow up
+ case 16777235:
+ break;
+ // arrow down
+ case 16777237:
+ break;
+ // arrow left
+ case 16777234:
+ break;
+ // arrow right
+ case 16777236 :
+ break;
+ // button a
+ case 65:
+ break;
+ // button s
+ case 83:
+ break;
+ // button d
+ case 68 :
+ break;
+ default:
+ break;
+ }
}
void ActionScene::loadMap(QString target)
@@ -94,25 +124,42 @@ void ActionScene::loadMap(QString target)
qDebug() << "size" << m_map->width() << "x" << m_map->height();
qDebug() << "layers" << m_map->layerCount();
- QImage img(m_map->width() * m_map->tileWidth(),
- m_map->height() * m_map->tileHeight(),
- QImage::Format_ARGB32);
+ for(int layer = 0; layer < m_map->layerCount(); layer++)
+ {
+ QImage img(m_map->width() * m_map->tileWidth(),
+ m_map->height() * m_map->tileHeight(),
+ QImage::Format_ARGB32);
+
+ QPainter painter(&img);
+ m_mapRenderer->drawTileLayer(&painter, m_map->layerAt(layer)->asTileLayer());
+
+ QPixmap mapPixmap = QPixmap::fromImage(img);
+ m_mapPixmaps.append(mapPixmap);
- QPainter painter(&img);
- m_mapRenderer->drawTileLayer(&painter, m_map->layerAt(0)->asTileLayer());
+ qDebug() << "hasAlpha" << mapPixmap.hasAlpha() << "\n"
+ << "hasAlphaChannel" << mapPixmap.hasAlphaChannel();
- m_mapPixmap = QPixmap::fromImage(img);
+ QGraphicsPixmapItem* mapPixmapItem = addPixmap(mapPixmap);
+ mapPixmapItem->setPos(0, 0);
+ mapPixmapItem->setShapeMode(QGraphicsPixmapItem::MaskShape);
- qDebug() << "hasAlpha" << m_mapPixmap.hasAlpha() << "\n"
- << "hasAlphaChannel" << m_mapPixmap.hasAlphaChannel();
+ QString type = m_map->layerAt(layer)->property("type");
- m_mapPixmapItem = addPixmap(m_mapPixmap);
- m_mapPixmapItem->setPos(0, 0);
- m_mapPixmapItem->setData(ITEM_OBJECTNAME, QString("SolidGround"));
- m_mapPixmapItem->setShapeMode(QGraphicsPixmapItem::MaskShape);
- m_mapPixmapItem->setZValue(1);
+ if (type == "solid")
+ {
+ mapPixmapItem->setData(ITEM_OBJECTNAME, QString("SolidGround"));
+ mapPixmapItem->setZValue(1);
+ }
+ else if (type == "covering")
+ {
+ mapPixmapItem->setData(ITEM_OBJECTNAME, QString("Covering"));
+ mapPixmapItem->setZValue(2);
+ }
+
+ mapPixmapItem->setPixmap(mapPixmap);
- m_mapPixmapItem->setPixmap(m_mapPixmap);
+ m_mapPixmapItems.append(mapPixmapItem);
+ }
ObjectGroup* fish = NULL;
@@ -138,6 +185,26 @@ void ActionScene::loadMap(QString target)
m_clearAlert = false;
}
+void ActionScene::unloadMap()
+{
+ foreach(QGraphicsPixmapItem* removableItem, m_mapPixmapItems)
+ {
+ removeItem(removableItem);
+ }
+
+ for(int i = m_mapPixmapItems.size() - 1; i > 0; i++)
+ delete m_mapPixmapItems.at(i);
+
+ m_mapPixmapItems.clear();
+
+ m_mapPixmaps.clear();
+
+ if (m_mapRenderer)
+ delete m_mapRenderer;
+ if (m_map)
+ delete m_map;
+}
+
void ActionScene::removeSprite()
{
qDebug() << "removing a sprite";
diff --git a/src/ActionScene.h b/src/ActionScene.h
index 49fdb20..28d032b 100644
--- a/src/ActionScene.h
+++ b/src/ActionScene.h
@@ -31,6 +31,11 @@ public:
*/
void loadMap(QString target);
+ /**
+ * Unloads map, releasing its resources from memory
+ */
+ void unloadMap();
+
private:
Tiled::Map *m_map;
@@ -44,10 +49,16 @@ private:
int m_levelScore;
//! Map layer is drawn to this pixmap
- QPixmap m_mapPixmap;
+ //QPixmap m_mapPixmap;
//! Item for map layer
- QGraphicsPixmapItem *m_mapPixmapItem;
+ //QGraphicsPixmapItem *m_mapPixmapItem;
+
+ //! Map layers are drawn to these pixmaps
+ QVector<QPixmap> m_mapPixmaps;
+
+ //! Items for map layers
+ QVector<QGraphicsPixmapItem*> m_mapPixmapItems;
//! What portion of the map to draw
QSize m_mapWindow;
@@ -65,11 +76,6 @@ private:
//! Stops graphics rendering while scene is cleared.
bool m_clearAlert;
- //! HP text item
- QGraphicsTextItem* m_hpText;
- //! Score text item
- QGraphicsTextItem* m_scoreText;
-
signals:
void gameOver();