Immense Particles Refactor Part C
[profile/ivi/qtdeclarative.git] / demos / declarative / samegame / samegame.qml
1 /****************************************************************************
2 **
3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
4 ** All rights reserved.
5 ** Contact: Nokia Corporation (qt-info@nokia.com)
6 **
7 ** This file is part of the QtDeclarative module of the Qt Toolkit.
8 **
9 ** $QT_BEGIN_LICENSE:LGPL$
10 ** No Commercial Usage
11 ** This file contains pre-release code and may not be distributed.
12 ** You may use this file in accordance with the terms and conditions
13 ** contained in the Technology Preview License Agreement accompanying
14 ** this package.
15 **
16 ** GNU Lesser General Public License Usage
17 ** Alternatively, this file may be used under the terms of the GNU Lesser
18 ** General Public License version 2.1 as published by the Free Software
19 ** Foundation and appearing in the file LICENSE.LGPL included in the
20 ** packaging of this file.  Please review the following information to
21 ** ensure the GNU Lesser General Public License version 2.1 requirements
22 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
23 **
24 ** In addition, as a special exception, Nokia gives you certain additional
25 ** rights.  These rights are described in the Nokia Qt LGPL Exception
26 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
27 **
28 ** If you have questions regarding the use of this file, please contact
29 ** Nokia at qt-info@nokia.com.
30 **
31 **
32 **
33 **
34 **
35 **
36 **
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41
42 import QtQuick 2.0
43 import QtQuick.Particles 2.0
44 import "SamegameCore"
45 import "SamegameCore/samegame.js" as Logic
46
47 Rectangle {
48     id: screen
49     width: 360; height: 640
50     property bool inAnotherDemo: false //Samegame often is just plonked straight into other demos
51
52     SystemPalette { id: activePalette }
53
54     Item {
55         width: parent.width
56         anchors { top: parent.top; bottom: toolBar.top }
57
58         Image {
59             id: background
60             anchors.fill: parent
61             source: "SamegameCore/pics/background.png"
62             fillMode: Image.PreserveAspectCrop
63         }
64
65         Item {
66             id: gameCanvas
67             property int score: 0
68             property int blockSize: 40
69
70             z: 20; anchors.centerIn: parent
71             width: parent.width - (parent.width % blockSize);
72             height: parent.height - (parent.height % blockSize);
73
74             MouseArea {
75                 anchors.fill: parent; onClicked: Logic.handleClick(mouse.x,mouse.y);
76             }
77         }
78         Item{
79             ParticleSystem{ id: particleSystem; }
80             ImageParticle {
81                 system: particleSystem
82                 particles: ["red"]
83                 color: Qt.darker("red");//Actually want desaturated...
84                 image: "SamegameCore/pics/particle.png"
85                 colorVariation: 0.4
86                 alpha: 0.1
87             }
88             ImageParticle {
89                 system: particleSystem
90                 particles: ["green"]
91                 color: Qt.darker("green");//Actually want desaturated...
92                 image: "SamegameCore/pics/particle.png"
93                 colorVariation: 0.4
94                 alpha: 0.1
95             }
96             ImageParticle {
97                 system: particleSystem
98                 particles: ["blue"]
99                 color: Qt.darker("blue");//Actually want desaturated...
100                 image: "SamegameCore/pics/particle.png"
101                 colorVariation: 0.4
102                 alpha: 0.1
103             }
104             id: aboveGameCanvas
105             anchors.fill: gameCanvas
106             z: gameCanvas.z + 1
107         }
108     }
109
110     Dialog { id: dialog; anchors.centerIn: parent; z: 21 }
111
112     Dialog {
113         id: nameInputDialog
114
115         property int initialWidth: 0
116         property alias name: nameInputText.text
117
118         anchors.centerIn: parent
119         z: 22;
120
121         Behavior on width {
122             NumberAnimation {} 
123             enabled: nameInputDialog.initialWidth != 0
124         }
125
126         onClosed: {
127             if (nameInputText.text != "")
128                 Logic.saveHighScore(nameInputText.text);
129         }
130         Text {
131             id: dialogText
132             anchors { left: nameInputDialog.left; leftMargin: 20; verticalCenter: parent.verticalCenter }
133             text: "You won! Please enter your name: "
134         }
135         MouseArea {
136             anchors.fill: parent
137             onClicked: {
138                 if (nameInputText.text == "")
139                     nameInputText.openSoftwareInputPanel();
140                 else
141                     nameInputDialog.forceClose();
142             }
143         }
144
145         TextInput {
146             id: nameInputText
147             anchors { verticalCenter: parent.verticalCenter; left: dialogText.right }
148             focus: visible
149             autoScroll: false
150             maximumLength: 24
151             onTextChanged: {
152                 var newWidth = nameInputText.width + dialogText.width + 40;
153                 if ( (newWidth > nameInputDialog.width && newWidth < screen.width) 
154                         || (nameInputDialog.width > nameInputDialog.initialWidth) )
155                     nameInputDialog.width = newWidth;
156             }
157             onAccepted: {
158                 nameInputDialog.forceClose();
159             }
160         }
161     }
162
163     Rectangle {
164         id: toolBar
165         width: parent.width; height: 58
166         color: activePalette.window
167         anchors.bottom: screen.bottom
168
169         Button {
170             id: newGameButton
171             anchors { left: parent.left; leftMargin: 3; verticalCenter: parent.verticalCenter }
172             text: "New Game" 
173             onClicked: Logic.startNewGame()
174         }
175
176         Button {
177             visible: !inAnotherDemo
178             text: "Quit"
179             anchors { left: newGameButton.right; leftMargin: 3; verticalCenter: parent.verticalCenter }
180             onClicked: Qt.quit();
181         }
182
183         Text {
184             id: score
185             anchors { right: parent.right; rightMargin: 3; verticalCenter: parent.verticalCenter }
186             text: "Score: " + gameCanvas.score
187             font.bold: true
188             font.pixelSize: 24
189             color: activePalette.windowText
190         }
191     }
192 }