Find the Best Demos and Examples

Check out this quick tour to find the best demos and examples for you, and to see how the Felgo SDK can help you to develop your next app or game!

ChickenOutbreak Demo

 var newRoostCenterPos = Qt.point(0,0)
 var randomValue
 var coinCenterPos = Qt.point(0,0)
 var coinPositionModifier = 0.7*scene.gridSize
 var gridSizeHalf = scene.gridSize/2
 var newWindowTopleftPos = Qt.point(0,0)
 var roostUrl = Qt.resolvedUrl("../entities/Roost.qml")
 var coinUrl = Qt.resolvedUrl("../entities/Coin.qml")
 var windowUrl = Qt.resolvedUrl("../entities/HenhouseWindow.qml")
 var newElementProperties = {}

 function createRandomRowForRowNumber(rowNumber) {
     for(var i=0; i<roostColumns; i++) {
         // Performance optimization, do not create own values for mathrandom during runtime (garbarge)
         //if(Math.random() < platformCreationProbability ) {
         randomValue = Math.random()
         if(randomValue < platformCreationProbability ) {

             // Performance optimization, do not recreate objects during runtime (garbarge)
             //var newRoostCenterPos = Qt.point(i*gridSize + gridSize/2, );
             newRoostCenterPos.x = i*gridSize + gridSizeHalf
             newRoostCenterPos.y = rowNumber*gridSize + gridSizeHalf

             if(physicsWorld.bodyAt(newRoostCenterPos)) {
                 console.debug("no Roost can be created because there is a window already");
                 continue;
             }

             console.debug("creating a new Roost at position", i*gridSize + gridSize/2, ",", rowNumber*gridSize + gridSize/2);

             // Performance optimization, do not provide properties as own object during runtime (garbarge)
 //            entityManager.createEntityFromUrlWithProperties(Qt.resolvedUrl("entities/Roost.qml"),
 //                                 {"x": newRoostCenterPos.x,
 //                                     "y": newRoostCenterPos.y
 //                                 });
             newElementProperties.x = newRoostCenterPos.x
             newElementProperties.y = newRoostCenterPos.y
             entityManager.createEntityFromUrlWithProperties(roostUrl,newElementProperties)

             // create a coin in 30% of all created blocks
             randomValue = Math.random()
             if(randomValue < coinCreationPropability) {

                 // look at 1 grid position above
                 // Performance optimization, do not recreate objects during runtime (garbarge)
                 // var coinCenterPos = Qt.point(newRoostCenterPos.x, newRoostCenterPos.y-scene.gridSize);
                 coinCenterPos.x = newRoostCenterPos.x
                 coinCenterPos.y = newRoostCenterPos.y-scene.gridSize

                 // test if one grid above is an empty field (so if no block is built there) - if so, a coin can be created
                 if(physicsWorld.bodyAt(coinCenterPos)) {
                     console.debug("there is a block above the to create block, don't create a coin here!")
                     continue;
                 }

                 /*entityManager.createEntityFromUrlWithProperties*/
                 // Performance optimization, do not provide properties as own object during runtime (garbarge)
 //                entityManager.createEntityFromUrlWithProperties(Qt.resolvedUrl("entities/Coin.qml"),
 //                                     {"x": coinCenterPos.x,
 //                                         "y": coinCenterPos.y+0.7*scene.gridSize // move slightly up, so it looks better
 //                                     });
                 newElementProperties.x = coinCenterPos.x
                 newElementProperties.y = coinCenterPos.y+coinPositionModifier
                 entityManager.createEntityFromUrlWithProperties(coinUrl,newElementProperties)
             }
         } else if(i < roostColumns-1 && randomValue < windowCreationProbability ) {

             // the i<columns-1 check is required, because the window has a size of 2 grids, and its anchor is top left

             //var newWindowTopleftPos = Qt.point(i*gridSize, rowNumber*gridSize);
             // Performance optimization, do not provide properties as own object during runtime (garbarge)
             newWindowTopleftPos.x = i*gridSize
             newWindowTopleftPos.y = rowNumber*gridSize

             console.debug("newWindowTopleftPos.y-lastWindowY:", newWindowTopleftPos.y-lastWindowY)
             // this avoids creating too many windows, so not possible to have more than 2 on a scene with this code!
             if(newWindowTopleftPos.y-lastWindowY < minimumWindowHeightDifference) {
                 console.debug("difference between last Window and current to create one too small!")
                 continue;
             }

             // this might happen if a window was already created at this position
             if(physicsWorld.bodyAt(newWindowTopleftPos)) {
                 console.debug("body at position x:", newWindowTopleftPos.x, ", y:", newWindowTopleftPos.y, physicsWorld.bodyAt(newWindowTopleftPos))
                 console.debug("there is a window at the position where to create a window, so no creation is done");
                 continue;
             }

             //console.debug("creating a new Window... at position x:", newWindowTopleftPos.x, ", y:", newWindowTopleftPos.y, "lastWindowY:", lastWindowY);
             // Performance optimization, do not provide properties as own object during runtime (garbarge)
 //            entityManager.createEntityFromUrlWithProperties(Qt.resolvedUrl("entities/HenhouseWindow.qml"),
 //                                 {"x": newWindowTopleftPos.x,
 //                                     "y": newWindowTopleftPos.y,
 //                                     "z": 0 // put behind all others, except the background
 //                                 });
             newElementProperties.x = newWindowTopleftPos.x
             newElementProperties.y = newWindowTopleftPos.y
             newElementProperties.z = 0 // put behind all others, except the background
             entityManager.createEntityFromUrlWithProperties(windowUrl,newElementProperties)

             lastWindowY = newWindowTopleftPos.y;
         }