diff options
| author | Samu Laaksonen <laaksonen.sj@gmail.com> | 2012-10-18 23:58:18 +0300 |
|---|---|---|
| committer | Samu Laaksonen <laaksonen.sj@gmail.com> | 2012-10-18 23:58:18 +0300 |
| commit | a0f7ab0f77fa81b77d03de751e4a5f4e07c49d25 (patch) | |
| tree | 92c033e000f6796f3e679ee8ba58bf83844b84c5 /src/ActionScene.cpp | |
| parent | 2049e08432907f645f5a3786ea4f50a6456b77c4 (diff) | |
| download | prism-a0f7ab0f77fa81b77d03de751e4a5f4e07c49d25.tar.gz prism-a0f7ab0f77fa81b77d03de751e4a5f4e07c49d25.zip | |
Box2d precommit
Added
- box2d source codes to be added in project when there is no longer cba
- some base ideas to display classes
Improved
- level loading : layer with property "solid" is now loaded tile by
tile, this allows adding static rigid bodies to these items for
collision detection
Diffstat (limited to 'src/ActionScene.cpp')
| -rw-r--r-- | src/ActionScene.cpp | 135 |
1 files changed, 92 insertions, 43 deletions
diff --git a/src/ActionScene.cpp b/src/ActionScene.cpp index 8799e3e..cdf1602 100644 --- a/src/ActionScene.cpp +++ b/src/ActionScene.cpp @@ -24,6 +24,7 @@ #include "objectgroup.h" #include "mapobject.h" #include "tile.h" +#include "tilelayer.h" #include "ActionScene.h" @@ -33,17 +34,23 @@ using Tiled::OrthogonalRenderer; using Tiled::Layer; using Tiled::ObjectGroup; using Tiled::Tile; +using Tiled::TileLayer; ActionScene::ActionScene(const QString &name, const QRectF &rect, GameView *parent) : GameScene(name, parent) { setSceneRect(rect); m_clearAlert = false; - m_mapReader = new MapReader; + m_mapReader = new Tiled::MapReader; m_map = 0; m_mapRenderer = 0; + // start setting up the world here + //b2Vec2 gravity(0.0f, -10.0f); + //m_physicalWorld = new b2World(gravity); + //m_physicalWorld->SetAllowSleeping(true); + // initialize rand here qsrand(QTime::currentTime().msec()); // TODO: implement some logic to randomize color bubbles given to player @@ -59,7 +66,10 @@ ActionScene::~ActionScene() if (m_mapReader) delete m_mapReader; if (m_mapRenderer) - delete m_mapRenderer; + delete m_mapRenderer; + + if(m_physicalWorld) + ;//delete m_physicalWorld; } void ActionScene::updateLogic() @@ -103,6 +113,11 @@ void ActionScene::keyPressEvent(QKeyEvent *event) } } +void ActionScene::drawBackground(QPainter *painter, const QRectF &rect) +{ + +} + void ActionScene::drawForeground(QPainter *painter, const QRectF &rect) { @@ -124,69 +139,103 @@ void ActionScene::loadMap(QString target) return; } - m_mapRenderer = new OrthogonalRenderer(m_map); + m_mapRenderer = new Tiled::OrthogonalRenderer(m_map); qDebug() << "size" << m_map->width() << "x" << m_map->height(); qDebug() << "layers" << m_map->layerCount(); 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); - - qDebug() << "hasAlpha" << mapPixmap.hasAlpha() << "\n" - << "hasAlphaChannel" << mapPixmap.hasAlphaChannel(); - - QGraphicsPixmapItem* mapPixmapItem = addPixmap(mapPixmap); - mapPixmapItem->setPos(0, 0); - mapPixmapItem->setShapeMode(QGraphicsPixmapItem::MaskShape); - QString type = m_map->layerAt(layer)->property("type"); if (type == "solid") { - mapPixmapItem->setData(ITEM_OBJECTNAME, QString("SolidGround")); - mapPixmapItem->setZValue(1); + Tiled::TileLayer* solidTiles = NULL; + solidTiles = m_map->layerAt(layer)->asTileLayer(); + + for(int w = 0; w < solidTiles->width(); w++) + { + for (int h = 0; h < solidTiles->height(); h++) + { + Tiled::Cell cell; + cell = solidTiles->cellAt(w, h); + + if(!cell.isEmpty()) + { + QGraphicsPixmapItem *solidTile = new QGraphicsPixmapItem(0, this); + solidTile->setData(ITEM_OBJECTNAME, QString("SolidGround")); + solidTile->setPos(w * m_map->tileWidth(), + h * m_map->tileHeight()); + solidTile->setZValue(1); + solidTile->setPixmap(cell.tile->image()); + m_mapPixmapItems.append(solidTile); + } + } + } } - else if (type == "covering") + else { - mapPixmapItem->setData(ITEM_OBJECTNAME, QString("Covering")); - mapPixmapItem->setZValue(2); - } + QImage img(m_map->width() * m_map->tileWidth(), + m_map->height() * m_map->tileHeight(), + QImage::Format_ARGB32); - mapPixmapItem->setPixmap(mapPixmap); + QPainter painter(&img); + m_mapRenderer->drawTileLayer(&painter, m_map->layerAt(layer)->asTileLayer()); - m_mapPixmapItems.append(mapPixmapItem); - } + QPixmap mapPixmap = QPixmap::fromImage(img); + m_mapPixmaps.append(mapPixmap); - ObjectGroup* fish = NULL; + qDebug() << "hasAlpha" << mapPixmap.hasAlpha() << "\n" + << "hasAlphaChannel" << mapPixmap.hasAlphaChannel(); - if(m_map->indexOfLayer("fish") >= 0) - fish = m_map->layerAt(m_map->indexOfLayer("fish"))->asObjectGroup(); + QGraphicsPixmapItem* mapPixmapItem = addPixmap(mapPixmap); + mapPixmapItem->setPos(0, 0); + mapPixmapItem->setShapeMode(QGraphicsPixmapItem::MaskShape); - if(fish) - { - Q_FOREACH(Tiled::MapObject *obj, fish->objects()) - { - Collectible *fish = new Collectible(0, this); - fish->setData(ITEM_OBJECTNAME, QString("fish")); - connect(fish, SIGNAL(removeMe()), this, SLOT(removeSprite())); + mapPixmapItem->setPixmap(mapPixmap); + + if (type == "covering") + { + mapPixmapItem->setData(ITEM_OBJECTNAME, QString("Covering")); + mapPixmapItem->setZValue(2); + } + else if (type == "coveringBg") + { + mapPixmapItem->setData(ITEM_OBJECTNAME, QString("CoveringBg")); + mapPixmapItem->setZValue(-1); + } + + m_mapPixmapItems.append(mapPixmapItem); + } + } + + QVector<QString> colors; + colors.append("red"); colors.append("blue"); colors.append("green"); - fish->setPos((obj->x()) * m_map->tileWidth(), - (obj->y() - 1) * m_map->tileHeight()); + for (int i = 0; i < colors.size(); i++) + { + Tiled::ObjectGroup* color = NULL; - fish->setZValue(2); + if(m_map->indexOfLayer(colors.at(i)) >= 0) + color = m_map->layerAt(m_map->indexOfLayer(colors.at(i)))->asObjectGroup(); - qDebug() << obj->position() << fish->pos(); + if(color) + { + Q_FOREACH(Tiled::MapObject *obj, color->objects()) + { + Collectible* colorbubble = new Collectible(0, this); + colorbubble->setData(ITEM_OBJECTNAME, QString(colors.at(i))); + connect(colorbubble, SIGNAL(removeMe()), this, SLOT(removeSprite())); + colorbubble->setPos((obj->x()) * m_map->tileWidth(), + (obj->y() - 1) * m_map->tileHeight()); + + colorbubble->setZValue(1); + + qDebug() << obj->position() << colorbubble->pos(); + } } } + m_clearAlert = false; } |
