Game.qml Example File
demos/mobile/quickhit/Game.qml
 
 
 import QtQuick 1.0
 import "Game.js" as GameScript
 Item {
     id: gameArea
     width: 360; height: 640 
     anchors.fill: parent
     objectName: "gameArea"
     
     property bool gameOverProperty: false
     
     property variant messageBox
     
     signal levelActivated(int index)
     
     function pauseGame() {
         if (GameScript.levelPlugin) {
             GameScript.pauseGame(true)
             myShip.focus = false
             btnPause.opacity = 0
             menu.showPauseMenu()
         }
     }
     
     function levelReadyForCreation() {
         
         menu.hideMenu()
         
         message.showMessage("Loading Level...",2000)
         
         levelCreationTimer.restart()
     }
     
     function fireEnemyMissile(aXpox, aFromYpos, aToYpos) {
         GameScript.fireEnemyMissile(aXpox, aFromYpos, aToYpos)
     }
     
     function gameOver(youWin) {
         
         GameEngine.enableEngineTimer(false)
         gameOverProperty = youWin
         GameScript.hideMissiles()
         gameOverTimer.restart()
         
     }
     
     function endGame(showMessage) {
         backgroundPic.opacity = 1
         
         GameEngine.enableEngineTimer(false)
         
         GameScript.gameOver()
         GameScript.hideMissiles()
         
         GameEngine.clearQmlObjects()
         myShip.opacity = 0
         myShip.focus = false
         btnPause.opacity = 0
         idMainLogo.opacity = 1
         menu.showLevelMenu()
         if (showMessage) {
             message.showMessage("Game End",2000)
         }
     }
     
     Timer {
         id: levelCreationTimer
         interval: 1000; running: false; repeat: false
         onTriggered: {
             btnPause.opacity = 1
             myShip.opacity = 1
             myShip.focus = true
             
             var ret = GameScript.createLevel()
             if (ret==0) {
                 backgroundPic.opacity = 0
                 
                 GameEngine.findQmlObjects()
                 
                 GameEngine.enableEngineTimer(true)
             } else {
                 
                 endGame(false)
             }
         }
     }
     
     Timer {
         id: gameOverTimer
         interval: 1500; running: false; repeat: false
         onTriggered: {
             backgroundPic.opacity = 1
             idMainLogo.opacity = 1
             
             GameScript.gameOver()
             
             GameEngine.clearQmlObjects()
             menu.showLevelMenu()
             if (gameOverProperty) {
                 GameEngine.playInternalSound(4)
                 message.showMessage("Game Over, You win!",2000)
             } else {
                 GameEngine.playInternalSounds(3,3)
                 message.showMessage("Game Over, You lose",2000)
             }
         }
     }
     
     Connections {
         target: menu
         
         onLevelSelected: {
             
             bigShipAnim.stop()
             bigShip.opacity = 0
             
             idMainLogo.opacity = 0
             
             gameArea.levelActivated(levelIndex)
         }
         
         onResumeSelected: {
             menu.hideMenu()
             GameScript.pauseGame(false)
             myShip.focus = true
         }
     }
     
     Component.onCompleted: {
         
         menu.showLevelMenu()
         
         bigShipAnim.restart()
         
         messageBox = message
         
         GameEngine.gameStartSound()
         
         fadeAnim.restart()
         
         rotAnim.restart()
     }
     
     Image {
         id: backgroundPic
         z:1
         source: "qrc:/gfx/background2.png"
         fillMode: Image.PreserveAspectCrop
         smooth: true
         anchors.fill: parent
     }
     Image {
         id: bigShip
         source: "qrc:/gfx/bigship.png"
         z:1.5
         smooth: true
         x: width * -1
         y: parent.height * 0.55
     }
     SequentialAnimation {
         id: bigShipAnim;
         NumberAnimation {target:bigShip; property:"x"; to:gameArea.width; easing.type: Easing.Linear; duration: 80000 }
         PropertyAction {target:bigShip; properties: "opacity"; value: 0}
     }
     
     Item {
         
         
         id:levelId
         anchors.fill: parent
         z:2
     }
     Image {
         id: idMainLogo
         z:19
         source: "qrc:/gfx/quickhit_logo.png"
         smooth: true
         anchors.horizontalCenter: gameArea.horizontalCenter
         y:gameArea.height / 10 * 1
     }
     
     Menu {
         z:20
         id:menu
         width: gameArea.width / 5 * 4
         height: gameArea.height / 10 * 4
         anchors.verticalCenter: gameArea.verticalCenter
         anchors.horizontalCenter: gameArea.horizontalCenter
     }
     
     MyShip {
         z:10
         id: myShip
         opacity: 0
     }
     
     MouseArea {
         
         width: parent.width
         height: myShip.height
         x:0
         y:gameArea.height - myShip.height
         drag.target: myShip
         drag.axis: Drag.XAxis
         drag.minimumX: 0
         drag.maximumX: gameArea.width - myShip.width
         property int startPos: 0
         property int dragCount: 0
         onPressed: {
             startPos = mouseX
             dragCount = 0
         }
         onPositionChanged: {
             
         }
         onReleased: {
             
             myShip.fire()
             
         }
     }
     
     Button {
         id: btnSound
         z:12
         
         anchors.top: parent.top
         anchors.topMargin: 10
         buttonPath: "qrc:/gfx/soundOn.png"
         buttonId: 4
         width: gameArea.width / 10
         height: gameArea.width / 10
         x: gameArea.width - width - 15
         opacity: 1
         Connections {
             target: btnSound
             onBtnClicked: {
                 if (btnSound.buttonId==4) {
                     
                     btnSound.buttonPath = "qrc:/gfx/soundOff.png"
                     btnSound.buttonId = 5
                     GameEngine.enableSounds(false)
                 } else {
                     
                     btnSound.buttonPath = "qrc:/gfx/soundOn.png"
                     btnSound.buttonId = 4
                     GameEngine.enableSounds(true)
                 }
             }
         }
     }
     
     Button {
         id: btnPause
         z:13
         anchors.top: parent.top
         anchors.topMargin: 10
         buttonPath: "qrc:/gfx/pause.png"
         buttonId: 3
         width: gameArea.width / 10
         height: gameArea.width / 10
         x: gameArea.width - width - btnPause.width - 15*2
         opacity: 0
         Connections {
             target: btnPause
             onBtnClicked: {
                 GameScript.pauseGame(true)
                 myShip.focus = false
                 btnPause.opacity = 0
                 menu.showPauseMenu()
             }
         }
     }
     
     Missile {
         z:3
         id: missile_1
         x:0
         y:10
     }
     Missile {
         z:4
         id: missile_2
         x: 20
         y:10
     }
     Missile {
         z:5
         id: missile_3
         x: 40
         y:10
     }
     Missile {
         z:6
         id: missile_4
         x: 60
         y:10
     }
     Missile {
         z:7
         id: missile_5
         x: 80
         y:10
     }
     Missile {
         z:8
         objectName: "enemy_missile"
         id: enemy_missile_1
         enemyMissile: true
     }
     Missile {
         z:9
         objectName: "enemy_missile"
         id: enemy_missile_2
         enemyMissile: true
     }
     
     Message {
         id: message
         z:21
     }
     
     Rectangle {
         id: blackFace
         x:-2
         y:0
         width: parent.width + 2
         height: parent.height
         z:100
         color: "black"
         opacity: 1
         MouseArea {
             anchors.fill: parent
             onPressed: {
                 mouse.accepted = true
                 fadeAnim.stop()
                 blackFace.opacity = 0
             }
         }
         Image {
             id: idLogo
             source: "qrc:/gfx/quickhit_logo.png"
             smooth: true
             anchors.horizontalCenter: parent.horizontalCenter
             anchors.verticalCenter: parent.verticalCenter
             opacity: 0
         }
         NumberAnimation { id: rotAnim; target: idLogo; property: "rotation"; to: 20; duration: 9000 }
     }
     
     SequentialAnimation {
         id: fadeAnim
         PauseAnimation {duration: 1000 }
         NumberAnimation {target: idLogo; property: "opacity"; from: 0; to: 1; duration: 2000 }
         PauseAnimation {duration: 2000 }
         NumberAnimation {target: idLogo; property: "opacity"; from: 1; to: 0; duration: 2000 }
         NumberAnimation {target: blackFace; property: "opacity"; from: 1; to: 0; duration: 2000 }
     }
 }