Initial commit2
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
import QtQuick 2.0
|
||||
import Sailfish.Silica 1.0
|
||||
|
||||
Page {
|
||||
id: page
|
||||
SilicaFlickable {
|
||||
id: flickable
|
||||
anchors.fill: page
|
||||
contentHeight: column.height
|
||||
Column {
|
||||
id: column
|
||||
width: parent.width - Theme.paddingLarge*2
|
||||
spacing: 20
|
||||
anchors {
|
||||
left: parent.left
|
||||
leftMargin: Theme.paddingLarge
|
||||
}
|
||||
PageHeader { title: qsTr("TetraFish") }
|
||||
Label {
|
||||
width: parent.width
|
||||
text: qsTr("A remake of SailTris which is a remake of Tetris\n")
|
||||
color: Theme.primaryColor
|
||||
font.pixelSize: Theme.fontSizeMedium
|
||||
horizontalAlignment: Text.AlignJustify
|
||||
wrapMode: Text.WordWrap
|
||||
}
|
||||
|
||||
Label {
|
||||
width: parent.width
|
||||
text: qsTr("TetraFish is a remake of the game SailTris by Billy Halley, available on OpenRepos. I wanted to contribute to SailTris with some changes and fixes but Billy Halley had stopped he's development on Sailfish and SailTris and so was TetraFish with the kind approval of Billy Halley born. \n\nTetra fish is a common fish in a lot of aquariums and the original game Tetris got it's name from the greek numerical prefix tetra (4) symbolising the 4 segments making up every block in a Tetris game.")
|
||||
color: Theme.primaryColor
|
||||
font.pixelSize: Theme.fontSizeMedium
|
||||
horizontalAlignment: Text.AlignJustify
|
||||
wrapMode: Text.WordWrap
|
||||
}
|
||||
Label {
|
||||
width: parent.width
|
||||
text: qsTr("Controls")
|
||||
color: Theme.highlightColor
|
||||
anchors.right: parent.right
|
||||
anchors.rightMargin: Theme.paddingLarge
|
||||
|
||||
font.pixelSize: Theme.fontSizeLarge
|
||||
horizontalAlignment: Text.AlignRight
|
||||
wrapMode: Text.WordWrap
|
||||
}
|
||||
Label {
|
||||
width: parent.width
|
||||
text: qsTr("TetraFish i controlled by multitouch\n\nUse one finger to swipe left, right and down (tap with second finger to rotate while moving)\n\nUse two fingers to swipe down without the ability to swipe left or right (handy to avoid mistakes :-)...)\n\nSwipe down with three fingers to make an instant down\n\nSwipe up with two fingers to pause the game")
|
||||
color: Theme.primaryColor
|
||||
font.pixelSize: Theme.fontSizeMedium
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
wrapMode: Text.WordWrap
|
||||
}
|
||||
Label {
|
||||
width: parent.width
|
||||
text: qsTr("Scoring")
|
||||
color: Theme.highlightColor
|
||||
anchors.right: parent.right
|
||||
anchors.rightMargin: Theme.paddingLarge
|
||||
|
||||
font.pixelSize: Theme.fontSizeLarge
|
||||
horizontalAlignment: Text.AlignRight
|
||||
wrapMode: Text.WordWrap
|
||||
}
|
||||
Label {
|
||||
width: parent.width
|
||||
text: qsTr("Block soft down = 1 x level\nBlock hard down = 2 x level\nBlock instant down = 3 x level\nSingle line clear = 100 x level\ntwo line clear = 300 x level\nthree line clear = 500 x level\nfour line clear (Tetris) = 800 x level\nBack to back Tetris (2 four line clear in a row) = 1200 x level\ncombo bonus = 50 x combo x level\n")
|
||||
color: Theme.primaryColor
|
||||
font.pixelSize: Theme.fontSizeMedium
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
wrapMode: Text.WordWrap
|
||||
}
|
||||
Label {
|
||||
width: parent.width
|
||||
text: qsTr("Credits")
|
||||
color: Theme.highlightColor
|
||||
anchors.right: parent.right
|
||||
anchors.rightMargin: Theme.paddingLarge
|
||||
|
||||
font.pixelSize: Theme.fontSizeLarge
|
||||
horizontalAlignment: Text.AlignRight
|
||||
wrapMode: Text.WordWrap
|
||||
}
|
||||
Label {
|
||||
width: parent.width
|
||||
text: qsTr("Music by kraku\n\nSounds from different sources (should be public domain according to the same sources!)\n\nSailTris by Billy Halley\n\nTetris by Alexey Pajitnov\n\nHighscoreModel by Nokia\n\nPut together and modified with added functions by me (nesnomis)\n\nAll copyrights belong to their respective owners\n\n")
|
||||
color: Theme.primaryColor
|
||||
font.pixelSize: Theme.fontSizeMedium
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
wrapMode: Text.WordWrap
|
||||
}
|
||||
}
|
||||
|
||||
VerticalScrollDecorator { flickable: flickable }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
import QtQuick 2.0
|
||||
import Sailfish.Silica 1.0
|
||||
|
||||
Page {
|
||||
id: page
|
||||
|
||||
// The effective value will be restricted by ApplicationWindow.allowedOrientations
|
||||
allowedOrientations: Orientation.All
|
||||
|
||||
// To enable PullDownMenu, place our content in a SilicaFlickable
|
||||
SilicaFlickable {
|
||||
anchors.fill: parent
|
||||
|
||||
// PullDownMenu and PushUpMenu must be declared in SilicaFlickable, SilicaListView or SilicaGridView
|
||||
PullDownMenu {
|
||||
MenuItem {
|
||||
text: qsTr("Show Page 2")
|
||||
onClicked: pageStack.animatorPush(Qt.resolvedUrl("SecondPage.qml"))
|
||||
}
|
||||
}
|
||||
|
||||
// Tell SilicaFlickable the height of its content.
|
||||
contentHeight: column.height
|
||||
|
||||
// Place our content in a Column. The PageHeader is always placed at the top
|
||||
// of the page, followed by our content.
|
||||
Column {
|
||||
id: column
|
||||
|
||||
width: page.width
|
||||
spacing: Theme.paddingLarge
|
||||
PageHeader {
|
||||
title: qsTr("UI Template")
|
||||
}
|
||||
Label {
|
||||
x: Theme.horizontalPageMargin
|
||||
text: qsTr("Hello Sailors")
|
||||
color: Theme.secondaryHighlightColor
|
||||
font.pixelSize: Theme.fontSizeExtraLarge
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,728 @@
|
||||
/*****************************************************************************
|
||||
** **
|
||||
** Created by Antonio Mancini **
|
||||
** Contact: <ziobilly94@gmail.com> **
|
||||
** This is a version of classic Tetris game for SailfishOS developed **
|
||||
** entirely by me, no copyright infringement intended. **
|
||||
** **
|
||||
*****************************************************************************/
|
||||
|
||||
import QtQuick 2.0
|
||||
import Sailfish.Silica 1.0
|
||||
import QtQuick.LocalStorage 2.0
|
||||
import QtQuick.Particles 2.0
|
||||
import "../js/settings.js" as Settings
|
||||
import "../game"
|
||||
|
||||
Page {
|
||||
id: page
|
||||
|
||||
|
||||
HighScoreModel {
|
||||
id: highScoreModel
|
||||
game: hsdb
|
||||
}
|
||||
|
||||
Functions {
|
||||
id: functions
|
||||
}
|
||||
property bool onlineEnabled: Settings.getValue("onlineEnabled",0)
|
||||
property string hsdb: onlineEnabled ? "online" : "local"
|
||||
property int dots: Settings.getValue("dots",1)
|
||||
property int ghostEnabled: Settings.getValue("ghostEnabled",1)
|
||||
property int musicEnabled: Settings.getValue("musicEnabled",1)
|
||||
property int sfxEnabled: Settings.getValue("sfxEnabled",1)
|
||||
property string musicScore: "../data/Kraku - Tetris part 1.ogg" //: Settings.getValue("musicScore","")
|
||||
property int scoreValue
|
||||
property int speedValue
|
||||
property int linesValue
|
||||
property int level: 1
|
||||
property int linesTotal: 0
|
||||
property int activeBlock
|
||||
property int futureBlock: -1
|
||||
property int combo: 1
|
||||
property int gravityBreak: 1
|
||||
property bool pauseVal
|
||||
property int downSpeed: 2500
|
||||
property int comboSpeed: 10000
|
||||
|
||||
// 0 = l_normal; 1 = l_reverse;
|
||||
// 2 = s_normal; 3 = s_reverse;
|
||||
// 4 = t_normal; 5 = square;
|
||||
// 6 = line
|
||||
|
||||
property variant activeColor
|
||||
property variant futureColor
|
||||
|
||||
property real centerX
|
||||
property real centerY
|
||||
|
||||
Timer {
|
||||
id: gameOverTimer
|
||||
property int i: 15
|
||||
property int j: 10
|
||||
property bool clear: true
|
||||
property bool done: false
|
||||
interval: 10
|
||||
repeat: true
|
||||
onTriggered : {
|
||||
if (clear) {
|
||||
if ( j === 0) {
|
||||
i--
|
||||
j = 10
|
||||
} else {
|
||||
if ( i === 0) {
|
||||
clear = false
|
||||
done = true
|
||||
j = 10
|
||||
i = 15
|
||||
} else {
|
||||
var index = i*12+j
|
||||
repeater.itemAt(index).color = Theme.secondaryHighlightColor//"black"//"transparent"//Theme.secondaryColor
|
||||
repeater.itemAt(index).opacity = 0.5//0.5
|
||||
j--
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if ( j === 0) {
|
||||
i--
|
||||
j = 10
|
||||
} else {
|
||||
if ( i === 0) {
|
||||
running = false
|
||||
clear = true
|
||||
if (highScoreModel.newScore) {
|
||||
highScoreModel.newScore = false
|
||||
getName.visible = true ;
|
||||
} else {
|
||||
pullDownMenu.enabled = true
|
||||
splash.visible = true
|
||||
}
|
||||
i = 15
|
||||
j = 10
|
||||
}
|
||||
else {
|
||||
done = false
|
||||
index = i*12+j
|
||||
repeater.itemAt(index).opacity = 0.1
|
||||
j--
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function downSpeedCalc(level) {
|
||||
if (level>1){
|
||||
for ( var i = 1; i < level; i++) {
|
||||
var ds = downSpeed/15
|
||||
downSpeed -= ds
|
||||
}
|
||||
return downSpeed
|
||||
}
|
||||
}
|
||||
|
||||
function comboSpeedCalc(level) {
|
||||
for ( var i = 1; i < level; i++) {
|
||||
comboSpeed = comboSpeed/30
|
||||
}
|
||||
return comboSpeed+200
|
||||
}
|
||||
|
||||
Timer {
|
||||
id: downTimer
|
||||
interval: downSpeed+150//interval-(interval/20)+150 //difficulty*(1338*Math.pow(Math.E,-0.07*level)+150) //difficulty*(1338*Math.pow(Math.E,-0.26*level)+150)
|
||||
repeat: true
|
||||
running: false
|
||||
onTriggered: {
|
||||
functions.flow()
|
||||
speedValue += 1
|
||||
}
|
||||
}
|
||||
|
||||
SilicaFlickable {
|
||||
id: root
|
||||
anchors.fill: page
|
||||
contentHeight : height
|
||||
|
||||
PushUpMenu {
|
||||
id:pushUpMenu
|
||||
enabled: false
|
||||
visible: false
|
||||
MenuItem {
|
||||
id: pauseMenuItem
|
||||
text: qsTr("Resume")
|
||||
onClicked: functions.pause()
|
||||
}
|
||||
}
|
||||
|
||||
PullDownMenu {
|
||||
id: pullDownMenu
|
||||
MenuItem {
|
||||
text: qsTr("About")
|
||||
onClicked: pageStack.push("About.qml")
|
||||
}
|
||||
|
||||
MenuItem {
|
||||
text: qsTr("Settings")
|
||||
onClicked: {
|
||||
var dialog = pageStack.push("SettingsDialog.qml", {"dots": dots, "ghostEnabled": ghostEnabled, "musicEnabled": musicEnabled, "sfxEnabled": sfxEnabled, "musicScore": musicScore, "onlineEnabled": onlineEnabled})
|
||||
dialog.accepted.connect(function() {
|
||||
|
||||
dots = dialog.dots
|
||||
ghostEnabled = dialog.ghostEnabled
|
||||
musicEnabled = dialog.musicEnabled
|
||||
sfxEnabled = dialog.sfxEnabled
|
||||
onlineEnabled = dialog.onlineEnabled
|
||||
highScoreModel.place = 0
|
||||
Settings.setValue("dots",dots)
|
||||
Settings.setValue("ghostEnabled",ghostEnabled)
|
||||
Settings.setValue("musicEnabled",musicEnabled)
|
||||
Settings.setValue("sfxEnabled",sfxEnabled)
|
||||
Settings.setValue("onlineEnabled",onlineEnabled)
|
||||
// highScoreModel.game = "local"
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
MenuItem {
|
||||
text: functions.garunning ? functions.gapaused ? qsTr("Resume") : qsTr("Pause") : qsTr("New Game")
|
||||
onClicked: {
|
||||
if (functions.garunning) {
|
||||
functions.pause()
|
||||
} else {
|
||||
|
||||
splash.visible = false
|
||||
highscores.visible = false
|
||||
functions.newGame()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Label {
|
||||
id: score
|
||||
text: qsTr("LEVEL ") + "\n" + qsTr("SCORE ") + "\n" + qsTr("LINES ")
|
||||
color: Theme.secondaryHighlightColor
|
||||
font.family: Theme.fontFamilyHeading
|
||||
font.pixelSize: Theme.fontSizeMedium
|
||||
anchors {
|
||||
left: parent.left
|
||||
leftMargin: Theme.paddingMedium
|
||||
bottom: futureGrid.bottom
|
||||
}
|
||||
}
|
||||
Label {
|
||||
id: scoreValues
|
||||
text: level + "\n" + scoreValue + "\n" + linesTotal
|
||||
color: Theme.highlightColor
|
||||
font.family: Theme.fontFamilyHeading
|
||||
font.bold: true
|
||||
font.pixelSize: Theme.fontSizeMedium
|
||||
horizontalAlignment: Text.AlignRight
|
||||
anchors {
|
||||
right: bonusPanel.left
|
||||
rightMargin: Theme.paddingLarge
|
||||
bottom: futureGrid.bottom
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
id: bonusPanel
|
||||
radius: height / 2
|
||||
height: futureGrid.height
|
||||
width: height
|
||||
color: Theme.highlightDimmerColor
|
||||
|
||||
opacity: bonusLabel.opacity > 0 ? 0.8 : 0//bonusLabel.opacity
|
||||
anchors {
|
||||
horizontalCenter: parent.horizontalCenter
|
||||
top: futureGrid.top
|
||||
}
|
||||
}
|
||||
|
||||
Label {
|
||||
id: bonusLabel
|
||||
text: ""///functions.garunning ? "" : "PLAY"
|
||||
color: Theme.highlightColor
|
||||
font.pixelSize: functions.garunning ? bonusPanel.height - (Theme.paddingMedium * 2) : Theme.fontSizeLarge
|
||||
font.bold: true
|
||||
anchors.verticalCenter: bonusPanel.verticalCenter
|
||||
anchors.horizontalCenter: bonusPanel.horizontalCenter
|
||||
opacity: 0//functions.garunning ? 0 : 1//infoTimer.running ? 1 : 0
|
||||
Behavior on opacity {
|
||||
FadeAnimator {}
|
||||
}
|
||||
}
|
||||
|
||||
Grid {
|
||||
id: futureGrid
|
||||
y: (parent.height-rect.height-height)/2
|
||||
anchors {
|
||||
right: parent.right
|
||||
rightMargin: Theme.paddingLarge
|
||||
}
|
||||
columns: 4
|
||||
rows: 3
|
||||
Repeater {
|
||||
id: futureRepeater
|
||||
model: 12
|
||||
delegate: Dot {width: Theme.paddingLarge*5/3 ;color: Theme.highlightBackgroundColor; opacity: 0.1}
|
||||
}
|
||||
}
|
||||
|
||||
Timer { // EXPERIMENT
|
||||
id: hssplachTimer
|
||||
running: splash.visible || highscores.visible && Qt.application.active && !contextMenu.visible? true : false//!functions.garunning && !gameOverTimer.running ? true : false
|
||||
interval: 8000
|
||||
repeat: true
|
||||
onTriggered: if (highscores.visible) {highscores.visible=false;splash.visible = true;} else {highscores.visible=true;splash.visible=false}//highscores.visible ? splash.visible = true : high.visible = false
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
id: rect
|
||||
width: grid.width
|
||||
height: grid.height
|
||||
anchors {
|
||||
bottom: parent.bottom
|
||||
}
|
||||
border.color: "transparent"
|
||||
color: "black"
|
||||
opacity: 0.8//0.8
|
||||
Grid {
|
||||
id: grid
|
||||
columns: 12
|
||||
rows: 17
|
||||
Repeater {
|
||||
id: repeater
|
||||
model: 204
|
||||
delegate: Dot {width: page.width/12 ;color: Theme.highlightBackgroundColor; opacity: 0.1}
|
||||
onItemAdded: { // Bordi "muro"... seriamente, si può fare di meglio, 576 caratteri per una linea è più brutto di questo commento, da aggiungere a newGame() magari
|
||||
if (index < 12 || index > 191 || index === 0 || index === 12 ||
|
||||
index === 24 || index === 36 || index === 48 || index === 60 ||
|
||||
index === 72 || index === 84 || index === 96 || index === 108 ||
|
||||
index === 120 || index === 132 || index === 144 || index === 156 ||
|
||||
index === 168 || index === 180 || index === 23 || index === 35 ||
|
||||
index === 47 || index === 59 || index === 71 || index === 83 ||
|
||||
index === 95 || index === 107 || index === 119 || index === 131 ||
|
||||
index === 143 || index === 155 || index === 167 || index === 179 || index === 191)
|
||||
{
|
||||
itemAt(index).active = 3
|
||||
itemAt(index).color = Theme.highlightBackgroundColor
|
||||
itemAt(index).opacity = 0.5
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* ParticleSystem {
|
||||
id: sys
|
||||
}
|
||||
|
||||
Emitter {
|
||||
anchors.fill: parent
|
||||
system: sys
|
||||
ImageParticle {
|
||||
anchors.fill: parent
|
||||
system: sys
|
||||
source: "../data/dot.png"
|
||||
clip: true
|
||||
id: redblip
|
||||
}
|
||||
velocity: PointDirection {yVariation: 16; xVariation: 5}
|
||||
acceleration: PointDirection {y: -16}
|
||||
lifeSpan: Emitter.InfiniteLife
|
||||
maximumEmitted: 1000
|
||||
} */
|
||||
|
||||
MultiPointTouchArea {
|
||||
id: mouseArea
|
||||
property int offsetX: grid.width/14
|
||||
property int offsetY: (grid.height/19)
|
||||
property int blahX: (parent.width - (grid.width-point1.x))/offsetX
|
||||
property int blahY: (parent.height - (grid.height-point1.y))/offsetY
|
||||
property int prevX
|
||||
property int prevY
|
||||
property int initX
|
||||
property int initY
|
||||
property int inter: 85
|
||||
property int plus: 0
|
||||
x: 0
|
||||
y: 0
|
||||
|
||||
anchors.fill: grid
|
||||
anchors.margins: offsetX
|
||||
mouseEnabled: true
|
||||
|
||||
touchPoints: [
|
||||
TouchPoint { id: point1 },
|
||||
TouchPoint { id: point2 },
|
||||
TouchPoint { id: point3 }
|
||||
]
|
||||
|
||||
|
||||
onTouchUpdated: {
|
||||
if (functions.maenabled){
|
||||
if (point1.pressed && point2.pressed && point3.pressed){
|
||||
if (blahY > prevY+2){
|
||||
prevY=blahY
|
||||
functions.instantDown()
|
||||
}
|
||||
} else if (point1.pressed && point2.pressed && !point3.pressed){
|
||||
if (blahY > prevY){
|
||||
prevY=blahY
|
||||
functions.down()
|
||||
}
|
||||
if (blahY < prevY-2){
|
||||
prevY=blahY
|
||||
functions.pause()
|
||||
}
|
||||
} else if (point1.pressed && !point2.pressed && !point3.pressed){
|
||||
//if (blahY==prevY) var plus = 0; else plus = 1;
|
||||
if (blahY > prevY){
|
||||
plus = 1;
|
||||
functions.down()
|
||||
prevY=blahY
|
||||
} else {
|
||||
if (blahX < prevX-plus) {
|
||||
functions.left()
|
||||
prevX=blahX
|
||||
plus = 0
|
||||
}
|
||||
if (blahX > prevX+plus){
|
||||
functions.right()
|
||||
prevX=blahX
|
||||
plus = 0
|
||||
}
|
||||
}
|
||||
/* if (blahY > prevY){
|
||||
prevY=blahY
|
||||
functions.down()
|
||||
} */
|
||||
}
|
||||
// console.log(blahX + " - " + prevX)
|
||||
}
|
||||
}
|
||||
|
||||
onReleased: {
|
||||
if (blahY == initY && blahX == initX && !point1.pressed && !point2.pressed || point1.pressed && !point2.pressed){
|
||||
functions.rotate()
|
||||
}
|
||||
|
||||
functions.maenabled = true
|
||||
}
|
||||
|
||||
onPressed: {
|
||||
prevX = blahX
|
||||
initX = blahX
|
||||
prevY = blahY
|
||||
initY = blahY
|
||||
}
|
||||
}
|
||||
Label {
|
||||
id: gameOverLabel
|
||||
anchors {
|
||||
horizontalCenter: rect.horizontalCenter
|
||||
verticalCenter: rect.verticalCenter
|
||||
}
|
||||
style: Text.Outline; styleColor: Theme.secondaryHighlightColor
|
||||
text: "GAME OVER"
|
||||
color: Theme.highlightColor
|
||||
font.pixelSize: Theme.fontSizeHuge
|
||||
font.bold: true
|
||||
visible: !functions.garunning && opacity > 0 ? true : false
|
||||
opacity: gameOverTimer.running ? 1 : 0
|
||||
|
||||
Behavior on opacity {
|
||||
FadeAnimator {}
|
||||
}
|
||||
|
||||
}
|
||||
Label {
|
||||
id: pauseLabel
|
||||
anchors {
|
||||
horizontalCenter: rect.horizontalCenter
|
||||
verticalCenter: rect.verticalCenter
|
||||
}
|
||||
style: Text.Outline; styleColor: Theme.secondaryHighlightColor
|
||||
text: "PAUSED"
|
||||
color: Theme.highlightColor
|
||||
font.pixelSize: Theme.fontSizeHuge
|
||||
font.bold: true
|
||||
visible: false
|
||||
states: [
|
||||
State { when: stateVisible;
|
||||
PropertyChanges { target: myRect; opacity: 1.0 }
|
||||
},
|
||||
State { when: !stateVisible;
|
||||
PropertyChanges { target: myRect; opacity: 0.0 }
|
||||
}
|
||||
]
|
||||
transitions: Transition {
|
||||
NumberAnimation { property: "opacity"; duration: 300}
|
||||
}
|
||||
}
|
||||
Label {
|
||||
id: infoLabel
|
||||
anchors {
|
||||
verticalCenter: rect.verticalCenter
|
||||
horizontalCenter: rect.horizontalCenter
|
||||
}
|
||||
width: parent.width
|
||||
wrapMode: Text.WordWrap
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
style: Text.Outline; styleColor: Theme.secondaryHighlightColor;
|
||||
color: Theme.highlightColor
|
||||
font.pixelSize: Theme.fontSizeLarge*2
|
||||
font.bold: true
|
||||
opacity: infoTimer.running ? 1 : 0
|
||||
|
||||
Behavior on opacity {
|
||||
FadeAnimator {}
|
||||
}
|
||||
}
|
||||
Timer {
|
||||
id: infoTimer
|
||||
running: false
|
||||
repeat: false
|
||||
interval: 1100
|
||||
onTriggered: {
|
||||
infoLabel.opacity = 0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Rectangle {
|
||||
id: highscores
|
||||
anchors.verticalCenter: rect.verticalCenter
|
||||
anchors.horizontalCenter: rect.horizontalCenter
|
||||
width: rect.width - (rect.width/6)
|
||||
height: rect.height - (rect.height/8)+Theme.paddingSmall
|
||||
visible: splash.visible || functions.garunning || getName.visible && opacity === 0 ? false : true //!splash.visible && !getName.visible && !functions.garunning
|
||||
color: "transparent"//Theme.highlightBackgroundColor
|
||||
opacity: !visible ? 0 : 0.8
|
||||
|
||||
Behavior on opacity {
|
||||
FadeAnimator {onStopped: console.log("highscores fade animation klar")}
|
||||
}
|
||||
|
||||
Label {
|
||||
id: hs1
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
anchors.top: parent.top
|
||||
anchors.topMargin: Theme.paddingLarge
|
||||
text: "HIGHSCORES ["+highScoreModel.game+"]"
|
||||
color: Theme.secondaryHighlightColor
|
||||
font.pixelSize: Theme.fontSizeLarge
|
||||
font.bold: true
|
||||
MouseArea {
|
||||
anchors.fill: hs1
|
||||
onClicked: {
|
||||
!onlineEnabled ? onlineEnabled=true : onlineEnabled=false
|
||||
console.log("ONLINE: "+highScoreModel.game)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ListView {
|
||||
width: parent.width; height: parent.height - hs1.height
|
||||
enabled: true
|
||||
anchors.top: hs1.bottom
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.margins: Theme.paddingLarge
|
||||
model: highScoreModel
|
||||
delegate: ListItem {
|
||||
id: showDelegate
|
||||
// menu: contextMenu
|
||||
highlighted: index == highScoreModel.place-1 ? true : false
|
||||
width: ListView.view.width
|
||||
height: menuOpen ? contextMenu.height + pn.height + Theme.paddingSmall : pn.height + Theme.paddingSmall//contextMenu.height + contentItem.height + Theme.paddingMedium : contentItem.height + Theme.paddingMedium
|
||||
contentHeight: pn.height + Theme.paddingSmall
|
||||
Text {
|
||||
id: pn
|
||||
font.pixelSize: Theme.fontSizeLarge
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: Theme.paddingMedium
|
||||
color: Theme.highlightColor
|
||||
text: index+(1)+"."
|
||||
}
|
||||
Text {
|
||||
id: pnm
|
||||
font.pixelSize: Theme.fontSizeLarge
|
||||
anchors.left: pn.right
|
||||
anchors.leftMargin: Theme.paddingMedium
|
||||
anchors.top: pn.top
|
||||
color: Theme.highlightColor
|
||||
text: player
|
||||
}
|
||||
Text {
|
||||
font.pixelSize: Theme.fontSizeLarge
|
||||
anchors.right: parent.right
|
||||
anchors.rightMargin: Theme.paddingMedium
|
||||
anchors.top: pn.top
|
||||
color: Theme.highlightColor
|
||||
text: score
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ContextMenu {
|
||||
id: contextMenu
|
||||
width: rect.width - (rect.width/6)
|
||||
anchors.horizontalCenter: highscores.horizontalCenter
|
||||
MenuItem {
|
||||
id:onlineMenu
|
||||
|
||||
visible: true
|
||||
text: qsTr("Share score online")
|
||||
onClicked: {
|
||||
var uuid = generateUUID()
|
||||
console.log("UUID: "+uuid)
|
||||
/* internal ? ps(source) : model.id == 0 ? ps(source) : cps(model.id)
|
||||
radioStation = title
|
||||
if (icon == "0") picon = "../allradio-data/images/allradio.png"
|
||||
else if (icon.search(".png")>0) picon = icon.toLowerCase(); // The old save in database
|
||||
else picon = "../allradio-data/images/"+icon+".png";
|
||||
website = (Qt.resolvedUrl(site)) */
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
id: splash
|
||||
anchors.verticalCenter: rect.verticalCenter
|
||||
anchors.horizontalCenter: rect.horizontalCenter
|
||||
width: rect.width - (rect.width/6)
|
||||
height: rect.height - (rect.height/8) + Theme.paddingSmall
|
||||
|
||||
visible: functions.garunning || getName.visible || highscores.visible && opacity === 0 ? false : true//true && !functions.garunning//!functions.garunning && !getName.visible && !highscores.visible//&& !gameOverTimer.done ? true : false //&& gameOverTimer.running ? done :
|
||||
color: "transparent"//Theme.highlightBackgroundColor
|
||||
opacity: !visible ? 0 : 0.8
|
||||
|
||||
Behavior on opacity {
|
||||
FadeAnimator {}
|
||||
}
|
||||
Column {
|
||||
spacing: Theme.paddingLarge
|
||||
anchors {
|
||||
horizontalCenter: splash.horizontalCenter
|
||||
verticalCenter: splash.verticalCenter
|
||||
}
|
||||
Label {
|
||||
id: name
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
text: "TetraFish"
|
||||
color: Theme.highlightColor
|
||||
font.pixelSize: Theme.fontSizeHuge
|
||||
font.bold: true
|
||||
}
|
||||
Image {
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
id: tetraFish
|
||||
width: name.width
|
||||
height: width
|
||||
source: "../data/tetrafish.png"
|
||||
}
|
||||
|
||||
Label {
|
||||
id: info1
|
||||
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
text: "A TETRIS clone"
|
||||
color: Theme.secondaryHighlightColor
|
||||
font.pixelSize: Theme.fontSizeLarge
|
||||
font.bold: true
|
||||
}
|
||||
Label {
|
||||
id: info2
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
text: "Presented by NESNOMIS"
|
||||
color: Theme.secondaryHighlightColor
|
||||
font.pixelSize: Theme.fontSizeSmall
|
||||
font.bold: true
|
||||
}
|
||||
}
|
||||
}
|
||||
Rectangle {
|
||||
id: getName
|
||||
anchors.fill: rect
|
||||
anchors.left: rect.left
|
||||
anchors.top: rect.top
|
||||
width: rect.width
|
||||
height: rect.height
|
||||
|
||||
visible: false//!functions.garunning && !gameOverTimer.done ? true : false //&& gameOverTimer.running ? done :
|
||||
color: "black"//Theme.highlightBackgroundColor
|
||||
opacity: !visible ? 0 : 0.8
|
||||
|
||||
Behavior on opacity {
|
||||
FadeAnimator {}
|
||||
}
|
||||
|
||||
Label {
|
||||
id: congrat
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
text: "CONGRATULATIONS"//+highScoreModel.place
|
||||
color: Theme.highlightColor
|
||||
anchors.bottom: namn.top
|
||||
font.pixelSize: Theme.fontSizeExtraLarge
|
||||
font.bold: true
|
||||
}
|
||||
Label {
|
||||
id: namn
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
text: "You placed No. "+highScoreModel.place
|
||||
color: Theme.primaryColor
|
||||
anchors.bottom: textField.top
|
||||
anchors.bottomMargin: Theme.paddingLarge * 3
|
||||
font.pixelSize: Theme.fontSizeMedium
|
||||
font.bold: true
|
||||
}
|
||||
|
||||
TextField {
|
||||
id: textField
|
||||
enabled: parent.visible
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
anchors.bottom: parent.bottom
|
||||
width: parent.width
|
||||
maximumLength: 8
|
||||
focus: true
|
||||
placeholderText: "ENTER YOUR NAME"
|
||||
inputMethodHints: Qt.ImhUppercaseOnly | Qt.ImhPreferUppercase | Qt.ImhNoPredictiveText
|
||||
horizontalAlignment: TextInput.AlignHCenter
|
||||
font.bold: true
|
||||
font.pixelSize: Theme.fontSizeHuge
|
||||
font.capitalization: Font.AllUppercase
|
||||
EnterKey.iconSource: "image://theme/icon-m-enter" //"image://theme/icon-m-enter-close"
|
||||
EnterKey.onClicked: {
|
||||
|
||||
getName.visible = false
|
||||
splash.visible = false
|
||||
highscores.visible = true
|
||||
pullDownMenu.enabled = true
|
||||
root.interactive = true
|
||||
functions.saveHighscore(text.toUpperCase(),scoreValue)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
function generateUUID(){
|
||||
var d = new Date().getTime();
|
||||
var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
|
||||
var r = (d + Math.random()*16)%16 | 0;
|
||||
d = Math.floor(d/16);
|
||||
return (c === 'x' ? r : (r&0x3|0x8)).toString(16);
|
||||
});
|
||||
return uuid;
|
||||
}
|
||||
|
||||
Component.onCompleted: splash.visible = true
|
||||
}
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
import QtQuick 2.0
|
||||
import Sailfish.Silica 1.0
|
||||
|
||||
Page {
|
||||
id: page
|
||||
|
||||
// The effective value will be restricted by ApplicationWindow.allowedOrientations
|
||||
allowedOrientations: Orientation.All
|
||||
|
||||
SilicaListView {
|
||||
id: listView
|
||||
model: 20
|
||||
anchors.fill: parent
|
||||
header: PageHeader {
|
||||
title: qsTr("Nested Page")
|
||||
}
|
||||
delegate: BackgroundItem {
|
||||
id: delegate
|
||||
|
||||
Label {
|
||||
x: Theme.horizontalPageMargin
|
||||
text: qsTr("Item") + " " + index
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
color: delegate.highlighted ? Theme.highlightColor : Theme.primaryColor
|
||||
}
|
||||
onClicked: console.log("Clicked " + index)
|
||||
}
|
||||
VerticalScrollDecorator {}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,105 @@
|
||||
import QtQuick 2.0
|
||||
import Sailfish.Silica 1.0
|
||||
|
||||
Dialog {
|
||||
id: page
|
||||
property int dots
|
||||
property int ghostEnabled
|
||||
property int musicEnabled
|
||||
property int sfxEnabled
|
||||
property int highscoreValue
|
||||
property int onlineEnabled
|
||||
|
||||
SilicaFlickable {
|
||||
id: flickable
|
||||
anchors.fill: parent
|
||||
contentHeight: column.height
|
||||
|
||||
Column {
|
||||
id: column
|
||||
width: page.width
|
||||
spacing: Theme.paddingLarge
|
||||
DialogHeader {
|
||||
title: qsTr("Settings")
|
||||
}
|
||||
|
||||
TextSwitch {
|
||||
id: dotSwitch
|
||||
automaticCheck: false
|
||||
checked: dots ? true : false
|
||||
text: checked ? qsTr("Squares") : qsTr("Dots")
|
||||
description: qsTr("Changes the shape of the blocks")
|
||||
onClicked: {
|
||||
if (dots === 0) {
|
||||
dots = 1
|
||||
}
|
||||
else {
|
||||
dots = 0
|
||||
}
|
||||
}
|
||||
}
|
||||
TextSwitch {
|
||||
id: ghostSwitch
|
||||
automaticCheck: false
|
||||
checked: ghostEnabled ? true : false
|
||||
text: checked ? qsTr("Ghost Enabled") : qsTr("Ghost Disabled")
|
||||
description: qsTr("Display a hint of where the block will fall")
|
||||
onClicked: {
|
||||
if (ghostEnabled === 0) {
|
||||
ghostEnabled = 1
|
||||
}
|
||||
else {
|
||||
ghostEnabled = 0
|
||||
}
|
||||
}
|
||||
}
|
||||
TextSwitch {
|
||||
id: sfxSwitch
|
||||
automaticCheck: false
|
||||
checked: sfxEnabled ? true : false
|
||||
text: checked ? qsTr("SoundFX Enabled") : qsTr("SoundFX Disabled")
|
||||
description: qsTr("Play sound effects in game")
|
||||
onClicked: {
|
||||
if (sfxEnabled === 0) {
|
||||
sfxEnabled = 1
|
||||
}
|
||||
else {
|
||||
sfxEnabled = 0
|
||||
}
|
||||
}
|
||||
}
|
||||
TextSwitch {
|
||||
id: musicSwitch
|
||||
automaticCheck: false
|
||||
checked: musicEnabled ? true : false
|
||||
text: checked ? qsTr("Music Enabled") : qsTr("Music Disabled")
|
||||
description: qsTr("Play music in game")
|
||||
enabled: true /// enable if music should be included?!
|
||||
onClicked: {
|
||||
if (musicEnabled === 0) {
|
||||
musicEnabled = 1
|
||||
}
|
||||
else {
|
||||
musicEnabled = 0
|
||||
}
|
||||
}
|
||||
}
|
||||
/* TextSwitch {
|
||||
id: onlineSwitch
|
||||
automaticCheck: false
|
||||
checked: onlineEnabled ? true : false
|
||||
text: checked ? qsTr("Online highscores Enabled") : qsTr("Online highscores Disabled")
|
||||
description: qsTr("Save scores online to compare scores with other players")
|
||||
enabled: true /// enable if music should be included?!
|
||||
onClicked: {
|
||||
if (onlineEnabled === 0) {
|
||||
onlineEnabled = 1
|
||||
}
|
||||
else {
|
||||
onlineEnabled = 0
|
||||
}
|
||||
}
|
||||
} */
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user