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 }
}
}