Update copyright headers
[qt:qt.git] / demos / mobile / quickhit / MyShip.qml
1 /****************************************************************************
2 **
3 ** Copyright (C) 2015 The Qt Company Ltd.
4 ** Contact: http://www.qt.io/licensing/
5 **
6 ** This file is part of the QtDeclarative module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:BSD$
9 ** You may use this file under the terms of the BSD license as follows:
10 **
11 ** "Redistribution and use in source and binary forms, with or without
12 ** modification, are permitted provided that the following conditions are
13 ** met:
14 **   * Redistributions of source code must retain the above copyright
15 **     notice, this list of conditions and the following disclaimer.
16 **   * Redistributions in binary form must reproduce the above copyright
17 **     notice, this list of conditions and the following disclaimer in
18 **     the documentation and/or other materials provided with the
19 **     distribution.
20 **   * Neither the name of The Qt Company Ltd nor the names of its
21 **     contributors may be used to endorse or promote products derived
22 **     from this software without specific prior written permission.
23 **
24 **
25 ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
36 **
37 ** $QT_END_LICENSE$
38 **
39 ****************************************************************************/
40
41 import QtQuick 1.0
42 import "Game.js" as GameScript
43
44 Item {
45     id: myShip
46     objectName: "myShip"
47
48     property variant myShipSize
49     property int originalY
50
51     // Fires missile if exists
52     function fire() {
53         if (myShip.opacity==1) {
54             GameScript.fireMissile(myShip.x+myShip.width/2,myShip.y,myShip.height*-1)
55             if (myShip.y+myShip.height < gameArea.height+5) {
56                 goDownAnim.restart()
57             }
58         }
59     }
60
61     function createGraphicsForLevel() {
62         myShip.myShipSize = LevelPlugin.graphSize(LevelPlugin.pathToMyShipPic())
63         myShip.height = myShipSize.height
64         myShip.width = myShipSize.width
65         image.source = "file:/"+LevelPlugin.pathToMyShipPic()
66         myShip.y = gameArea.height - myShip.height - 10
67         originalY = myShip.y
68         myShip.x = (gameArea.width - myShip.width)/ 2
69     }
70
71     Image {
72         id: image
73         smooth: true
74     }
75
76     Keys.onSpacePressed: { fire() }
77     Keys.onSelectPressed: { fire() }
78     Keys.onRightPressed: {
79         if (myShip.x < (gameArea.width - myShip.width - 20)) {
80             toRightAnim.restart()
81         }
82     }
83     Keys.onLeftPressed: {
84         if (myShip.x > 20) {
85             toLeftAnim.restart()
86         }
87     }
88
89     // To right animation
90     PropertyAnimation { id: toRightAnim; target: myShip; easing.type: Easing.OutQuint;
91         properties: "x"; from: myShip.x; to: myShip.x + 20; duration: 500 }
92
93     // To left animation
94     PropertyAnimation { id: toLeftAnim; target: myShip; easing.type: Easing.OutQuint;
95         properties: "x"; from: myShip.x; to: myShip.x - 20; duration: 500 }
96
97     // Go down on fire animation
98     SequentialAnimation {
99         id: goDownAnim
100         NumberAnimation { target: myShip; property:"y"; from: myShip.y; to: myShip.y+5;
101             easing.type: Easing.Linear; duration: 200 }
102         NumberAnimation { target: myShip; property:"y"; from: myShip.y; to: originalY;
103             easing.type: Easing.Linear; duration: 200 }
104     }
105
106
107     /*
108     MouseArea {
109         anchors.fill: parent
110         drag.target: myShip
111         drag.axis: Drag.XAxis
112         drag.minimumX: 0
113         drag.maximumX: gameArea.width - myShip.width
114         onReleased: {
115             fire()
116         }
117     }
118     */
119
120
121     /*
122     property bool isAutoRepeat: false
123     Keys.onPressed: {
124              if (event.key == Qt.Key_Right) {
125                  if (event.isAutoRepeat) {
126                      isAutoRepeat = true
127                      toRightAnim.restart()
128                  } else {
129                      isAutoRepeat = false
130                      toRotateRightAndCenterAnim.restart()
131                  }
132                  event.accepted = true
133              }
134              else if (event.key == Qt.Key_Left) {
135                  if (event.isAutoRepeat) {
136                      isAutoRepeat = true
137                      toLeftAnim.restart()
138                  } else {
139                      isAutoRepeat = false
140                      toRotateLeftAndCenterAnim.restart()
141                  }
142                  event.accepted = true
143              }
144          }
145
146     Keys.onReleased: {
147         if (isAutoRepeat) {
148             toRotateRightAndCenterAnim.stop()
149             toRotateLeftAndCenterAnim.stop()
150         } else {
151             toRotateCenter.restart()
152         }
153         event.accepted = true
154     }
155
156     // Rotation on movement animation
157     transform: Rotation { id:rotationId; origin.x: width/2; origin.y: height/2; axis { x: 0; y: 1; z: 0 } angle: 0 }
158     SequentialAnimation {
159         id: toRotateRightAndCenterAnim
160         PropertyAnimation { target: rotationId; easing.type: Easing.Linear;
161             properties: "angle"; from: 0; to: 30; duration: 100 }
162         PropertyAnimation { target: myShip; easing.type: Easing.OutQuint;
163             properties: "x"; from: myShip.x; to: myShip.x + 20; duration: 500 }
164         PropertyAnimation { target: rotationId; easing.type: Easing.Linear;
165             properties: "angle"; to: 0; duration: 100 }
166     }
167     SequentialAnimation {
168         id: toRotateLeftAndCenterAnim
169         PropertyAnimation { target: rotationId; easing.type: Easing.Linear;
170             properties: "angle"; from: 0; to: -30; duration: 100 }
171         PropertyAnimation { target: myShip; easing.type: Easing.OutQuint;
172             properties: "x"; from: myShip.x; to: myShip.x - 20; duration: 500 }
173         PropertyAnimation { target: rotationId; easing.type: Easing.Linear;
174             properties: "angle"; to: 0; duration: 100 }
175     }
176     PropertyAnimation { id: toRotateRight; target: rotationId; easing.type: Easing.Linear;
177         properties: "angle"; from: 0; to: 30; duration: 100 }
178     PropertyAnimation { id: toRotateCenter; target: rotationId; easing.type: Easing.Linear;
179         properties: "angle"; to: 0; duration: 100 }
180     PropertyAnimation { id: toRotateLeft; target: rotationId; easing.type: Easing.Linear;
181         properties: "angle"; from: 0; to: -30; duration: 100 }
182 */
183
184 }