123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404 |
- /*
- * Copyright (c) 2010 Nokia Corporation.
- */
- import Qt 4.7
- import "Game.js" as GameScript
- Item {
- id: gameArea
- width: 360; height: 640 // NOTE: have to exists some default sizes
- anchors.fill: parent
- objectName: "gameArea"
- // Who win, you or computer
- property bool gameOverProperty: false
- // for info message to user
- property variant messageBox
- // Level activated signal for Qt side to load activated level
- signal levelActivated(int index)
- // Pause whole game, if level is loaded
- function pauseGame() {
- if (GameScript.levelPlugin) {
- GameScript.pauseGame(true)
- myShip.focus = false
- btnPause.opacity = 0
- menu.showPauseMenu()
- }
- }
- // Qt side call this for QML take new level into use
- function levelReadyForCreation() {
- // Hide menu
- menu.hideMenu()
- // Show message
- message.showMessage("Loading Level...",2000)
- // Wait before create level
- levelCreationTimer.restart()
- }
- // Fires ememy missile. Function is called from Qt side
- function fireEnemyMissile(aXpox, aFromYpos, aToYpos) {
- GameScript.fireEnemyMissile(aXpox, aFromYpos, aToYpos)
- }
- // Game Over handling. Function is called from Qt side
- function gameOver(youWin) {
- // Stop GameEngine timers
- GameEngine.enableEngineTimer(false)
- gameOverProperty = youWin
- GameScript.hideMissiles()
- gameOverTimer.restart()
- //GameEngine.vibra()
- }
- // End game and show menu
- function endGame(showMessage) {
- backgroundPic.opacity = 1
- // Stop GameEngine timers
- GameEngine.enableEngineTimer(false)
- // Do game over
- GameScript.gameOver()
- GameScript.hideMissiles()
- // Clear GameEngine QML objects
- GameEngine.clearQmlObjects()
- myShip.opacity = 0
- myShip.focus = false
- btnPause.opacity = 0
- idMainLogo.opacity = 1
- menu.showLevelMenu()
- if (showMessage) {
- message.showMessage("Game End",2000)
- }
- }
- // Timer for level creationing
- Timer {
- id: levelCreationTimer
- interval: 1000; running: false; repeat: false
- onTriggered: {
- btnPause.opacity = 1
- myShip.opacity = 1
- myShip.focus = true
- // Create new level
- var ret = GameScript.createLevel()
- if (ret==0) {
- backgroundPic.opacity = 0
- // Find QML object for GameEngine
- GameEngine.findQmlObjects()
- // Enable GameEngine timer
- GameEngine.enableEngineTimer(true)
- } else {
- // Level cannot be created!
- endGame(false)
- }
- }
- }
- // Timer for game over
- Timer {
- id: gameOverTimer
- interval: 1500; running: false; repeat: false
- onTriggered: {
- backgroundPic.opacity = 1
- idMainLogo.opacity = 1
- // Do game over
- GameScript.gameOver()
- // Clear GameEngine QML objects
- 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)
- }
- }
- }
- // Menu signal to slot connections
- Connections {
- target: menu
- // Level selected
- onLevelSelected: {
- // Stop bigship animation
- bigShipAnim.stop()
- bigShip.opacity = 0
- // Hide logo
- idMainLogo.opacity = 0
- // Signal level activated
- gameArea.levelActivated(levelIndex)
- }
- // Level resumed selected
- onResumeSelected: {
- menu.hideMenu()
- GameScript.pauseGame(false)
- myShip.focus = true
- }
- }
- // This component creation completed
- Component.onCompleted: {
- // Show main Level selection menu
- menu.showLevelMenu()
- // Start big ship animation
- bigShipAnim.restart()
- // Set variable
- messageBox = message
- // Play game start sound
- GameEngine.gameStartSound()
- // Fade splash screen
- fadeAnim.restart()
- // Rotate splash logo
- rotAnim.restart()
- }
- // Background image for the game
- 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}
- }
- // Enemies grid
- Item {
- // This is general level QML plaseholder
- // Into this is level QML created in createLevel()
- 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
- }
- // Game menu
- Menu {
- z:20
- id:menu
- width: gameArea.width / 5 * 4
- height: gameArea.height / 10 * 4
- anchors.verticalCenter: gameArea.verticalCenter
- anchors.horizontalCenter: gameArea.horizontalCenter
- }
- // My ship
- MyShip {
- z:10
- id: myShip
- opacity: 0
- }
- // Mouse area of your ship
- MouseArea {
- //anchors.fill: parent
- 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: {
- //dragCount = Math.abs(mouseX-startPos)
- }
- onReleased: {
- //if (dragCount<20) {
- myShip.fire()
- //}
- }
- }
- // Pause button
- Button {
- id: btnSound
- z:12
- //animationEnabled: false
- 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) {
- // Sound off
- btnSound.buttonPath = "qrc:/gfx/soundOff.png"
- btnSound.buttonId = 5
- GameEngine.enableSounds(false)
- } else {
- // Sound on
- btnSound.buttonPath = "qrc:/gfx/soundOn.png"
- btnSound.buttonId = 4
- GameEngine.enableSounds(true)
- }
- }
- }
- }
- // Pause button
- 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()
- }
- }
- }
- // Hidden missiles ready for to be launched
- 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
- }
- // Messages to the user
- Message {
- id: message
- z:21
- }
- // Splach screen
- 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 }
- }
- // Splach screen animation
- 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 }
- }
- }
|