[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    playground/games/granatier/src
From:       Mathias Kraus <k.hias () gmx ! de>
Date:       2009-09-27 10:26:30
Message-ID: 1254047190.920460.30636.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 1028468 by mkraus:

if the element ID in the selected theme doesn't exist, use the element from the default theme

 M  +56 -12    gamescene.cpp  
 M  +5 -1      gamescene.h  
 M  +4 -1      playerselector.cpp  


--- trunk/playground/games/granatier/src/gamescene.cpp #1028467:1028468
@@ -37,6 +37,7 @@
 #include <KLocale>
 #include <KPixmapCache>
 #include <KSvgRenderer>
+#include <KStandardDirs>
 
 GameScene::GameScene(Game* p_game) : m_game(p_game)
 {
@@ -50,9 +51,51 @@
     m_cache = new KPixmapCache("granatier_cache");
     m_cache->setCacheLimit(3 * 1024);
 
-    // Load the SVG file
-    m_renderer = new KSvgRenderer();
+    // Load the default SVG file as fallback
+    m_rendererDefaultTheme = new KSvgRenderer();
+    m_rendererDefaultTheme->load(KStandardDirs::locate("appdata", "themes/clanbomber.svgz"));
+    // Load the selected SVG file
+    m_rendererSelectedTheme = new KSvgRenderer();
     loadTheme();
+    
+    // set the renderer for the arena items
+    if(m_rendererSelectedTheme->elementExists("arena_ground") &&
+        m_rendererSelectedTheme->elementExists("arena_wall") &&
+        m_rendererSelectedTheme->elementExists("arena_block"))
+    {
+        m_rendererArenaItems = m_rendererSelectedTheme;
+    }
+    else
+    {
+        m_rendererArenaItems = m_rendererDefaultTheme;
+    }
+    // set the renderer for the bonus items
+    if(m_rendererSelectedTheme->elementExists("bonus_speed") &&
+        m_rendererSelectedTheme->elementExists("bonus_bomb") &&
+        m_rendererSelectedTheme->elementExists("bonus_range") &&
+        m_rendererSelectedTheme->elementExists("bonus_throw") &&
+        m_rendererSelectedTheme->elementExists("bonus_move"))
+    {
+        m_rendererBonusItems = m_rendererSelectedTheme;
+    }
+    else
+    {
+        m_rendererBonusItems = m_rendererDefaultTheme;
+    }
+    // set the renderer for the bomb items
+    if(m_rendererSelectedTheme->elementExists("bomb") &&
+        m_rendererSelectedTheme->elementExists("bomb_exploded") &&
+        m_rendererSelectedTheme->elementExists("bomb_exploded_north") &&
+        m_rendererSelectedTheme->elementExists("bomb_exploded_east") &&
+        m_rendererSelectedTheme->elementExists("bomb_exploded_south") &&
+        m_rendererSelectedTheme->elementExists("bomb_exploded_west"))
+    {
+        m_rendererBombItems = m_rendererSelectedTheme;
+    }
+    else
+    {
+        m_rendererBombItems = m_rendererDefaultTheme;
+    }
 
     // Create the PlayerItems and the points labels
     QList <Player*> players = p_game->getPlayers();
@@ -130,7 +173,7 @@
         {
             // Create the ArenaItem and set the image
             ArenaItem* arenaItem = new ArenaItem(j * Cell::SIZE, i * Cell::SIZE);
-            arenaItem->setSharedRenderer(m_renderer);
+            arenaItem->setSharedRenderer(m_rendererArenaItems);
             //TODO: use this function call
             //arenaItem->setElementId(m_game->getArena()->getCell(i,j).getElement()->getImageId());
             switch(m_game->getArena()->getCell(i,j).getType())
@@ -166,7 +209,7 @@
                 // Create the element item and set the image
                 Element* element = m_game->getArena()->getCell(i, j).getElement();
                 ElementItem* elementItem = new ElementItem(element);
-                elementItem->setSharedRenderer(m_renderer);
+                elementItem->setSharedRenderer(m_rendererArenaItems);
                 elementItem->setElementId(element->getImageId());
                 elementItem->update(element->getX(), element->getY());
                 elementItem->setZValue(200);
@@ -177,7 +220,7 @@
                 {
                   
                     ElementItem* bonusItem = new ElementItem(bonus);
-                    bonusItem->setSharedRenderer(m_renderer);
+                    bonusItem->setSharedRenderer(m_rendererBonusItems);
                     switch(bonus->getBonusType())
                     {
                         case Bonus::SPEED:  bonusItem->setElementId("bonus_speed");
@@ -286,7 +329,8 @@
     delete m_dimmOverlay;
     
     delete m_cache;
-    delete m_renderer;
+    delete m_rendererSelectedTheme;
+    delete m_rendererDefaultTheme;
 }
 
 void GameScene::cleanUp()
@@ -411,7 +455,7 @@
     {
         return;
     }
-    if (!m_renderer->load(theme.graphics()))
+    if (!m_rendererSelectedTheme->load(theme.graphics()))
     {
         return;
     }
@@ -545,7 +589,7 @@
 {
     // Create the Bombs
     BombItem* bombItem = new BombItem(bomb);
-    bombItem->setSharedRenderer(m_renderer);
+    bombItem->setSharedRenderer(m_rendererBombItems);
     bombItem->setElementId("bomb");
     // Corrects the position of the BombItem
     bombItem->update(bomb->getX(), bomb->getY());
@@ -664,7 +708,7 @@
                     }
                 }
                 bombExplosionItem = new BombExplosionItem (bomb, BombExplosionItem::NORTH, i);
-                bombExplosionItem->setSharedRenderer(m_renderer);
+                bombExplosionItem->setSharedRenderer(m_rendererBombItems);
                 bombExplosionItem->update(bomb->getX(), bomb->getY() - (i+1)*Cell::SIZE);
                 bombExplosionItem->setZValue(300 + nBombRange+3 - i);
                 addItem(bombExplosionItem);
@@ -713,7 +757,7 @@
                     }
                 }
                 bombExplosionItem = new BombExplosionItem (bomb, BombExplosionItem::EAST, i);
-                bombExplosionItem->setSharedRenderer(m_renderer);
+                bombExplosionItem->setSharedRenderer(m_rendererBombItems);
                 bombExplosionItem->update(bomb->getX() + (i+1)*Cell::SIZE, bomb->getY());
                 bombExplosionItem->setZValue(300 + nBombRange+3 - i);
                 addItem(bombExplosionItem);
@@ -762,7 +806,7 @@
                     }
                 }
                 bombExplosionItem = new BombExplosionItem (bomb, BombExplosionItem::SOUTH, i);
-                bombExplosionItem->setSharedRenderer(m_renderer);
+                bombExplosionItem->setSharedRenderer(m_rendererBombItems);
                 bombExplosionItem->update(bomb->getX(), bomb->getY() + (i+1)*Cell::SIZE);
                 bombExplosionItem->setZValue(300 + nBombRange+3 - i);
                 addItem(bombExplosionItem);
@@ -811,7 +855,7 @@
                     }
                 }
                 bombExplosionItem = new BombExplosionItem (bomb, BombExplosionItem::WEST, i);
-                bombExplosionItem->setSharedRenderer(m_renderer);
+                bombExplosionItem->setSharedRenderer(m_rendererBombItems);
                 bombExplosionItem->update(bomb->getX() - (i+1)*Cell::SIZE, bomb->getY());
                 bombExplosionItem->setZValue(300 + nBombRange+3 - i);
                 addItem(bombExplosionItem);
--- trunk/playground/games/granatier/src/gamescene.h #1028467:1028468
@@ -80,7 +80,11 @@
     KPixmapCache* m_cache; //TODO: check if the cache is used
 
     /** The SVG renderer */
-    KSvgRenderer* m_renderer;
+    KSvgRenderer* m_rendererSelectedTheme;
+    KSvgRenderer* m_rendererDefaultTheme;
+    KSvgRenderer* m_rendererArenaItems;
+    KSvgRenderer* m_rendererBonusItems;
+    KSvgRenderer* m_rendererBombItems;
     
 public:
 
--- trunk/playground/games/granatier/src/playerselector.cpp #1028467:1028468
@@ -175,7 +175,10 @@
     ui.kcfg_Dummy->setValue(nDummy);
     m_playerPreview = new QGraphicsSvgItem();
     m_playerPreview->setSharedRenderer(m_renderer);
-    m_playerPreview->setElementId("player");
+    if(m_renderer->elementExists("player"))
+    {
+        m_playerPreview->setElementId("player");
+    }
     m_graphicsScene->addItem(m_playerPreview);
     ui.playerPreview->fitInView(ui.playerPreview->sceneRect(), Qt::KeepAspectRatio);
     
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic