ref #30 new structure ("using QuasarApp Cmake Project")
79
.gitignore
vendored
@ -1,33 +1,19 @@
|
|||||||
# C++ objects and libs
|
# C++ objects and libs
|
||||||
|
|
||||||
*.slo
|
*.slo
|
||||||
*.lo
|
*.lo
|
||||||
*.o
|
*.o
|
||||||
*.a
|
*.a
|
||||||
*.la
|
*.la
|
||||||
*.lai
|
*.lai
|
||||||
*.so*
|
*.so
|
||||||
|
*.so.*
|
||||||
*.dll
|
*.dll
|
||||||
*.dylib
|
*.dylib
|
||||||
*.exe
|
|
||||||
|
|
||||||
# Qt-es
|
# Qt-es
|
||||||
/Build*
|
object_script.*.Release
|
||||||
/build*
|
object_script.*.Debug
|
||||||
SnakeClient/Client/build/
|
*_plugin_import.cpp
|
||||||
SnakeClient/SnakeApp/build/
|
|
||||||
SnakeServer/Server/build/
|
|
||||||
SnakeServer/serverProtocolTests/build/
|
|
||||||
SnakeServer/Terminal/build
|
|
||||||
*.stash
|
|
||||||
/Release*
|
|
||||||
/parts/*
|
|
||||||
/prime/*
|
|
||||||
/snap/.snapcraft/*
|
|
||||||
/stage/*
|
|
||||||
/Build-*
|
|
||||||
/Release-*
|
|
||||||
*.stash
|
|
||||||
/.qmake.cache
|
/.qmake.cache
|
||||||
/.qmake.stash
|
/.qmake.stash
|
||||||
*.pro.user
|
*.pro.user
|
||||||
@ -39,46 +25,43 @@ moc_*.cpp
|
|||||||
moc_*.h
|
moc_*.h
|
||||||
qrc_*.cpp
|
qrc_*.cpp
|
||||||
ui_*.h
|
ui_*.h
|
||||||
|
*.qmlc
|
||||||
|
*.jsc
|
||||||
Makefile*
|
Makefile*
|
||||||
*build-*
|
*build-*
|
||||||
*_qml.cpp
|
tests/build/
|
||||||
*.snap
|
src/build/
|
||||||
*.qm
|
*.qm
|
||||||
qml_qmlcache.qrc
|
*.prl
|
||||||
qmlcache_loader.cpp
|
|
||||||
snake
|
# Qt unit tests
|
||||||
SnakeServer/Terminal/build/debug/Terminal
|
target_wrapper.*
|
||||||
|
|
||||||
# QtCreator
|
# QtCreator
|
||||||
installer/HanoiTowersInstaller
|
|
||||||
*.autosave
|
*.autosave
|
||||||
installer/installer
|
|
||||||
|
|
||||||
# QtCtreator Qml
|
# QtCreator Qml
|
||||||
*.qmlproject.user
|
*.qmlproject.user
|
||||||
*.qmlproject.user.*
|
*.qmlproject.user.*
|
||||||
|
|
||||||
# QtCtreator CMake
|
# QtCreator CMake
|
||||||
CMakeLists.txt.user*
|
CMakeLists.txt.user*
|
||||||
installer/packages/Snake/data
|
|
||||||
\.buildconfig
|
|
||||||
|
|
||||||
SnakeServer/Daemon/build/*
|
# QtCreator 4.8< compilation database
|
||||||
|
compile_commands.json
|
||||||
|
|
||||||
SnakeServer/Client/build/*/Client
|
# QtCreator local machine specific files for imported projects
|
||||||
|
*creator.user*
|
||||||
|
|
||||||
SnakeServer/Daemon/build/*/Daemon
|
CMakeLists.txt.user
|
||||||
|
CMakeCache.txt
|
||||||
SnakeServer/serverProtocolTests/target_wrapper\.sh
|
CMakeFiles
|
||||||
|
CMakeScripts
|
||||||
SnakeServer/serverProtocolTests/serverProtocolTests
|
Testing
|
||||||
|
Makefile
|
||||||
deployTests/
|
cmake_install.cmake
|
||||||
|
install_manifest.txt
|
||||||
installer/SnakeInstaller
|
compile_commands.json
|
||||||
|
CTestTestfile.cmake
|
||||||
Distro/
|
_deps
|
||||||
|
*_autogen*
|
||||||
android-build/
|
|
||||||
|
|
||||||
*.db
|
|
||||||
|
10
.gitmodules
vendored
@ -1,10 +0,0 @@
|
|||||||
[submodule "QuasarAppLib"]
|
|
||||||
path = QuasarAppLib
|
|
||||||
url = https://github.com/QuasarApp/QuasarAppLib.git
|
|
||||||
|
|
||||||
[submodule "SnakeServer/Qt-Secret"]
|
|
||||||
path = SnakeServer/Qt-Secret
|
|
||||||
url = git@github.com:QuasarApp/Qt-Secret.git
|
|
||||||
[submodule "installer"]
|
|
||||||
path = installer
|
|
||||||
url = git@github.com:QuasarApp/DesktopInstaller.git
|
|
60
CMakeLists.txt
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
#
|
||||||
|
# Copyright (C) 2020-2021 QuasarApp.
|
||||||
|
# Distributed under the lgplv3 software license, see the accompanying
|
||||||
|
# Everyone is permitted to copy and distribute verbatim copies
|
||||||
|
# of this license document, but changing it is not allowed.
|
||||||
|
#
|
||||||
|
|
||||||
|
cmake_minimum_required(VERSION 3.14)
|
||||||
|
project(SnakeProject)
|
||||||
|
if(TARGET ${PROJECT_NAME})
|
||||||
|
message("The ${PROJECT_NAME} arledy included in main Project")
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
||||||
|
set(CMAKE_AUTOMOC ON)
|
||||||
|
set(CMAKE_AUTORCC ON)
|
||||||
|
set(CMAKE_AUTOUIC ON)
|
||||||
|
|
||||||
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
|
||||||
|
find_package(QT NAMES Qt6 Qt5 COMPONENTS Core Test QUIET)
|
||||||
|
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core Test QUIET)
|
||||||
|
|
||||||
|
include(submodules/CMake/ccache.cmake)
|
||||||
|
include(submodules/CMake/QuasarAppCITargets.cmake)
|
||||||
|
|
||||||
|
# Add sub directories
|
||||||
|
add_subdirectory(src)
|
||||||
|
|
||||||
|
if (NOT DEFINED SnakeProject_TESTS)
|
||||||
|
set(SnakeProject_TESTS ON)
|
||||||
|
|
||||||
|
if (DEFINED TARGET_PLATFORM_TOOLCHAIN)
|
||||||
|
if (${TARGET_PLATFORM_TOOLCHAIN} STREQUAL "wasm32")
|
||||||
|
set(SnakeProject_TESTS OFF)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (ANDROID)
|
||||||
|
set(SnakeProject_TESTS OFF)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (NOT QT_VERSION_MAJOR)
|
||||||
|
set(SnakeProject_TESTS OFF)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
|
||||||
|
if (SnakeProject_TESTS)
|
||||||
|
add_subdirectory(tests)
|
||||||
|
else()
|
||||||
|
message("The ${PROJECT_NAME} tests is disabled.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
initAll()
|
||||||
|
|
||||||
|
addDoc(${PROJECT_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/doxygen.conf)
|
||||||
|
addDeployFromCustomFile("SnakeProject" "${CMAKE_CURRENT_SOURCE_DIR}/Deploy/SnakeProject.json")
|
19
Deploy/SnakeProject.json
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"binDir": "./../src/build/Debug/SnakeProjectEaxample",
|
||||||
|
"clear": true,
|
||||||
|
"libDir": "./../",
|
||||||
|
"recursiveDepth": "10",
|
||||||
|
"deploySystem": false,
|
||||||
|
"qmlDir": "../",
|
||||||
|
"ignoreEnv": [
|
||||||
|
"./../installer",
|
||||||
|
"./../Distro",
|
||||||
|
"./../parts",
|
||||||
|
"./../snap",
|
||||||
|
"./../prime",
|
||||||
|
"./../stage"
|
||||||
|
],
|
||||||
|
"extraLib": "crypto",
|
||||||
|
"targetDir": "./../DisttibutionKit"
|
||||||
|
}
|
||||||
|
|
165
LICENSE
Normal file
@ -0,0 +1,165 @@
|
|||||||
|
GNU LESSER GENERAL PUBLIC LICENSE
|
||||||
|
Version 3, 29 June 2007
|
||||||
|
|
||||||
|
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
|
||||||
|
This version of the GNU Lesser General Public License incorporates
|
||||||
|
the terms and conditions of version 3 of the GNU General Public
|
||||||
|
License, supplemented by the additional permissions listed below.
|
||||||
|
|
||||||
|
0. Additional Definitions.
|
||||||
|
|
||||||
|
As used herein, "this License" refers to version 3 of the GNU Lesser
|
||||||
|
General Public License, and the "GNU GPL" refers to version 3 of the GNU
|
||||||
|
General Public License.
|
||||||
|
|
||||||
|
"The Library" refers to a covered work governed by this License,
|
||||||
|
other than an Application or a Combined Work as defined below.
|
||||||
|
|
||||||
|
An "Application" is any work that makes use of an interface provided
|
||||||
|
by the Library, but which is not otherwise based on the Library.
|
||||||
|
Defining a subclass of a class defined by the Library is deemed a mode
|
||||||
|
of using an interface provided by the Library.
|
||||||
|
|
||||||
|
A "Combined Work" is a work produced by combining or linking an
|
||||||
|
Application with the Library. The particular version of the Library
|
||||||
|
with which the Combined Work was made is also called the "Linked
|
||||||
|
Version".
|
||||||
|
|
||||||
|
The "Minimal Corresponding Source" for a Combined Work means the
|
||||||
|
Corresponding Source for the Combined Work, excluding any source code
|
||||||
|
for portions of the Combined Work that, considered in isolation, are
|
||||||
|
based on the Application, and not on the Linked Version.
|
||||||
|
|
||||||
|
The "Corresponding Application Code" for a Combined Work means the
|
||||||
|
object code and/or source code for the Application, including any data
|
||||||
|
and utility programs needed for reproducing the Combined Work from the
|
||||||
|
Application, but excluding the System Libraries of the Combined Work.
|
||||||
|
|
||||||
|
1. Exception to Section 3 of the GNU GPL.
|
||||||
|
|
||||||
|
You may convey a covered work under sections 3 and 4 of this License
|
||||||
|
without being bound by section 3 of the GNU GPL.
|
||||||
|
|
||||||
|
2. Conveying Modified Versions.
|
||||||
|
|
||||||
|
If you modify a copy of the Library, and, in your modifications, a
|
||||||
|
facility refers to a function or data to be supplied by an Application
|
||||||
|
that uses the facility (other than as an argument passed when the
|
||||||
|
facility is invoked), then you may convey a copy of the modified
|
||||||
|
version:
|
||||||
|
|
||||||
|
a) under this License, provided that you make a good faith effort to
|
||||||
|
ensure that, in the event an Application does not supply the
|
||||||
|
function or data, the facility still operates, and performs
|
||||||
|
whatever part of its purpose remains meaningful, or
|
||||||
|
|
||||||
|
b) under the GNU GPL, with none of the additional permissions of
|
||||||
|
this License applicable to that copy.
|
||||||
|
|
||||||
|
3. Object Code Incorporating Material from Library Header Files.
|
||||||
|
|
||||||
|
The object code form of an Application may incorporate material from
|
||||||
|
a header file that is part of the Library. You may convey such object
|
||||||
|
code under terms of your choice, provided that, if the incorporated
|
||||||
|
material is not limited to numerical parameters, data structure
|
||||||
|
layouts and accessors, or small macros, inline functions and templates
|
||||||
|
(ten or fewer lines in length), you do both of the following:
|
||||||
|
|
||||||
|
a) Give prominent notice with each copy of the object code that the
|
||||||
|
Library is used in it and that the Library and its use are
|
||||||
|
covered by this License.
|
||||||
|
|
||||||
|
b) Accompany the object code with a copy of the GNU GPL and this license
|
||||||
|
document.
|
||||||
|
|
||||||
|
4. Combined Works.
|
||||||
|
|
||||||
|
You may convey a Combined Work under terms of your choice that,
|
||||||
|
taken together, effectively do not restrict modification of the
|
||||||
|
portions of the Library contained in the Combined Work and reverse
|
||||||
|
engineering for debugging such modifications, if you also do each of
|
||||||
|
the following:
|
||||||
|
|
||||||
|
a) Give prominent notice with each copy of the Combined Work that
|
||||||
|
the Library is used in it and that the Library and its use are
|
||||||
|
covered by this License.
|
||||||
|
|
||||||
|
b) Accompany the Combined Work with a copy of the GNU GPL and this license
|
||||||
|
document.
|
||||||
|
|
||||||
|
c) For a Combined Work that displays copyright notices during
|
||||||
|
execution, include the copyright notice for the Library among
|
||||||
|
these notices, as well as a reference directing the user to the
|
||||||
|
copies of the GNU GPL and this license document.
|
||||||
|
|
||||||
|
d) Do one of the following:
|
||||||
|
|
||||||
|
0) Convey the Minimal Corresponding Source under the terms of this
|
||||||
|
License, and the Corresponding Application Code in a form
|
||||||
|
suitable for, and under terms that permit, the user to
|
||||||
|
recombine or relink the Application with a modified version of
|
||||||
|
the Linked Version to produce a modified Combined Work, in the
|
||||||
|
manner specified by section 6 of the GNU GPL for conveying
|
||||||
|
Corresponding Source.
|
||||||
|
|
||||||
|
1) Use a suitable shared library mechanism for linking with the
|
||||||
|
Library. A suitable mechanism is one that (a) uses at run time
|
||||||
|
a copy of the Library already present on the user's computer
|
||||||
|
system, and (b) will operate properly with a modified version
|
||||||
|
of the Library that is interface-compatible with the Linked
|
||||||
|
Version.
|
||||||
|
|
||||||
|
e) Provide Installation Information, but only if you would otherwise
|
||||||
|
be required to provide such information under section 6 of the
|
||||||
|
GNU GPL, and only to the extent that such information is
|
||||||
|
necessary to install and execute a modified version of the
|
||||||
|
Combined Work produced by recombining or relinking the
|
||||||
|
Application with a modified version of the Linked Version. (If
|
||||||
|
you use option 4d0, the Installation Information must accompany
|
||||||
|
the Minimal Corresponding Source and Corresponding Application
|
||||||
|
Code. If you use option 4d1, you must provide the Installation
|
||||||
|
Information in the manner specified by section 6 of the GNU GPL
|
||||||
|
for conveying Corresponding Source.)
|
||||||
|
|
||||||
|
5. Combined Libraries.
|
||||||
|
|
||||||
|
You may place library facilities that are a work based on the
|
||||||
|
Library side by side in a single library together with other library
|
||||||
|
facilities that are not Applications and are not covered by this
|
||||||
|
License, and convey such a combined library under terms of your
|
||||||
|
choice, if you do both of the following:
|
||||||
|
|
||||||
|
a) Accompany the combined library with a copy of the same work based
|
||||||
|
on the Library, uncombined with any other library facilities,
|
||||||
|
conveyed under the terms of this License.
|
||||||
|
|
||||||
|
b) Give prominent notice with the combined library that part of it
|
||||||
|
is a work based on the Library, and explaining where to find the
|
||||||
|
accompanying uncombined form of the same work.
|
||||||
|
|
||||||
|
6. Revised Versions of the GNU Lesser General Public License.
|
||||||
|
|
||||||
|
The Free Software Foundation may publish revised and/or new versions
|
||||||
|
of the GNU Lesser General Public License from time to time. Such new
|
||||||
|
versions will be similar in spirit to the present version, but may
|
||||||
|
differ in detail to address new problems or concerns.
|
||||||
|
|
||||||
|
Each version is given a distinguishing version number. If the
|
||||||
|
Library as you received it specifies that a certain numbered version
|
||||||
|
of the GNU Lesser General Public License "or any later version"
|
||||||
|
applies to it, you have the option of following the terms and
|
||||||
|
conditions either of that published version or of any later version
|
||||||
|
published by the Free Software Foundation. If the Library as you
|
||||||
|
received it does not specify a version number of the GNU Lesser
|
||||||
|
General Public License, you may choose any version of the GNU Lesser
|
||||||
|
General Public License ever published by the Free Software Foundation.
|
||||||
|
|
||||||
|
If the Library as you received it specifies that a proxy can decide
|
||||||
|
whether future versions of the GNU Lesser General Public License shall
|
||||||
|
apply, that proxy's public statement of acceptance of any version is
|
||||||
|
permanent authorization for you to choose that version for the
|
||||||
|
Library.
|
@ -1 +0,0 @@
|
|||||||
Subproject commit 553e337e6a956534d34dbbfcec42359117aa35d4
|
|
16
README.md
@ -1 +1,15 @@
|
|||||||
# Snake
|
# CMakeProject
|
||||||
|
Template repository for cmake project
|
||||||
|
Fork me and replase SnakeProject to Name of your new project.
|
||||||
|
|
||||||
|
1. Clone this repository
|
||||||
|
2. Run ./init.sh NewProjectName
|
||||||
|
|
||||||
|
# This template supports next build targets:
|
||||||
|
|
||||||
|
| Command or make target | Description |
|
||||||
|
|------|------|
|
||||||
|
| **make test** | The run tests for a project (dependet of Qt Tests, so you need to add Qt in Cmake using CMAKE_PREFIX_PATH) |
|
||||||
|
| **make doc** | The generate a documentation for a project (dependet of doxygen) |
|
||||||
|
| **make deploy** | The generate distribution for a project (dependet of CQtDeployer) |
|
||||||
|
| **make release** | The prepare Qt Installer framework repository for a project, generate a snap package and APK file for android (dependet of CQtDeployer, snapcraft, AndroidDeployer). |
|
||||||
|
@ -1,116 +0,0 @@
|
|||||||
QT += quick concurrent
|
|
||||||
CONFIG += c++17
|
|
||||||
|
|
||||||
# The following define makes your compiler emit warnings if you use
|
|
||||||
# any feature of Qt which as been marked deprecated (the exact warnings
|
|
||||||
# depend on your compiler). Please consult the documentation of the
|
|
||||||
# deprecated API in order to know how to port your code away from it.
|
|
||||||
DEFINES += QT_DEPRECATED_WARNINGS
|
|
||||||
|
|
||||||
# You can also make your code fail to compile if you use deprecated APIs.
|
|
||||||
# In order to do so, uncomment the following line.
|
|
||||||
# You can also select to disable deprecated APIs only up to a certain version of Qt.
|
|
||||||
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
|
|
||||||
|
|
||||||
SOURCES += \
|
|
||||||
back-end/ProfileViewItems/mainclient.cpp \
|
|
||||||
back-end/ProfileViewItems/mainmenumodel.cpp \
|
|
||||||
back-end/ProfileViewItems/networkclient.cpp \
|
|
||||||
back-end/ProfileViewItems/notificationdata.cpp \
|
|
||||||
back-end/ProfileViewItems/notificationservice.cpp \
|
|
||||||
back-end/ProfileViewItems/playerclientdata.cpp \
|
|
||||||
back-end/ProfileViewItems/settingsviewmodel.cpp \
|
|
||||||
back-end/ProfileViewItems/userview.cpp \
|
|
||||||
back-end/asyncimageresponse.cpp \
|
|
||||||
back-end/background.cpp \
|
|
||||||
back-end/backgrounditem.cpp \
|
|
||||||
back-end/baseclass.cpp \
|
|
||||||
back-end/box.cpp \
|
|
||||||
back-end/clientapp.cpp \
|
|
||||||
back-end/controller.cpp \
|
|
||||||
back-end/diff.cpp \
|
|
||||||
back-end/guiobject.cpp \
|
|
||||||
back-end/guiobjectfactory.cpp \
|
|
||||||
back-end/head.cpp \
|
|
||||||
back-end/imageprovider.cpp \
|
|
||||||
back-end/itemworld.cpp \
|
|
||||||
back-end/settings.cpp \
|
|
||||||
back-end/snake.cpp \
|
|
||||||
back-end/world.cpp \
|
|
||||||
back-end/main.cpp
|
|
||||||
|
|
||||||
|
|
||||||
TARGET = Snake
|
|
||||||
|
|
||||||
|
|
||||||
CONFIG(release, debug|release): {
|
|
||||||
DESTDIR = $$PWD/build/release
|
|
||||||
|
|
||||||
} else {
|
|
||||||
DESTDIR = $$PWD/build/debug
|
|
||||||
}
|
|
||||||
|
|
||||||
# Additional import path used to resolve QML modules in Qt Creator's code model
|
|
||||||
QML_IMPORT_PATH =
|
|
||||||
|
|
||||||
# Additional import path used to resolve QML modules just for Qt Quick Designer
|
|
||||||
QML_DESIGNER_IMPORT_PATH =
|
|
||||||
|
|
||||||
include($$PWD/../../QuasarAppLib/QuasarLib.pri)
|
|
||||||
include($$PWD/../../SnakeUtils/SnakeUtils.pri)
|
|
||||||
include($$PWD/../../SnakeServer/ClientProtocol/ClientProtocol.pri)
|
|
||||||
|
|
||||||
DISTFILES += \
|
|
||||||
android/AndroidManifest.xml \
|
|
||||||
android/AndroidManifest.xml \
|
|
||||||
android/AndroidManifest.xml \
|
|
||||||
android/build.gradle \
|
|
||||||
android/build.gradle \
|
|
||||||
android/gradle/wrapper/gradle-wrapper.jar \
|
|
||||||
android/gradle/wrapper/gradle-wrapper.jar \
|
|
||||||
android/gradle/wrapper/gradle-wrapper.jar \
|
|
||||||
android/gradle/wrapper/gradle-wrapper.properties \
|
|
||||||
android/gradle/wrapper/gradle-wrapper.properties \
|
|
||||||
android/gradlew \
|
|
||||||
android/gradlew \
|
|
||||||
android/gradlew \
|
|
||||||
android/gradlew.bat \
|
|
||||||
android/gradlew.bat \
|
|
||||||
android/res/values/libs.xml \
|
|
||||||
android/res/values/libs.xml \
|
|
||||||
android/res/values/libs.xml \
|
|
||||||
android/build.gradle \
|
|
||||||
android/gradle/wrapper/gradle-wrapper.properties \
|
|
||||||
android/gradlew.bat \
|
|
||||||
front-end/PagePopUp.qml
|
|
||||||
|
|
||||||
ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android
|
|
||||||
|
|
||||||
RESOURCES += \
|
|
||||||
qml.qrc
|
|
||||||
|
|
||||||
HEADERS += \
|
|
||||||
back-end/ProfileViewItems/mainclient.h \
|
|
||||||
back-end/ProfileViewItems/mainmenumodel.h \
|
|
||||||
back-end/ProfileViewItems/networkclient.h \
|
|
||||||
back-end/ProfileViewItems/notificationdata.h \
|
|
||||||
back-end/ProfileViewItems/notificationservice.h \
|
|
||||||
back-end/ProfileViewItems/playerclientdata.h \
|
|
||||||
back-end/ProfileViewItems/settingsviewmodel.h \
|
|
||||||
back-end/ProfileViewItems/userview.h \
|
|
||||||
back-end/asyncimageresponse.h \
|
|
||||||
back-end/background.h \
|
|
||||||
back-end/backgrounditem.h \
|
|
||||||
back-end/baseclass.h \
|
|
||||||
back-end/box.h \
|
|
||||||
back-end/clientapp.h \
|
|
||||||
back-end/controller.h \
|
|
||||||
back-end/diff.h \
|
|
||||||
back-end/guiobject.h \
|
|
||||||
back-end/guiobjectfactory.h \
|
|
||||||
back-end/head.h \
|
|
||||||
back-end/imageprovider.h \
|
|
||||||
back-end/itemworld.h \
|
|
||||||
back-end/settings.h \
|
|
||||||
back-end/snake.h \
|
|
||||||
back-end/world.h
|
|
@ -1,79 +0,0 @@
|
|||||||
<?xml version="1.0"?>
|
|
||||||
<manifest package="quasar.app.snake" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.0" android:versionCode="1" android:installLocation="auto">
|
|
||||||
<application android:hardwareAccelerated="true" android:name="org.qtproject.qt5.android.bindings.QtApplication" android:label="-- %%INSERT_APP_NAME%% --" android:icon="@drawable/icon">
|
|
||||||
<activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation" android:name="org.qtproject.qt5.android.bindings.QtActivity" android:label="-- %%INSERT_APP_NAME%% --" android:screenOrientation="landscape" android:launchMode="singleTop" android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.MAIN"/>
|
|
||||||
<category android:name="android.intent.category.LAUNCHER"/>
|
|
||||||
</intent-filter>
|
|
||||||
|
|
||||||
<!-- Application arguments -->
|
|
||||||
<!-- meta-data android:name="android.app.arguments" android:value="arg1 arg2 arg3"/ -->
|
|
||||||
<!-- Application arguments -->
|
|
||||||
|
|
||||||
<meta-data android:name="android.app.lib_name" android:value="-- %%INSERT_APP_LIB_NAME%% --"/>
|
|
||||||
<meta-data android:name="android.app.qt_sources_resource_id" android:resource="@array/qt_sources"/>
|
|
||||||
<meta-data android:name="android.app.repository" android:value="default"/>
|
|
||||||
<meta-data android:name="android.app.qt_libs_resource_id" android:resource="@array/qt_libs"/>
|
|
||||||
<meta-data android:name="android.app.bundled_libs_resource_id" android:resource="@array/bundled_libs"/>
|
|
||||||
<!-- Deploy Qt libs as part of package -->
|
|
||||||
<meta-data android:name="android.app.bundle_local_qt_libs" android:value="-- %%BUNDLE_LOCAL_QT_LIBS%% --"/>
|
|
||||||
<meta-data android:name="android.app.bundled_in_lib_resource_id" android:resource="@array/bundled_in_lib"/>
|
|
||||||
<meta-data android:name="android.app.bundled_in_assets_resource_id" android:resource="@array/bundled_in_assets"/>
|
|
||||||
<!-- Run with local libs -->
|
|
||||||
<meta-data android:name="android.app.use_local_qt_libs" android:value="-- %%USE_LOCAL_QT_LIBS%% --"/>
|
|
||||||
<meta-data android:name="android.app.libs_prefix" android:value="/data/local/tmp/qt/"/>
|
|
||||||
<meta-data android:name="android.app.load_local_libs" android:value="-- %%INSERT_LOCAL_LIBS%% --"/>
|
|
||||||
<meta-data android:name="android.app.load_local_jars" android:value="-- %%INSERT_LOCAL_JARS%% --"/>
|
|
||||||
<meta-data android:name="android.app.static_init_classes" android:value="-- %%INSERT_INIT_CLASSES%% --"/>
|
|
||||||
<!-- Used to specify custom system library path to run with local system libs -->
|
|
||||||
<!-- <meta-data android:name="android.app.system_libs_prefix" android:value="/system/lib/"/> -->
|
|
||||||
<!-- Messages maps -->
|
|
||||||
<meta-data android:value="@string/ministro_not_found_msg" android:name="android.app.ministro_not_found_msg"/>
|
|
||||||
<meta-data android:value="@string/ministro_needed_msg" android:name="android.app.ministro_needed_msg"/>
|
|
||||||
<meta-data android:value="@string/fatal_error_msg" android:name="android.app.fatal_error_msg"/>
|
|
||||||
<!-- Messages maps -->
|
|
||||||
|
|
||||||
<!-- Splash screen -->
|
|
||||||
<!-- meta-data android:name="android.app.splash_screen_drawable" android:resource="@drawable/logo"/ -->
|
|
||||||
<!-- meta-data android:name="android.app.splash_screen_sticky" android:value="true"/ -->
|
|
||||||
<!-- Splash screen -->
|
|
||||||
|
|
||||||
<!-- Background running -->
|
|
||||||
<!-- Warning: changing this value to true may cause unexpected crashes if the
|
|
||||||
application still try to draw after
|
|
||||||
"applicationStateChanged(Qt::ApplicationSuspended)"
|
|
||||||
signal is sent! -->
|
|
||||||
<meta-data android:name="android.app.background_running" android:value="false"/>
|
|
||||||
<!-- Background running -->
|
|
||||||
|
|
||||||
<!-- auto screen scale factor -->
|
|
||||||
<meta-data android:name="android.app.auto_screen_scale_factor" android:value="false"/>
|
|
||||||
<!-- auto screen scale factor -->
|
|
||||||
|
|
||||||
<!-- extract android style -->
|
|
||||||
<!-- available android:values :
|
|
||||||
* full - useful QWidget & Quick Controls 1 apps
|
|
||||||
* minimal - useful for Quick Controls 2 apps, it is much faster than "full"
|
|
||||||
* none - useful for apps that don't use any of the above Qt modules
|
|
||||||
-->
|
|
||||||
<meta-data android:name="android.app.extract_android_style" android:value="full"/>
|
|
||||||
<!-- extract android style -->
|
|
||||||
</activity>
|
|
||||||
|
|
||||||
<!-- For adding service(s) please check: https://wiki.qt.io/AndroidServices -->
|
|
||||||
|
|
||||||
</application>
|
|
||||||
|
|
||||||
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28"/>
|
|
||||||
<supports-screens android:largeScreens="true" android:normalScreens="true" android:anyDensity="true" android:smallScreens="true"/>
|
|
||||||
|
|
||||||
<!-- The following comment will be replaced upon deployment with default permissions based on the dependencies of the application.
|
|
||||||
Remove the comment if you do not require these default permissions. -->
|
|
||||||
<!-- %%INSERT_PERMISSIONS -->
|
|
||||||
|
|
||||||
<!-- The following comment will be replaced upon deployment with default features based on the dependencies of the application.
|
|
||||||
Remove the comment if you do not require these default features. -->
|
|
||||||
<!-- %%INSERT_FEATURES -->
|
|
||||||
|
|
||||||
</manifest>
|
|
@ -1,57 +0,0 @@
|
|||||||
buildscript {
|
|
||||||
repositories {
|
|
||||||
google()
|
|
||||||
jcenter()
|
|
||||||
}
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
classpath 'com.android.tools.build:gradle:3.2.0'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
repositories {
|
|
||||||
google()
|
|
||||||
jcenter()
|
|
||||||
}
|
|
||||||
|
|
||||||
apply plugin: 'com.android.application'
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
|
|
||||||
}
|
|
||||||
|
|
||||||
android {
|
|
||||||
/*******************************************************
|
|
||||||
* The following variables:
|
|
||||||
* - androidBuildToolsVersion,
|
|
||||||
* - androidCompileSdkVersion
|
|
||||||
* - qt5AndroidDir - holds the path to qt android files
|
|
||||||
* needed to build any Qt application
|
|
||||||
* on Android.
|
|
||||||
*
|
|
||||||
* are defined in gradle.properties file. This file is
|
|
||||||
* updated by QtCreator and androiddeployqt tools.
|
|
||||||
* Changing them manually might break the compilation!
|
|
||||||
*******************************************************/
|
|
||||||
|
|
||||||
compileSdkVersion androidCompileSdkVersion.toInteger()
|
|
||||||
|
|
||||||
buildToolsVersion androidBuildToolsVersion
|
|
||||||
|
|
||||||
sourceSets {
|
|
||||||
main {
|
|
||||||
manifest.srcFile 'AndroidManifest.xml'
|
|
||||||
java.srcDirs = [qt5AndroidDir + '/src', 'src', 'java']
|
|
||||||
aidl.srcDirs = [qt5AndroidDir + '/src', 'src', 'aidl']
|
|
||||||
res.srcDirs = [qt5AndroidDir + '/res', 'res']
|
|
||||||
resources.srcDirs = ['src']
|
|
||||||
renderscript.srcDirs = ['src']
|
|
||||||
assets.srcDirs = ['assets']
|
|
||||||
jniLibs.srcDirs = ['libs']
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
lintOptions {
|
|
||||||
abortOnError false
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,5 +0,0 @@
|
|||||||
distributionBase=GRADLE_USER_HOME
|
|
||||||
distributionPath=wrapper/dists
|
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-bin.zip
|
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
|
||||||
zipStorePath=wrapper/dists
|
|
172
SnakeClient/SnakeApp/android/gradlew
vendored
@ -1,172 +0,0 @@
|
|||||||
#!/usr/bin/env sh
|
|
||||||
|
|
||||||
##############################################################################
|
|
||||||
##
|
|
||||||
## Gradle start up script for UN*X
|
|
||||||
##
|
|
||||||
##############################################################################
|
|
||||||
|
|
||||||
# Attempt to set APP_HOME
|
|
||||||
# Resolve links: $0 may be a link
|
|
||||||
PRG="$0"
|
|
||||||
# Need this for relative symlinks.
|
|
||||||
while [ -h "$PRG" ] ; do
|
|
||||||
ls=`ls -ld "$PRG"`
|
|
||||||
link=`expr "$ls" : '.*-> \(.*\)$'`
|
|
||||||
if expr "$link" : '/.*' > /dev/null; then
|
|
||||||
PRG="$link"
|
|
||||||
else
|
|
||||||
PRG=`dirname "$PRG"`"/$link"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
SAVED="`pwd`"
|
|
||||||
cd "`dirname \"$PRG\"`/" >/dev/null
|
|
||||||
APP_HOME="`pwd -P`"
|
|
||||||
cd "$SAVED" >/dev/null
|
|
||||||
|
|
||||||
APP_NAME="Gradle"
|
|
||||||
APP_BASE_NAME=`basename "$0"`
|
|
||||||
|
|
||||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
|
||||||
DEFAULT_JVM_OPTS=""
|
|
||||||
|
|
||||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
|
||||||
MAX_FD="maximum"
|
|
||||||
|
|
||||||
warn () {
|
|
||||||
echo "$*"
|
|
||||||
}
|
|
||||||
|
|
||||||
die () {
|
|
||||||
echo
|
|
||||||
echo "$*"
|
|
||||||
echo
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
# OS specific support (must be 'true' or 'false').
|
|
||||||
cygwin=false
|
|
||||||
msys=false
|
|
||||||
darwin=false
|
|
||||||
nonstop=false
|
|
||||||
case "`uname`" in
|
|
||||||
CYGWIN* )
|
|
||||||
cygwin=true
|
|
||||||
;;
|
|
||||||
Darwin* )
|
|
||||||
darwin=true
|
|
||||||
;;
|
|
||||||
MINGW* )
|
|
||||||
msys=true
|
|
||||||
;;
|
|
||||||
NONSTOP* )
|
|
||||||
nonstop=true
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
|
||||||
|
|
||||||
# Determine the Java command to use to start the JVM.
|
|
||||||
if [ -n "$JAVA_HOME" ] ; then
|
|
||||||
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
|
||||||
# IBM's JDK on AIX uses strange locations for the executables
|
|
||||||
JAVACMD="$JAVA_HOME/jre/sh/java"
|
|
||||||
else
|
|
||||||
JAVACMD="$JAVA_HOME/bin/java"
|
|
||||||
fi
|
|
||||||
if [ ! -x "$JAVACMD" ] ; then
|
|
||||||
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
|
|
||||||
|
|
||||||
Please set the JAVA_HOME variable in your environment to match the
|
|
||||||
location of your Java installation."
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
JAVACMD="java"
|
|
||||||
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
|
||||||
|
|
||||||
Please set the JAVA_HOME variable in your environment to match the
|
|
||||||
location of your Java installation."
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Increase the maximum file descriptors if we can.
|
|
||||||
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
|
|
||||||
MAX_FD_LIMIT=`ulimit -H -n`
|
|
||||||
if [ $? -eq 0 ] ; then
|
|
||||||
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
|
|
||||||
MAX_FD="$MAX_FD_LIMIT"
|
|
||||||
fi
|
|
||||||
ulimit -n $MAX_FD
|
|
||||||
if [ $? -ne 0 ] ; then
|
|
||||||
warn "Could not set maximum file descriptor limit: $MAX_FD"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# For Darwin, add options to specify how the application appears in the dock
|
|
||||||
if $darwin; then
|
|
||||||
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
|
|
||||||
fi
|
|
||||||
|
|
||||||
# For Cygwin, switch paths to Windows format before running java
|
|
||||||
if $cygwin ; then
|
|
||||||
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
|
|
||||||
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
|
|
||||||
JAVACMD=`cygpath --unix "$JAVACMD"`
|
|
||||||
|
|
||||||
# We build the pattern for arguments to be converted via cygpath
|
|
||||||
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
|
|
||||||
SEP=""
|
|
||||||
for dir in $ROOTDIRSRAW ; do
|
|
||||||
ROOTDIRS="$ROOTDIRS$SEP$dir"
|
|
||||||
SEP="|"
|
|
||||||
done
|
|
||||||
OURCYGPATTERN="(^($ROOTDIRS))"
|
|
||||||
# Add a user-defined pattern to the cygpath arguments
|
|
||||||
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
|
|
||||||
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
|
|
||||||
fi
|
|
||||||
# Now convert the arguments - kludge to limit ourselves to /bin/sh
|
|
||||||
i=0
|
|
||||||
for arg in "$@" ; do
|
|
||||||
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
|
|
||||||
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
|
|
||||||
|
|
||||||
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
|
|
||||||
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
|
|
||||||
else
|
|
||||||
eval `echo args$i`="\"$arg\""
|
|
||||||
fi
|
|
||||||
i=$((i+1))
|
|
||||||
done
|
|
||||||
case $i in
|
|
||||||
(0) set -- ;;
|
|
||||||
(1) set -- "$args0" ;;
|
|
||||||
(2) set -- "$args0" "$args1" ;;
|
|
||||||
(3) set -- "$args0" "$args1" "$args2" ;;
|
|
||||||
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
|
|
||||||
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
|
|
||||||
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
|
|
||||||
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
|
|
||||||
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
|
|
||||||
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Escape application args
|
|
||||||
save () {
|
|
||||||
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
|
|
||||||
echo " "
|
|
||||||
}
|
|
||||||
APP_ARGS=$(save "$@")
|
|
||||||
|
|
||||||
# Collect all arguments for the java command, following the shell quoting and substitution rules
|
|
||||||
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
|
|
||||||
|
|
||||||
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
|
|
||||||
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
|
|
||||||
cd "$(dirname "$0")"
|
|
||||||
fi
|
|
||||||
|
|
||||||
exec "$JAVACMD" "$@"
|
|
84
SnakeClient/SnakeApp/android/gradlew.bat
vendored
@ -1,84 +0,0 @@
|
|||||||
@if "%DEBUG%" == "" @echo off
|
|
||||||
@rem ##########################################################################
|
|
||||||
@rem
|
|
||||||
@rem Gradle startup script for Windows
|
|
||||||
@rem
|
|
||||||
@rem ##########################################################################
|
|
||||||
|
|
||||||
@rem Set local scope for the variables with windows NT shell
|
|
||||||
if "%OS%"=="Windows_NT" setlocal
|
|
||||||
|
|
||||||
set DIRNAME=%~dp0
|
|
||||||
if "%DIRNAME%" == "" set DIRNAME=.
|
|
||||||
set APP_BASE_NAME=%~n0
|
|
||||||
set APP_HOME=%DIRNAME%
|
|
||||||
|
|
||||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
|
||||||
set DEFAULT_JVM_OPTS=
|
|
||||||
|
|
||||||
@rem Find java.exe
|
|
||||||
if defined JAVA_HOME goto findJavaFromJavaHome
|
|
||||||
|
|
||||||
set JAVA_EXE=java.exe
|
|
||||||
%JAVA_EXE% -version >NUL 2>&1
|
|
||||||
if "%ERRORLEVEL%" == "0" goto init
|
|
||||||
|
|
||||||
echo.
|
|
||||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
|
||||||
echo.
|
|
||||||
echo Please set the JAVA_HOME variable in your environment to match the
|
|
||||||
echo location of your Java installation.
|
|
||||||
|
|
||||||
goto fail
|
|
||||||
|
|
||||||
:findJavaFromJavaHome
|
|
||||||
set JAVA_HOME=%JAVA_HOME:"=%
|
|
||||||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
|
||||||
|
|
||||||
if exist "%JAVA_EXE%" goto init
|
|
||||||
|
|
||||||
echo.
|
|
||||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
|
||||||
echo.
|
|
||||||
echo Please set the JAVA_HOME variable in your environment to match the
|
|
||||||
echo location of your Java installation.
|
|
||||||
|
|
||||||
goto fail
|
|
||||||
|
|
||||||
:init
|
|
||||||
@rem Get command-line arguments, handling Windows variants
|
|
||||||
|
|
||||||
if not "%OS%" == "Windows_NT" goto win9xME_args
|
|
||||||
|
|
||||||
:win9xME_args
|
|
||||||
@rem Slurp the command line arguments.
|
|
||||||
set CMD_LINE_ARGS=
|
|
||||||
set _SKIP=2
|
|
||||||
|
|
||||||
:win9xME_args_slurp
|
|
||||||
if "x%~1" == "x" goto execute
|
|
||||||
|
|
||||||
set CMD_LINE_ARGS=%*
|
|
||||||
|
|
||||||
:execute
|
|
||||||
@rem Setup the command line
|
|
||||||
|
|
||||||
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
|
||||||
|
|
||||||
@rem Execute Gradle
|
|
||||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
|
|
||||||
|
|
||||||
:end
|
|
||||||
@rem End local scope for the variables with windows NT shell
|
|
||||||
if "%ERRORLEVEL%"=="0" goto mainEnd
|
|
||||||
|
|
||||||
:fail
|
|
||||||
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
|
||||||
rem the _cmd.exe /c_ return code!
|
|
||||||
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
|
|
||||||
exit /b 1
|
|
||||||
|
|
||||||
:mainEnd
|
|
||||||
if "%OS%"=="Windows_NT" endlocal
|
|
||||||
|
|
||||||
:omega
|
|
Before Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 2.4 KiB |
@ -1,25 +0,0 @@
|
|||||||
<?xml version='1.0' encoding='utf-8'?>
|
|
||||||
<resources>
|
|
||||||
<array name="qt_sources">
|
|
||||||
<item>https://download.qt.io/ministro/android/qt5/qt-5.9</item>
|
|
||||||
</array>
|
|
||||||
|
|
||||||
<!-- The following is handled automatically by the deployment tool. It should
|
|
||||||
not be edited manually. -->
|
|
||||||
|
|
||||||
<array name="bundled_libs">
|
|
||||||
<!-- %%INSERT_EXTRA_LIBS%% -->
|
|
||||||
</array>
|
|
||||||
|
|
||||||
<array name="qt_libs">
|
|
||||||
<!-- %%INSERT_QT_LIBS%% -->
|
|
||||||
</array>
|
|
||||||
|
|
||||||
<array name="bundled_in_lib">
|
|
||||||
<!-- %%INSERT_BUNDLED_IN_LIB%% -->
|
|
||||||
</array>
|
|
||||||
<array name="bundled_in_assets">
|
|
||||||
<!-- %%INSERT_BUNDLED_IN_ASSETS%% -->
|
|
||||||
</array>
|
|
||||||
|
|
||||||
</resources>
|
|
@ -1,180 +0,0 @@
|
|||||||
#include "mainclient.h"
|
|
||||||
#include "notificationservice.h"
|
|
||||||
#include "playerclientdata.h"
|
|
||||||
|
|
||||||
#include <QSharedPointer>
|
|
||||||
|
|
||||||
OnlineStatus MainClient::onlineStatus() const {
|
|
||||||
return _onlineStatus;
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainClient::setOnlineStatus(OnlineStatus onlineStatus) {
|
|
||||||
if (_onlineStatus == onlineStatus)
|
|
||||||
return;
|
|
||||||
|
|
||||||
emit sigOnlineStatusChanged(_onlineStatus = onlineStatus);
|
|
||||||
pushNotify(onlineStatus);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainClient::clientStatusChanged() {
|
|
||||||
auto status = OnlineStatus::ClientIsOffline;
|
|
||||||
|
|
||||||
if (isOnline()) {
|
|
||||||
status = OnlineStatus::AuthorizationRequired;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isLogin()) {
|
|
||||||
status = OnlineStatus::Success;
|
|
||||||
}
|
|
||||||
|
|
||||||
setOnlineStatus(status);
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainClient::pushNotify(OnlineStatus onlineStatus) {
|
|
||||||
|
|
||||||
|
|
||||||
switch (onlineStatus) {
|
|
||||||
|
|
||||||
case OnlineStatus::Success: {
|
|
||||||
|
|
||||||
NotificationService::getService()->setNotify(
|
|
||||||
NotificationData(tr("Login status"), tr("Success")));
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case OnlineStatus::AuthorizationRequired: {
|
|
||||||
|
|
||||||
NotificationService::getService()->setNotify(
|
|
||||||
NotificationData(tr("Login status"), tr("Authorization Required")));
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case OnlineStatus::WaitForAnswer: {
|
|
||||||
|
|
||||||
NotificationService::getService()->setNotify(
|
|
||||||
NotificationData(tr("Login status"), tr("Wait for answer")));
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case OnlineStatus::AuthorizationFail: {
|
|
||||||
|
|
||||||
NotificationService::getService()->setNotify(
|
|
||||||
NotificationData(tr("Login result"), tr("Authorization fail") , "", NotificationData::Error));
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case OnlineStatus::ClientIsOffline: {
|
|
||||||
|
|
||||||
NotificationService::getService()->setNotify(
|
|
||||||
NotificationData(tr("Login result"), tr("Client is offline"), "", NotificationData::Warning));
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case OnlineStatus::OfflineMode: {
|
|
||||||
|
|
||||||
NotificationService::getService()->setNotify(
|
|
||||||
NotificationData(tr("Login result"), tr("Offline Mode")));
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
default: break;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainClient::handleReceivePackage(ClientProtocol::Command cmd, const QByteArray &obj) {
|
|
||||||
switch (cmd) {
|
|
||||||
|
|
||||||
case ClientProtocol::Command::Player: {
|
|
||||||
auto playerData = QSharedPointer<PlayerClientData>::create();
|
|
||||||
playerData->fromBytes(obj);
|
|
||||||
|
|
||||||
_users [playerData->id()] = playerData;
|
|
||||||
|
|
||||||
if (playerData->id() == _currentUserId) {
|
|
||||||
emit currentUserDataChanged(_users [playerData->id()]);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case ClientProtocol::Command::BadRequest: {
|
|
||||||
|
|
||||||
NotificationService::getService()->setNotify(
|
|
||||||
NotificationData(tr("Request"), tr("Bad Request"), "",
|
|
||||||
NotificationData::Error));
|
|
||||||
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default: return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainClient::handleLoginChanged(bool logined) {
|
|
||||||
this->setSubscribe(ClientProtocol::Command::Player, logined, _currentUserId);
|
|
||||||
clientStatusChanged();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainClient::handleOnlineChanged(bool) {
|
|
||||||
clientStatusChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
MainClient::MainClient(const QString &addrress, unsigned short port, QObject *ptr):
|
|
||||||
ClientProtocol::Client (addrress, port, ptr) {
|
|
||||||
|
|
||||||
connect(this, &MainClient::sigIncommingData,
|
|
||||||
this, &MainClient::handleReceivePackage);
|
|
||||||
|
|
||||||
connect(this, &MainClient::onlineChanged,
|
|
||||||
this, &MainClient::handleOnlineChanged);
|
|
||||||
|
|
||||||
connect(this, &MainClient::loginChanged,
|
|
||||||
this, &MainClient::handleLoginChanged);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool MainClient::login(const QString &gmail, const QByteArray &pass, bool) {
|
|
||||||
if (!ClientProtocol::Client::login(gmail, pass)) {
|
|
||||||
setOnlineStatus(OnlineStatus::AuthorizationFail);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool MainClient::registration(const QString &gmail,
|
|
||||||
const QByteArray &pass) {
|
|
||||||
|
|
||||||
if (!ClientProtocol::Client::registration(gmail, pass)) {
|
|
||||||
setOnlineStatus(OnlineStatus::AuthorizationFail);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainClient::playOffline() {
|
|
||||||
if (_onlineStatus == OnlineStatus::ClientIsOffline) {
|
|
||||||
setOnlineStatus(OfflineMode);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainClient::tryConnect(const QString &addrress, unsigned short port) {
|
|
||||||
setOnlineStatus(ClientIsOffline);
|
|
||||||
connectToHost(addrress, port);
|
|
||||||
}
|
|
||||||
|
|
||||||
MainClient::~MainClient() {
|
|
||||||
for (auto &i: _users) {
|
|
||||||
i.clear();
|
|
||||||
}
|
|
||||||
_users.clear();
|
|
||||||
}
|
|
@ -1,51 +0,0 @@
|
|||||||
#ifndef MAINCLIENT_H
|
|
||||||
#define MAINCLIENT_H
|
|
||||||
#include <client.h>
|
|
||||||
|
|
||||||
class PlayerClientData;
|
|
||||||
|
|
||||||
enum OnlineStatus: int {
|
|
||||||
Success = 0x0,
|
|
||||||
AuthorizationRequired,
|
|
||||||
WaitForAnswer,
|
|
||||||
AuthorizationFail,
|
|
||||||
ClientIsOffline,
|
|
||||||
OfflineMode
|
|
||||||
};
|
|
||||||
|
|
||||||
class MainClient: public ClientProtocol::Client
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
private:
|
|
||||||
QHash<int, QSharedPointer<PlayerClientData>> _users;
|
|
||||||
OnlineStatus _onlineStatus = ClientIsOffline;
|
|
||||||
|
|
||||||
void setOnlineStatus(OnlineStatus onlineStatus);
|
|
||||||
void clientStatusChanged();
|
|
||||||
void pushNotify(OnlineStatus onlineStatus);
|
|
||||||
|
|
||||||
private slots:
|
|
||||||
void handleReceivePackage(ClientProtocol::Command cmd, const QByteArray& obj);
|
|
||||||
void handleLoginChanged(bool);
|
|
||||||
void handleOnlineChanged(bool);
|
|
||||||
|
|
||||||
public:
|
|
||||||
MainClient(const QString& addrress = LOCAL_SNAKE_SERVER,
|
|
||||||
unsigned short port = DEFAULT_SNAKE_PORT,
|
|
||||||
QObject * ptr = nullptr);
|
|
||||||
bool login(const QString& gmail, const QByteArray &pass, bool registerNewUser = false) override;
|
|
||||||
bool registration(const QString& gmail,
|
|
||||||
const QByteArray &pass) override;
|
|
||||||
void playOffline();
|
|
||||||
void tryConnect(const QString &addrress, unsigned short port);
|
|
||||||
|
|
||||||
~MainClient() override;
|
|
||||||
|
|
||||||
OnlineStatus onlineStatus() const;
|
|
||||||
|
|
||||||
signals:
|
|
||||||
void sigOnlineStatusChanged(OnlineStatus);
|
|
||||||
void currentUserDataChanged(QSharedPointer<PlayerClientData>);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // MAINCLIENT_H
|
|
@ -1,59 +0,0 @@
|
|||||||
#include "mainmenumodel.h"
|
|
||||||
#include "settingsviewmodel.h"
|
|
||||||
#include "userview.h"
|
|
||||||
|
|
||||||
#include <back-end/settings.h>
|
|
||||||
#include <quasarapp.h>
|
|
||||||
#include "mainclient.h"
|
|
||||||
|
|
||||||
MainMenuModel::MainMenuModel(QObject *ptr): QObject (ptr) {
|
|
||||||
|
|
||||||
if(!ClientProtocol::initClientProtockol()) {
|
|
||||||
QuasarAppUtils::Params::verboseLog("client protockol not inited", QuasarAppUtils::Error);
|
|
||||||
}
|
|
||||||
|
|
||||||
_userViewModel = new UserView (this);
|
|
||||||
_conf = Settings::get();
|
|
||||||
_userSettingsModel = new SettingsViewModel(this);
|
|
||||||
auto adderss = _conf->getValue(SERVER_ADDRESS, SERVER_ADDRESS_DEFAULT).toString();
|
|
||||||
auto port = _conf->getValue(SERVER_ADDRESS_PORT, SERVER_ADDRESS_DEFAULT_PORT).toInt();
|
|
||||||
_client = new MainClient(adderss, static_cast<unsigned short>(port), this);
|
|
||||||
|
|
||||||
connect(_client, &MainClient::sigOnlineStatusChanged,
|
|
||||||
this , &MainMenuModel::onlineStatusChanged);
|
|
||||||
|
|
||||||
connect(_client, &MainClient::currentUserDataChanged,
|
|
||||||
_userViewModel , &UserView::setSource);
|
|
||||||
}
|
|
||||||
|
|
||||||
QObject *MainMenuModel::userViewModel() const {
|
|
||||||
return _userViewModel;
|
|
||||||
}
|
|
||||||
|
|
||||||
int MainMenuModel::onlineStatus() const {
|
|
||||||
return _client->onlineStatus();
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainMenuModel::playOffline() {
|
|
||||||
_client->playOffline();
|
|
||||||
_userViewModel->setOffline(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainMenuModel::tryConnect() {
|
|
||||||
auto adderss = _conf->getValue(SERVER_ADDRESS, SERVER_ADDRESS_DEFAULT).toString();
|
|
||||||
auto port = _conf->getValue(SERVER_ADDRESS_PORT, SERVER_ADDRESS_DEFAULT_PORT).toInt();
|
|
||||||
_client->tryConnect(adderss, static_cast<unsigned short>(port));
|
|
||||||
}
|
|
||||||
|
|
||||||
QObject *MainMenuModel::userSettingsModel() const {
|
|
||||||
return _userSettingsModel;
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainMenuModel::login(const QString &email, const QString &pass) {
|
|
||||||
_client->login(email, pass.toUtf8());
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainMenuModel::registerNewUser(const QString &email,
|
|
||||||
const QString &pass) {
|
|
||||||
_client->registration(email, pass.toUtf8());
|
|
||||||
}
|
|
@ -1,51 +0,0 @@
|
|||||||
#ifndef NETWORKPROFILEMAINMODEL_H
|
|
||||||
#define NETWORKPROFILEMAINMODEL_H
|
|
||||||
|
|
||||||
#include "mainclient.h"
|
|
||||||
|
|
||||||
#include <QObject>
|
|
||||||
#include "./../settings.h"
|
|
||||||
|
|
||||||
class UserView;
|
|
||||||
|
|
||||||
class MainClient;
|
|
||||||
class SettingsViewModel;
|
|
||||||
|
|
||||||
class MainMenuModel : public QObject
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
Q_PROPERTY(QObject* userViewModel READ userViewModel NOTIFY userViewModelChanged)
|
|
||||||
Q_PROPERTY(QObject* userSettingsModel READ userSettingsModel NOTIFY userSettingsModelChanged)
|
|
||||||
Q_PROPERTY(int onlineStatus READ onlineStatus NOTIFY onlineStatusChanged)
|
|
||||||
|
|
||||||
private:
|
|
||||||
UserView* _userViewModel = nullptr;
|
|
||||||
SettingsViewModel* _userSettingsModel = nullptr;
|
|
||||||
MainClient *_client = nullptr;
|
|
||||||
Settings *_conf = nullptr;
|
|
||||||
|
|
||||||
public:
|
|
||||||
MainMenuModel(QObject *ptr = nullptr);
|
|
||||||
|
|
||||||
QObject* userViewModel() const;
|
|
||||||
QObject* userSettingsModel() const;
|
|
||||||
|
|
||||||
int onlineStatus() const;
|
|
||||||
Q_INVOKABLE void playOffline();
|
|
||||||
Q_INVOKABLE void tryConnect();
|
|
||||||
|
|
||||||
public slots:
|
|
||||||
void login(const QString& email, const QString& pass);
|
|
||||||
void registerNewUser(const QString& email, const QString& pass);
|
|
||||||
|
|
||||||
signals:
|
|
||||||
void userViewModelChanged(QObject* userViewModel);
|
|
||||||
void newGame();
|
|
||||||
void onlinelChanged(bool online);
|
|
||||||
void loginChanged(bool login);
|
|
||||||
void onlineStatusChanged();
|
|
||||||
void userSettingsModelChanged(QObject* userSettingsModel);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // NETWORKPROFILEMAINMODEL_H
|
|
@ -1,23 +0,0 @@
|
|||||||
#include "networkclient.h"
|
|
||||||
#include "playerclientdata.h"
|
|
||||||
|
|
||||||
#include <updateplayerdata.h>
|
|
||||||
|
|
||||||
int NetworkClient::loginedPlayer() const {
|
|
||||||
return _loginedPlayer;
|
|
||||||
}
|
|
||||||
|
|
||||||
void NetworkClient::handleReceiveData(ClientProtocol::Command cmd,
|
|
||||||
const QByteArray &obj) {
|
|
||||||
|
|
||||||
if (cmd == ClientProtocol::Command::Player) {
|
|
||||||
PlayerClientData data;
|
|
||||||
data.fromBytes(obj);
|
|
||||||
_playersDats[data.id()] = data;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
NetworkClient::NetworkClient() {
|
|
||||||
|
|
||||||
}
|
|
@ -1,21 +0,0 @@
|
|||||||
#ifndef CLIENT_H
|
|
||||||
#define CLIENT_H
|
|
||||||
|
|
||||||
#include "playerclientdata.h"
|
|
||||||
|
|
||||||
#include <client.h>
|
|
||||||
|
|
||||||
class NetworkClient : public ClientProtocol::Client
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
private:
|
|
||||||
QHash<int, PlayerClientData> _playersDats;
|
|
||||||
int _loginedPlayer;
|
|
||||||
private slots:
|
|
||||||
void handleReceiveData(ClientProtocol::Command cmd, const QByteArray& obj);
|
|
||||||
public:
|
|
||||||
NetworkClient();
|
|
||||||
int loginedPlayer() const;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // CLIENT_H
|
|
@ -1,38 +0,0 @@
|
|||||||
#include "notificationdata.h"
|
|
||||||
|
|
||||||
NotificationData::NotificationData(const QString &title,
|
|
||||||
const QString &text,
|
|
||||||
const QString &img, Type type) {
|
|
||||||
|
|
||||||
_text = text;
|
|
||||||
_title = title;
|
|
||||||
_img = img;
|
|
||||||
_type = type;
|
|
||||||
}
|
|
||||||
|
|
||||||
QString NotificationData::text() const {
|
|
||||||
return _text;
|
|
||||||
}
|
|
||||||
|
|
||||||
QString NotificationData::img() const {
|
|
||||||
return _img;
|
|
||||||
}
|
|
||||||
|
|
||||||
QString NotificationData::title() const {
|
|
||||||
return _title;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool NotificationData::operator ==(const NotificationData &righ) {
|
|
||||||
return _title == righ._title &&
|
|
||||||
_text == righ._text &&
|
|
||||||
_img == righ._img &&
|
|
||||||
_type == righ._type;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool NotificationData::operator !=(const NotificationData &righ) {
|
|
||||||
return !operator==(righ);
|
|
||||||
}
|
|
||||||
|
|
||||||
int NotificationData::type() const {
|
|
||||||
return _type;
|
|
||||||
}
|
|
@ -1,41 +0,0 @@
|
|||||||
#ifndef NOTIFICATIONDATA_H
|
|
||||||
#define NOTIFICATIONDATA_H
|
|
||||||
#include <QObject>
|
|
||||||
|
|
||||||
class NotificationData
|
|
||||||
{
|
|
||||||
Q_GADGET
|
|
||||||
Q_PROPERTY(QString text READ text)
|
|
||||||
Q_PROPERTY(QString img READ img)
|
|
||||||
Q_PROPERTY(QString title READ title)
|
|
||||||
Q_PROPERTY(int type READ type)
|
|
||||||
|
|
||||||
QString _text;
|
|
||||||
QString _img;
|
|
||||||
QString _title;
|
|
||||||
int _type;
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
enum Type {
|
|
||||||
Normal,
|
|
||||||
Warning = 1,
|
|
||||||
Error = 2,
|
|
||||||
};
|
|
||||||
|
|
||||||
explicit NotificationData(const QString& title = "",
|
|
||||||
const QString& text = "",
|
|
||||||
const QString& img = "",
|
|
||||||
Type type = Type::Normal);
|
|
||||||
|
|
||||||
Q_INVOKABLE QString text() const;
|
|
||||||
Q_INVOKABLE QString img() const;
|
|
||||||
Q_INVOKABLE QString title() const;
|
|
||||||
Q_INVOKABLE int type() const;
|
|
||||||
|
|
||||||
bool operator ==(const NotificationData &righ);
|
|
||||||
bool operator !=(const NotificationData &righ);
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // NOTIFICATIONDATA_H
|
|
@ -1,38 +0,0 @@
|
|||||||
#include "notificationservice.h"
|
|
||||||
|
|
||||||
NotificationService::NotificationService(QObject * ptr): QObject (ptr) {
|
|
||||||
qRegisterMetaType<NotificationData>("NotificationData");
|
|
||||||
qRegisterMetaType<QList<NotificationData>> ("QList<NotificationData>");
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
NotificationData NotificationService::notify() const {
|
|
||||||
return _notify;
|
|
||||||
}
|
|
||||||
|
|
||||||
void NotificationService::setNotify(const NotificationData& notify) {
|
|
||||||
if (_notify != notify)
|
|
||||||
_history.push_back(_notify);
|
|
||||||
|
|
||||||
_notify = notify;
|
|
||||||
|
|
||||||
emit notifyChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
void NotificationService::setNotify(const QString &title,
|
|
||||||
const QString &text,
|
|
||||||
const QString &img,
|
|
||||||
int type) {
|
|
||||||
|
|
||||||
setNotify(NotificationData(title, text, img,
|
|
||||||
static_cast<NotificationData::Type>(type)));
|
|
||||||
}
|
|
||||||
|
|
||||||
NotificationService *NotificationService::getService() {
|
|
||||||
static auto service = new NotificationService;
|
|
||||||
return service;
|
|
||||||
}
|
|
||||||
|
|
||||||
const QList<NotificationData> &NotificationService::history() const {
|
|
||||||
return _history;
|
|
||||||
}
|
|
@ -1,39 +0,0 @@
|
|||||||
#ifndef NOTIFICATIONSERVICE_H
|
|
||||||
#define NOTIFICATIONSERVICE_H
|
|
||||||
|
|
||||||
#include "notificationdata.h"
|
|
||||||
|
|
||||||
#include <QObject>
|
|
||||||
|
|
||||||
class NotificationService: public QObject
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
Q_PROPERTY(NotificationData notify READ notify NOTIFY notifyChanged)
|
|
||||||
Q_PROPERTY(QList<NotificationData> history READ history NOTIFY notifyChanged)
|
|
||||||
|
|
||||||
private:
|
|
||||||
explicit NotificationService(QObject *ptr = nullptr);
|
|
||||||
|
|
||||||
NotificationData _notify;
|
|
||||||
QList<NotificationData> _history;
|
|
||||||
|
|
||||||
public:
|
|
||||||
NotificationData notify() const;
|
|
||||||
void setNotify(const NotificationData ¬ify);
|
|
||||||
Q_INVOKABLE void setNotify(const QString& title = "",
|
|
||||||
const QString& text = "",
|
|
||||||
const QString& img = "",
|
|
||||||
int type = NotificationData::Normal);
|
|
||||||
|
|
||||||
static NotificationService* getService();
|
|
||||||
|
|
||||||
const QList<NotificationData> & history() const;
|
|
||||||
|
|
||||||
signals:
|
|
||||||
void notifyChanged();
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif // NOTIFICATIONSERVICE_H
|
|
@ -1,6 +0,0 @@
|
|||||||
#include "playerclientdata.h"
|
|
||||||
|
|
||||||
PlayerClientData::PlayerClientData()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
@ -1,11 +0,0 @@
|
|||||||
#ifndef PLAYERCLIENTDATA_H
|
|
||||||
#define PLAYERCLIENTDATA_H
|
|
||||||
#include <player.h>
|
|
||||||
|
|
||||||
class PlayerClientData: public ClientProtocol::Player
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
PlayerClientData();
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // PLAYERCLIENTDATA_H
|
|
@ -1,57 +0,0 @@
|
|||||||
#include "settingsviewmodel.h"
|
|
||||||
#include <QSettings>
|
|
||||||
#include "settings.h"
|
|
||||||
|
|
||||||
void SettingsViewModel::handleValueChanged(QString key, QVariant value) {
|
|
||||||
if (key == SERVER_ADDRESS) {
|
|
||||||
emit hostChanged(value.toString());
|
|
||||||
} else if (key == SERVER_ADDRESS_PORT) {
|
|
||||||
emit portChanged(value.toInt());
|
|
||||||
} else if (key == THEME) {
|
|
||||||
emit themeChanged(value.toInt());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
SettingsViewModel::SettingsViewModel(QObject *ptr):
|
|
||||||
QObject (ptr) {
|
|
||||||
_cfg = Settings::get();
|
|
||||||
|
|
||||||
connect(_cfg, &Settings::valueChanged, this , &SettingsViewModel::handleValueChanged);
|
|
||||||
}
|
|
||||||
|
|
||||||
int SettingsViewModel::port() const {
|
|
||||||
return _cfg->getValue(SERVER_ADDRESS_PORT, SERVER_ADDRESS_DEFAULT_PORT).toInt();
|
|
||||||
}
|
|
||||||
|
|
||||||
QString SettingsViewModel::host() const {
|
|
||||||
return _cfg->getValue(SERVER_ADDRESS, SERVER_ADDRESS_DEFAULT).toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
int SettingsViewModel::theme() const {
|
|
||||||
return _cfg->getValue(THEME, THEME_DEFAULT).toInt();
|
|
||||||
}
|
|
||||||
|
|
||||||
void SettingsViewModel::forceUpdate() {
|
|
||||||
emit hostChanged("");
|
|
||||||
emit portChanged(0);
|
|
||||||
emit themeChanged(0);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void SettingsViewModel::toDefault() {
|
|
||||||
setPort(SERVER_ADDRESS_DEFAULT_PORT);
|
|
||||||
setHost(SERVER_ADDRESS_DEFAULT);
|
|
||||||
setTheme(THEME_DEFAULT);
|
|
||||||
}
|
|
||||||
|
|
||||||
void SettingsViewModel::setPort(int port) {
|
|
||||||
_cfg->setValue(SERVER_ADDRESS_PORT, port);
|
|
||||||
}
|
|
||||||
|
|
||||||
void SettingsViewModel::setHost(const QString& host) {
|
|
||||||
_cfg->setValue(SERVER_ADDRESS, host);
|
|
||||||
}
|
|
||||||
|
|
||||||
void SettingsViewModel::setTheme(int theme) {
|
|
||||||
_cfg->setValue(THEME, theme);
|
|
||||||
}
|
|
@ -1,42 +0,0 @@
|
|||||||
#ifndef SETTINGSVIEWMODEL_H
|
|
||||||
#define SETTINGSVIEWMODEL_H
|
|
||||||
|
|
||||||
#include <QObject>
|
|
||||||
#include "./../settings.h"
|
|
||||||
|
|
||||||
|
|
||||||
class SettingsViewModel: public QObject
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
Q_PROPERTY(int port READ port WRITE setPort NOTIFY portChanged)
|
|
||||||
Q_PROPERTY(QString host READ host WRITE setHost NOTIFY hostChanged)
|
|
||||||
Q_PROPERTY(int theme READ theme WRITE setTheme NOTIFY themeChanged)
|
|
||||||
|
|
||||||
private:
|
|
||||||
Settings *_cfg = nullptr;
|
|
||||||
|
|
||||||
private slots:
|
|
||||||
void handleValueChanged(QString key, QVariant value);
|
|
||||||
|
|
||||||
public:
|
|
||||||
SettingsViewModel(QObject* ptr = nullptr);
|
|
||||||
int port() const;
|
|
||||||
QString host() const;
|
|
||||||
int theme() const;
|
|
||||||
|
|
||||||
Q_INVOKABLE void forceUpdate();
|
|
||||||
Q_INVOKABLE void toDefault();
|
|
||||||
|
|
||||||
|
|
||||||
public slots:
|
|
||||||
void setPort(int port);
|
|
||||||
void setHost(const QString &host);
|
|
||||||
void setTheme(int theme);
|
|
||||||
|
|
||||||
signals:
|
|
||||||
void portChanged(int port);
|
|
||||||
void hostChanged(const QString &host);
|
|
||||||
void themeChanged(int theme);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // SETTINGSVIEWMODEL_H
|
|
@ -1,78 +0,0 @@
|
|||||||
#include "userview.h"
|
|
||||||
|
|
||||||
const PlayerClientData *UserView::getSource() const {
|
|
||||||
return _source.data();
|
|
||||||
}
|
|
||||||
|
|
||||||
void UserView::setSource(QSharedPointer<PlayerClientData> data) {
|
|
||||||
|
|
||||||
_offline = data == nullptr;
|
|
||||||
|
|
||||||
if (data->id() != _source->id()) {
|
|
||||||
_source = data;
|
|
||||||
emit sourceChanged();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool UserView::offline() const {
|
|
||||||
return _offline;
|
|
||||||
}
|
|
||||||
|
|
||||||
void UserView::setOffline(bool offline) {
|
|
||||||
if (_offline != offline) {
|
|
||||||
emit offlineChanged(_offline = offline);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
UserView::UserView(QObject *parent) : QObject(parent) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
QString UserView::name() const {
|
|
||||||
if (!_source) {
|
|
||||||
return tr("Undefined name");
|
|
||||||
}
|
|
||||||
return _source->getName();
|
|
||||||
}
|
|
||||||
|
|
||||||
QString UserView::gmail() const {
|
|
||||||
if (!_source) {
|
|
||||||
return tr("Undefined gmail");
|
|
||||||
}
|
|
||||||
return _source->getGmail();
|
|
||||||
}
|
|
||||||
|
|
||||||
int UserView::money() const {
|
|
||||||
if (!_source) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
return static_cast<int>(_source->getMany());
|
|
||||||
}
|
|
||||||
|
|
||||||
int UserView::record() const {
|
|
||||||
if (!_source) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
return static_cast<int>(_source->getRecord());
|
|
||||||
}
|
|
||||||
|
|
||||||
int UserView::avgRecord() const {
|
|
||||||
if (!_source) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
return static_cast<int>(_source->getAvgRecord());
|
|
||||||
}
|
|
||||||
|
|
||||||
int UserView::cureentSnake() const {
|
|
||||||
if (!_source) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
return _source->getCureentSnake();
|
|
||||||
}
|
|
||||||
|
|
||||||
int UserView::id() const {
|
|
||||||
if (!_source) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
return _source->id();
|
|
||||||
}
|
|
@ -1,52 +0,0 @@
|
|||||||
#ifndef USERVIEW_H
|
|
||||||
#define USERVIEW_H
|
|
||||||
|
|
||||||
#include "playerclientdata.h"
|
|
||||||
|
|
||||||
#include <QObject>
|
|
||||||
|
|
||||||
class UserView : public QObject
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
Q_PROPERTY(QString name READ name NOTIFY sourceChanged)
|
|
||||||
Q_PROPERTY(QString gmail READ gmail NOTIFY sourceChanged)
|
|
||||||
Q_PROPERTY(int money READ money NOTIFY sourceChanged)
|
|
||||||
Q_PROPERTY(int record READ record NOTIFY sourceChanged)
|
|
||||||
Q_PROPERTY(int avgRecord READ avgRecord NOTIFY sourceChanged)
|
|
||||||
Q_PROPERTY(int cureentSnake READ cureentSnake NOTIFY sourceChanged)
|
|
||||||
Q_PROPERTY(int id READ id NOTIFY sourceChanged)
|
|
||||||
Q_PROPERTY(bool offline READ offline NOTIFY offlineChanged)
|
|
||||||
|
|
||||||
private:
|
|
||||||
QSharedPointer<PlayerClientData> _source = nullptr;
|
|
||||||
|
|
||||||
bool _offline = false;
|
|
||||||
|
|
||||||
public:
|
|
||||||
explicit UserView(QObject *parent = nullptr);
|
|
||||||
|
|
||||||
QString name() const;
|
|
||||||
QString gmail() const;
|
|
||||||
int money() const;
|
|
||||||
int record() const;
|
|
||||||
int avgRecord() const;
|
|
||||||
int cureentSnake() const;
|
|
||||||
int id() const;
|
|
||||||
|
|
||||||
const PlayerClientData *getSource() const;
|
|
||||||
bool offline() const;
|
|
||||||
void setOffline(bool offline);
|
|
||||||
|
|
||||||
signals:
|
|
||||||
|
|
||||||
void sourceChanged();
|
|
||||||
|
|
||||||
void offlineChanged(bool offline);
|
|
||||||
|
|
||||||
public slots:
|
|
||||||
void setSource(QSharedPointer<PlayerClientData> data);
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // USERVIEW_H
|
|
@ -1,23 +0,0 @@
|
|||||||
#include "asyncimageresponse.h"
|
|
||||||
|
|
||||||
AsyncImageResponse::AsyncImageResponse() = default;
|
|
||||||
AsyncImageResponse::~AsyncImageResponse() = default;
|
|
||||||
|
|
||||||
QQuickTextureFactory *AsyncImageResponse::textureFactory() const {
|
|
||||||
return _texture;
|
|
||||||
}
|
|
||||||
|
|
||||||
// memory leak ?
|
|
||||||
void AsyncImageResponse::setResult(const QImage& image) {
|
|
||||||
_texture = QQuickTextureFactory::textureFactoryForImage(image);
|
|
||||||
emit finished();
|
|
||||||
// deleteLater();
|
|
||||||
}
|
|
||||||
|
|
||||||
void AsyncImageResponse::error(const QString &err) {
|
|
||||||
_errorString = " " + err;
|
|
||||||
}
|
|
||||||
|
|
||||||
QString AsyncImageResponse::errorString() const {
|
|
||||||
return QQuickImageResponse::errorString() + _errorString;
|
|
||||||
}
|
|
@ -1,24 +0,0 @@
|
|||||||
#ifndef ASYNCIMAGERESPONSE_H
|
|
||||||
#define ASYNCIMAGERESPONSE_H
|
|
||||||
|
|
||||||
#include <QQuickImageResponse>
|
|
||||||
|
|
||||||
|
|
||||||
class AsyncImageResponse : public QQuickImageResponse {
|
|
||||||
|
|
||||||
private:
|
|
||||||
QQuickTextureFactory *_texture = nullptr;
|
|
||||||
QString _errorString;
|
|
||||||
public:
|
|
||||||
|
|
||||||
AsyncImageResponse ();
|
|
||||||
~AsyncImageResponse () override;
|
|
||||||
|
|
||||||
QQuickTextureFactory *textureFactory() const override;
|
|
||||||
|
|
||||||
void setResult(const QImage &image);
|
|
||||||
void error(const QString &err);
|
|
||||||
|
|
||||||
QString errorString() const override;
|
|
||||||
};
|
|
||||||
#endif // ASYNCIMAGERESPONSE_H
|
|
@ -1,20 +0,0 @@
|
|||||||
#include "background.h"
|
|
||||||
|
|
||||||
BackGround::BackGround(double x, double y): ItemWorld (x, y) {
|
|
||||||
this->setSize(200, 400);
|
|
||||||
this->setTexture("qrc:/texture/asphalt");
|
|
||||||
setBeckGroundObject(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
void BackGround::render() {
|
|
||||||
auto wPart = w() / 2;
|
|
||||||
|
|
||||||
if (m_x + wPart < 200) {
|
|
||||||
setX(wPart);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void BackGround::reset() {
|
|
||||||
setX(0 - w());
|
|
||||||
render();
|
|
||||||
}
|
|
@ -1,16 +0,0 @@
|
|||||||
#ifndef BACKGROUND_H
|
|
||||||
#define BACKGROUND_H
|
|
||||||
|
|
||||||
#include "itemworld.h"
|
|
||||||
|
|
||||||
|
|
||||||
class BackGround : public ItemWorld
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
BackGround(double x, double y);
|
|
||||||
|
|
||||||
void render() override;
|
|
||||||
void reset() override;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // BACKGROUND_H
|
|
@ -1,19 +0,0 @@
|
|||||||
#include "backgrounditem.h"
|
|
||||||
|
|
||||||
#include <QColor>
|
|
||||||
|
|
||||||
BackGroundItem::BackGroundItem(double x, double y):
|
|
||||||
ItemWorld (x, y) {
|
|
||||||
setBeckGroundObject(true);
|
|
||||||
reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
void BackGroundItem::reset() {
|
|
||||||
auto tempColor = QColor(rand() % 255, rand() % 255, rand() % 255, 10);
|
|
||||||
setColor(tempColor.name(QColor::HexArgb));
|
|
||||||
auto radius = rand() % 200;
|
|
||||||
setSize(radius , radius);
|
|
||||||
|
|
||||||
setRadius(radius / 2);
|
|
||||||
|
|
||||||
}
|
|
@ -1,15 +0,0 @@
|
|||||||
#ifndef BACKGROUNDITEM_H
|
|
||||||
#define BACKGROUNDITEM_H
|
|
||||||
|
|
||||||
#include "itemworld.h"
|
|
||||||
|
|
||||||
|
|
||||||
class BackGroundItem : public ItemWorld
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
BackGroundItem(double x, double y);
|
|
||||||
void reset() override;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // BACKGROUNDITEM_H
|
|
@ -1,17 +0,0 @@
|
|||||||
#include "baseclass.h"
|
|
||||||
|
|
||||||
void BaseClass::setName(const QString &value) {
|
|
||||||
name = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
BaseClass::BaseClass() :
|
|
||||||
name("BaseClass") {
|
|
||||||
}
|
|
||||||
|
|
||||||
BaseClass::~BaseClass() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
QString BaseClass::getName() const {
|
|
||||||
return name;
|
|
||||||
}
|
|
@ -1,17 +0,0 @@
|
|||||||
#ifndef BASECLASS_H
|
|
||||||
#define BASECLASS_H
|
|
||||||
#include <QString>
|
|
||||||
|
|
||||||
class BaseClass
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
QString name;
|
|
||||||
public:
|
|
||||||
BaseClass();
|
|
||||||
virtual void render() = 0;
|
|
||||||
virtual ~BaseClass();
|
|
||||||
QString getName() const;
|
|
||||||
void setName(const QString &value);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // BASECLASS_H
|
|
@ -1,12 +0,0 @@
|
|||||||
#include "box.h"
|
|
||||||
|
|
||||||
#include <QColor>
|
|
||||||
|
|
||||||
Box::Box(double x, double y):
|
|
||||||
ItemWorld (x, y) {
|
|
||||||
|
|
||||||
this->setSize(10, 10);
|
|
||||||
|
|
||||||
setColor(QColor(100, 100, 100).name());
|
|
||||||
}
|
|
||||||
|
|
@ -1,13 +0,0 @@
|
|||||||
#ifndef BOX_H
|
|
||||||
#define BOX_H
|
|
||||||
|
|
||||||
#include "itemworld.h"
|
|
||||||
|
|
||||||
class Box: public ItemWorld
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
Box(double x, double y);
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // BOX_H
|
|
@ -1,50 +0,0 @@
|
|||||||
#include "clientapp.h"
|
|
||||||
#include "imageprovider.h"
|
|
||||||
#include "ProfileViewItems/userview.h"
|
|
||||||
#include <QQmlApplicationEngine>
|
|
||||||
#include <QQmlContext>
|
|
||||||
|
|
||||||
#include <back-end/ProfileViewItems/mainmenumodel.h>
|
|
||||||
#include <back-end/ProfileViewItems/notificationservice.h>
|
|
||||||
|
|
||||||
QByteArray ClientApp::initTheme() {
|
|
||||||
int themeIndex = Settings::get()->getValue(THEME, THEME_DEFAULT).toInt();
|
|
||||||
|
|
||||||
switch (themeIndex) {
|
|
||||||
case 1: return "Dark";
|
|
||||||
default: return "Light";
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
ClientApp::ClientApp() {
|
|
||||||
}
|
|
||||||
|
|
||||||
ClientApp::~ClientApp() {
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ClientApp::init(QQmlApplicationEngine *engine) {
|
|
||||||
|
|
||||||
qputenv("QT_QUICK_CONTROLS_MATERIAL_THEME", initTheme());
|
|
||||||
|
|
||||||
qmlRegisterType <GuiObject> ();
|
|
||||||
qmlRegisterType <Diff> ();
|
|
||||||
qmlRegisterType <MainMenuModel> ();
|
|
||||||
qmlRegisterType <UserView> ();
|
|
||||||
|
|
||||||
auto root = engine->rootContext();
|
|
||||||
if (!root)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
|
|
||||||
engine->addImageProvider(QLatin1String("userItems"), new ImageProvider());
|
|
||||||
|
|
||||||
root->setContextProperty("contr", &contr);
|
|
||||||
root->setContextProperty("notificationService", NotificationService::getService());
|
|
||||||
|
|
||||||
engine->load(QUrl(QStringLiteral("qrc:/front-end/main.qml")));
|
|
||||||
if (engine->rootObjects().isEmpty())
|
|
||||||
return false;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
@ -1,22 +0,0 @@
|
|||||||
#ifndef CLIENTAPP_H
|
|
||||||
#define CLIENTAPP_H
|
|
||||||
|
|
||||||
#include "controller.h"
|
|
||||||
#include "diff.h"
|
|
||||||
|
|
||||||
class QQmlApplicationEngine;
|
|
||||||
|
|
||||||
class ClientApp
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
Controller contr;
|
|
||||||
|
|
||||||
QByteArray initTheme();
|
|
||||||
|
|
||||||
public:
|
|
||||||
ClientApp();
|
|
||||||
~ClientApp();
|
|
||||||
bool init(QQmlApplicationEngine* engine);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // CLIENTAPP_H
|
|
@ -1,154 +0,0 @@
|
|||||||
#include "controller.h"
|
|
||||||
#include <cmath>
|
|
||||||
#include <ctime>
|
|
||||||
#include "diff.h"
|
|
||||||
#include <lvls.h>
|
|
||||||
#include "ProfileViewItems/mainmenumodel.h"
|
|
||||||
#include <back-end/ProfileViewItems/notificationservice.h>
|
|
||||||
|
|
||||||
Controller::Controller() {
|
|
||||||
srand(static_cast<unsigned int>(time(nullptr)));
|
|
||||||
timer = new QTimer();
|
|
||||||
timer->setInterval(1);
|
|
||||||
|
|
||||||
_networkModel = new MainMenuModel(this);
|
|
||||||
|
|
||||||
connect(timer, SIGNAL(timeout()), this, SLOT(update()));
|
|
||||||
connect(_networkModel, &MainMenuModel::newGame, this, &Controller::handleNewGame);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
Controller::~Controller() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Controller::nextLvl() {
|
|
||||||
if (lvl + 1 >= lvls.size()) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
m_generalLong += static_cast<int>(world.getCurrentLong());
|
|
||||||
|
|
||||||
generateDiff(world.init(lvls.value(++lvl)));
|
|
||||||
startTimer();
|
|
||||||
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Controller::generateDiff(const QMap<int, GuiObject *>& objs) {
|
|
||||||
|
|
||||||
auto removeIds = objectsContainer.keys();
|
|
||||||
QList<int> addedIds;
|
|
||||||
|
|
||||||
for (auto i = objs.begin(); i != objs.end(); ++i) {
|
|
||||||
if (objectsContainer.contains(i.key())) {
|
|
||||||
removeIds.removeOne(i.key());
|
|
||||||
} else {
|
|
||||||
objectsContainer.insert(i.key(), i.value());
|
|
||||||
addedIds.push_back(i.key());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (removeIds.size() || addedIds.size()) {
|
|
||||||
Diff diff;
|
|
||||||
|
|
||||||
diff.setRemoveIds(removeIds);
|
|
||||||
diff.setAddedIds(addedIds);
|
|
||||||
emit gameObjectsChanged(diff);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Controller::update() {
|
|
||||||
if (pause) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
world.render();
|
|
||||||
|
|
||||||
if(world.isDefiat()) {
|
|
||||||
stopTimer();
|
|
||||||
if (!_showMenu) {
|
|
||||||
setShowMenu(true);
|
|
||||||
}
|
|
||||||
handleNewGame();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (world.isEnd()) {
|
|
||||||
stopTimer();
|
|
||||||
|
|
||||||
if (!_showMenu) {
|
|
||||||
|
|
||||||
NotificationData notify(tr(" Next Lvl!!!"),
|
|
||||||
tr(" You anblock next lvl (%0)" ).arg(lvl),
|
|
||||||
"qrc:/texture/up");
|
|
||||||
|
|
||||||
NotificationService::getService()->setNotify(notify);
|
|
||||||
}
|
|
||||||
|
|
||||||
nextLvl();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
long_changed(static_cast<int>(world.getCurrentLong()));
|
|
||||||
generalLongchanged(generalLong());
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void Controller::handleNewGame() {
|
|
||||||
|
|
||||||
world.resetPosition();
|
|
||||||
|
|
||||||
WorldRules newGameRules = lvls.first();
|
|
||||||
lvl = 0;
|
|
||||||
m_generalLong = 0;
|
|
||||||
generateDiff(world.init(newGameRules));
|
|
||||||
startTimer();
|
|
||||||
}
|
|
||||||
|
|
||||||
QObject *Controller::getGameObject(int id) {
|
|
||||||
return objectsContainer.value(id, nullptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Controller::startTimer() {
|
|
||||||
timer->start();
|
|
||||||
}
|
|
||||||
|
|
||||||
void Controller::stopTimer() {
|
|
||||||
timer->stop();
|
|
||||||
}
|
|
||||||
|
|
||||||
int Controller::long_() const {
|
|
||||||
return static_cast<int>(world.getCurrentLong());
|
|
||||||
}
|
|
||||||
|
|
||||||
int Controller::generalLong() const {
|
|
||||||
return m_generalLong + long_();
|
|
||||||
}
|
|
||||||
|
|
||||||
QObject *Controller::mainMenuModel() const {
|
|
||||||
return _networkModel;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Controller::buttonPress() {
|
|
||||||
world.reversClick();
|
|
||||||
}
|
|
||||||
|
|
||||||
void Controller::setPause(bool p){
|
|
||||||
pause = p;
|
|
||||||
if (!pause) {
|
|
||||||
world.unPause();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Controller::showMenu() const {
|
|
||||||
return _showMenu;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Controller::setShowMenu(bool showMenu) {
|
|
||||||
if (_showMenu == showMenu)
|
|
||||||
return;
|
|
||||||
|
|
||||||
_showMenu = showMenu;
|
|
||||||
emit showMenuChanged(_showMenu);
|
|
||||||
}
|
|
||||||
|
|
@ -1,88 +0,0 @@
|
|||||||
#ifndef CONTROLLER_H
|
|
||||||
#define CONTROLLER_H
|
|
||||||
|
|
||||||
#include <QObject>
|
|
||||||
#include <QTimer>
|
|
||||||
#include <QTime>
|
|
||||||
#include "diff.h"
|
|
||||||
#include "snake.h"
|
|
||||||
#include "world.h"
|
|
||||||
|
|
||||||
class MainMenuModel;
|
|
||||||
|
|
||||||
class Controller : public QObject
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
Q_PROPERTY(int long_ READ long_ NOTIFY long_changed)
|
|
||||||
Q_PROPERTY(int generalLong READ generalLong NOTIFY generalLongchanged)
|
|
||||||
Q_PROPERTY(QObject* mainMenuModel READ mainMenuModel NOTIFY mainMenuModelchanged)
|
|
||||||
Q_PROPERTY(bool showMenu READ showMenu WRITE setShowMenu NOTIFY showMenuChanged)
|
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
World world;
|
|
||||||
QMap<int, GuiObject *> objectsContainer;
|
|
||||||
QTimer *timer = nullptr;
|
|
||||||
|
|
||||||
int lvl = 0;
|
|
||||||
int m_generalLong = 0;
|
|
||||||
bool pause = false;
|
|
||||||
bool _showMenu = true;
|
|
||||||
|
|
||||||
void generateDiff(const QMap<int, GuiObject *> &);
|
|
||||||
|
|
||||||
MainMenuModel* _networkModel = nullptr;
|
|
||||||
|
|
||||||
public:
|
|
||||||
Controller();
|
|
||||||
~Controller();
|
|
||||||
|
|
||||||
void startTimer();
|
|
||||||
void stopTimer();
|
|
||||||
|
|
||||||
int long_() const;
|
|
||||||
int generalLong() const;
|
|
||||||
bool showMenu() const;
|
|
||||||
|
|
||||||
QObject* mainMenuModel() const;
|
|
||||||
|
|
||||||
public slots:
|
|
||||||
void buttonPress();
|
|
||||||
void setPause(bool);
|
|
||||||
void update();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief nextLvl - switch to next lvl from array lvels
|
|
||||||
* @return true if all levels are passed
|
|
||||||
*/
|
|
||||||
bool nextLvl();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief newGame - start game from first lvl
|
|
||||||
*/
|
|
||||||
void handleNewGame();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief getGameObject
|
|
||||||
* @param id - id of guiObject;
|
|
||||||
* @return guiObject if (id is not valid return nullptr)
|
|
||||||
*/
|
|
||||||
QObject* getGameObject(int id);
|
|
||||||
|
|
||||||
void setShowMenu(bool showMenu);
|
|
||||||
|
|
||||||
signals:
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief gameObjectsChanged
|
|
||||||
* @param dif
|
|
||||||
*/
|
|
||||||
void gameObjectsChanged(const Diff &dif);
|
|
||||||
void long_changed(int m_long);
|
|
||||||
void generalLongchanged(int generalLong);
|
|
||||||
void mainMenuModelchanged(QObject* mainMenuModel);
|
|
||||||
void showMenuChanged(bool showMenu);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // CONTROLLER_H
|
|
@ -1,21 +0,0 @@
|
|||||||
#include "diff.h"
|
|
||||||
|
|
||||||
QList<int> Diff::getRemoveIds() const {
|
|
||||||
return removeIds;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Diff::setRemoveIds(const QList<int> &value) {
|
|
||||||
removeIds = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
QList<int> Diff::getAddedIds() const {
|
|
||||||
return addedIds;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Diff::setAddedIds(const QList<int> &value) {
|
|
||||||
addedIds = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
Diff::Diff(){
|
|
||||||
|
|
||||||
}
|
|
@ -1,23 +0,0 @@
|
|||||||
#ifndef DIFF_H
|
|
||||||
#define DIFF_H
|
|
||||||
|
|
||||||
#include <QObject>
|
|
||||||
|
|
||||||
class Diff
|
|
||||||
{
|
|
||||||
Q_GADGET
|
|
||||||
private:
|
|
||||||
QList<int> removeIds;
|
|
||||||
QList<int> addedIds;
|
|
||||||
public:
|
|
||||||
explicit Diff();
|
|
||||||
|
|
||||||
Q_INVOKABLE QList<int> getRemoveIds() const;
|
|
||||||
void setRemoveIds(const QList<int> &value);
|
|
||||||
Q_INVOKABLE QList<int> getAddedIds() const;
|
|
||||||
void setAddedIds(const QList<int> &value);
|
|
||||||
};
|
|
||||||
|
|
||||||
Q_DECLARE_METATYPE(Diff)
|
|
||||||
|
|
||||||
#endif // DIFF_H
|
|
@ -1,116 +0,0 @@
|
|||||||
#include "guiobject.h"
|
|
||||||
|
|
||||||
GuiObject::GuiObject(const QString &viewTempalte, QObject *ptr):
|
|
||||||
QObject (ptr) {
|
|
||||||
m_viewTemplate = viewTempalte;
|
|
||||||
generateId();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
double GuiObject::angle() const {
|
|
||||||
return m_angle;
|
|
||||||
}
|
|
||||||
|
|
||||||
QString GuiObject::texture() const {
|
|
||||||
return m_texture;
|
|
||||||
}
|
|
||||||
|
|
||||||
void GuiObject::render() {
|
|
||||||
}
|
|
||||||
|
|
||||||
QRectF GuiObject::rect() const {
|
|
||||||
return QRectF(m_x - m_w / 2, m_y - m_h / 2, m_w, m_h);
|
|
||||||
}
|
|
||||||
|
|
||||||
void GuiObject::setAngle(double angle) {
|
|
||||||
m_angle = angle;
|
|
||||||
emit angleChanged(m_angle);
|
|
||||||
}
|
|
||||||
|
|
||||||
int GuiObject::guiId() const {
|
|
||||||
return m_guiId;
|
|
||||||
}
|
|
||||||
|
|
||||||
QString GuiObject::color() const {
|
|
||||||
return m_color;
|
|
||||||
}
|
|
||||||
|
|
||||||
void GuiObject::setColor(QString color) {
|
|
||||||
if (m_color == color)
|
|
||||||
return;
|
|
||||||
|
|
||||||
m_color = color;
|
|
||||||
emit colorChanged(m_color);
|
|
||||||
}
|
|
||||||
|
|
||||||
double GuiObject::x() const {
|
|
||||||
return m_x;
|
|
||||||
}
|
|
||||||
|
|
||||||
double GuiObject::y() const {
|
|
||||||
return m_y;
|
|
||||||
}
|
|
||||||
|
|
||||||
double GuiObject::w() const {
|
|
||||||
return m_w;
|
|
||||||
}
|
|
||||||
|
|
||||||
double GuiObject::h() const {
|
|
||||||
return m_h;
|
|
||||||
}
|
|
||||||
|
|
||||||
void GuiObject::generateId() {
|
|
||||||
static int id = 0;
|
|
||||||
m_guiId = id++;
|
|
||||||
}
|
|
||||||
|
|
||||||
void GuiObject::setH(double h) {
|
|
||||||
m_h = h;
|
|
||||||
emit hChanged(m_h);
|
|
||||||
}
|
|
||||||
|
|
||||||
void GuiObject::reset() {
|
|
||||||
setX(-1);
|
|
||||||
setY(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
int GuiObject::radius() const {
|
|
||||||
return m_radius;
|
|
||||||
}
|
|
||||||
|
|
||||||
QString GuiObject::viewTemplate() const {
|
|
||||||
return m_viewTemplate;
|
|
||||||
}
|
|
||||||
|
|
||||||
void GuiObject::setRadius(int radius) {
|
|
||||||
if (m_radius == radius)
|
|
||||||
return;
|
|
||||||
|
|
||||||
m_radius = radius;
|
|
||||||
emit radiusChanged(m_radius);
|
|
||||||
}
|
|
||||||
|
|
||||||
void GuiObject::setW(double w) {
|
|
||||||
m_w = w;
|
|
||||||
emit wChanged(m_w);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void GuiObject::setY(double y) {
|
|
||||||
m_y = y;
|
|
||||||
emit yChanged(m_y);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void GuiObject::setX(double x) {
|
|
||||||
m_x = x;
|
|
||||||
emit xChanged(m_x);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void GuiObject::setTexture(const QString &texture) {
|
|
||||||
m_texture = texture;
|
|
||||||
emit textureChanged(m_texture);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
@ -1,91 +0,0 @@
|
|||||||
#ifndef GUIOBJECT_H
|
|
||||||
#define GUIOBJECT_H
|
|
||||||
|
|
||||||
#include "baseclass.h"
|
|
||||||
#include "QObject"
|
|
||||||
|
|
||||||
#include <QRectF>
|
|
||||||
|
|
||||||
class GuiObject:public QObject, public BaseClass
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
// @todo: add color
|
|
||||||
Q_PROPERTY(QString color READ color WRITE setColor NOTIFY colorChanged)
|
|
||||||
Q_PROPERTY(double angle READ angle NOTIFY angleChanged)
|
|
||||||
Q_PROPERTY(QString texture READ texture NOTIFY textureChanged)
|
|
||||||
Q_PROPERTY(int guiId READ guiId NOTIFY guiIdChanged)
|
|
||||||
Q_PROPERTY(QString viewTemplate READ viewTemplate NOTIFY viewTemplateChanged)
|
|
||||||
Q_PROPERTY(int radius READ radius WRITE setRadius NOTIFY radiusChanged)
|
|
||||||
|
|
||||||
Q_PROPERTY(double x READ x NOTIFY xChanged)
|
|
||||||
Q_PROPERTY(double y READ y NOTIFY yChanged)
|
|
||||||
Q_PROPERTY(double w READ w NOTIFY wChanged)
|
|
||||||
Q_PROPERTY(double h READ h NOTIFY hChanged)
|
|
||||||
|
|
||||||
private:
|
|
||||||
void generateId();
|
|
||||||
QString m_viewTemplate;
|
|
||||||
|
|
||||||
protected:
|
|
||||||
int m_guiId = -1;
|
|
||||||
double m_angle = 0;
|
|
||||||
QString m_texture = "";
|
|
||||||
QString m_color = "";
|
|
||||||
int m_radius = 0;
|
|
||||||
|
|
||||||
double m_x = 0;
|
|
||||||
double m_y = 0;
|
|
||||||
double m_w = 0;
|
|
||||||
double m_h = 0;
|
|
||||||
|
|
||||||
void setTexture(const QString &texture);
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
|
||||||
GuiObject(const QString& viewTempalte = "GraphicItem", QObject *ptr = nullptr);
|
|
||||||
|
|
||||||
double angle() const;
|
|
||||||
QString texture() const;
|
|
||||||
|
|
||||||
void render() override;
|
|
||||||
|
|
||||||
QRectF rect() const;
|
|
||||||
virtual void setAngle(double angle);
|
|
||||||
int guiId() const;
|
|
||||||
|
|
||||||
QString color() const;
|
|
||||||
|
|
||||||
void setColor(QString color);
|
|
||||||
|
|
||||||
double x() const;
|
|
||||||
double y() const;
|
|
||||||
double w() const;
|
|
||||||
double h() const;
|
|
||||||
|
|
||||||
void setX(double x);
|
|
||||||
void setY(double y);
|
|
||||||
void setW(double w);
|
|
||||||
void setH(double h);
|
|
||||||
|
|
||||||
virtual void reset();
|
|
||||||
int radius() const;
|
|
||||||
QString viewTemplate() const;
|
|
||||||
|
|
||||||
public slots:
|
|
||||||
|
|
||||||
void setRadius(int radius);
|
|
||||||
|
|
||||||
signals:
|
|
||||||
void angleChanged(double angle);
|
|
||||||
void textureChanged(QString texture);
|
|
||||||
void guiIdChanged(int guiId);
|
|
||||||
void colorChanged(QString color);
|
|
||||||
void xChanged(double x);
|
|
||||||
void yChanged(double y);
|
|
||||||
void wChanged(double w);
|
|
||||||
void hChanged(double h);
|
|
||||||
void radiusChanged(int radius);
|
|
||||||
void viewTemplateChanged(QString viewTemplate);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // GUIOBJECT_H
|
|
@ -1,23 +0,0 @@
|
|||||||
#include "guiobjectfactory.h"
|
|
||||||
#include "box.h"
|
|
||||||
#include <snakeutils.h>
|
|
||||||
#include "head.h"
|
|
||||||
#include "background.h"
|
|
||||||
#include "backgrounditem.h"
|
|
||||||
|
|
||||||
GuiObjectFactory::GuiObjectFactory() {}
|
|
||||||
|
|
||||||
ItemWorld *GuiObjectFactory::generate(const QString &name) {
|
|
||||||
ItemWorld *obj = nullptr;
|
|
||||||
if (name == "Box") {
|
|
||||||
obj = new Box(rand() % 400, 0);
|
|
||||||
}
|
|
||||||
else if (name == "BackGround") {
|
|
||||||
obj = new BackGround(0, 0);
|
|
||||||
}
|
|
||||||
else if (name == "BackGroundItem") {
|
|
||||||
obj = new BackGroundItem(0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
return obj;
|
|
||||||
}
|
|
@ -1,27 +0,0 @@
|
|||||||
#ifndef GUIOBJECTFACTORY_H
|
|
||||||
#define GUIOBJECTFACTORY_H
|
|
||||||
|
|
||||||
#include <QString>
|
|
||||||
|
|
||||||
class ItemWorld;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief The GuiObjectFactory class
|
|
||||||
* factory of gui ojects;
|
|
||||||
*/
|
|
||||||
class GuiObjectFactory
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
GuiObjectFactory();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief generate - generate the child of GuiObject
|
|
||||||
* by object name.
|
|
||||||
* @param name - name of class of genereta object
|
|
||||||
* @return pointer of generated object.
|
|
||||||
* If method called with not valid name then return nullptr.
|
|
||||||
*/
|
|
||||||
static ItemWorld* generate(const QString& name);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // GUIOBJECTFACTORY_H
|
|
@ -1,58 +0,0 @@
|
|||||||
#include "head.h"
|
|
||||||
#include <cmath>
|
|
||||||
#include <QDateTime>
|
|
||||||
|
|
||||||
void Head::render() {
|
|
||||||
|
|
||||||
|
|
||||||
qint64 tempTime = QDateTime::currentMSecsSinceEpoch() - time;
|
|
||||||
time = QDateTime::currentMSecsSinceEpoch();
|
|
||||||
|
|
||||||
double my = (m_y + (*speed * 0.55) * sin(m_angle * TO_RADIAN));
|
|
||||||
m_y += (my - m_y) / 1000 * tempTime;
|
|
||||||
|
|
||||||
if (*speed < 1) {
|
|
||||||
setColor(generalSpeadColor);
|
|
||||||
setRadius(static_cast<int>(m_w * 0.4));
|
|
||||||
|
|
||||||
} else if (*speed < normSpead) {
|
|
||||||
setColor(normSpeadColor);
|
|
||||||
setRadius(static_cast<int>(m_w * 0.5));
|
|
||||||
|
|
||||||
} else if (*speed < fastSpead) {
|
|
||||||
setColor(fastSpeadColor);
|
|
||||||
setRadius(static_cast<int>(m_w * 0.5));
|
|
||||||
|
|
||||||
} else if (*speed < megaFastSpead) {
|
|
||||||
setColor(megaFastSpeadColor);
|
|
||||||
setRadius(static_cast<int>(m_w * 0.4));
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
emit yChanged(m_y);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Head::reset() {
|
|
||||||
}
|
|
||||||
|
|
||||||
void Head::unPause() {
|
|
||||||
time = QDateTime::currentMSecsSinceEpoch();
|
|
||||||
}
|
|
||||||
|
|
||||||
Head::Head(double x, double y, double h, double w, double *spead):
|
|
||||||
GuiObject ("SnakeItem") {
|
|
||||||
setX(x);
|
|
||||||
setY(y);
|
|
||||||
setW(w);
|
|
||||||
setH(h);
|
|
||||||
this->speed = spead;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Head::setAngle(double angle) {
|
|
||||||
m_angle = angle;
|
|
||||||
emit angleChanged(m_angle);
|
|
||||||
}
|
|
||||||
|
|
||||||
Head::~Head() {
|
|
||||||
|
|
||||||
}
|
|
@ -1,32 +0,0 @@
|
|||||||
#ifndef HEAD_H
|
|
||||||
#define HEAD_H
|
|
||||||
#define TO_RADIAN 0.017453293
|
|
||||||
|
|
||||||
|
|
||||||
#include "guiobject.h"
|
|
||||||
#include <QString>
|
|
||||||
|
|
||||||
class Head : public GuiObject
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
qint64 time;
|
|
||||||
double *speed;
|
|
||||||
const int megaFastSpead = 200;
|
|
||||||
const int fastSpead = 100;
|
|
||||||
const int normSpead = 50;
|
|
||||||
|
|
||||||
const QString generalSpeadColor = "#616a6b";
|
|
||||||
const QString normSpeadColor = "#5d6d7e";
|
|
||||||
const QString fastSpeadColor = "#eb984e";
|
|
||||||
const QString megaFastSpeadColor = "#ec7063";
|
|
||||||
|
|
||||||
public:
|
|
||||||
Head(double x , double y, double h, double w, double *speed);
|
|
||||||
void setAngle(double angle) override;
|
|
||||||
void render() override;
|
|
||||||
void reset() override;
|
|
||||||
void unPause();
|
|
||||||
~Head() override;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // HEAD_H
|
|
@ -1,37 +0,0 @@
|
|||||||
#include "asyncimageresponse.h"
|
|
||||||
#include "imageprovider.h"
|
|
||||||
#include <QQuickImageResponse>
|
|
||||||
#include <QtConcurrent>
|
|
||||||
|
|
||||||
ImageProvider::ImageProvider() = default;
|
|
||||||
ImageProvider::~ImageProvider() = default;
|
|
||||||
|
|
||||||
QQuickImageResponse *ImageProvider::requestImageResponse(const QString &id,
|
|
||||||
const QSize &requestedSize) {
|
|
||||||
|
|
||||||
AsyncImageResponse* response = new AsyncImageResponse();
|
|
||||||
auto readImage = [id, requestedSize, response]() mutable {
|
|
||||||
Q_UNUSED(requestedSize);
|
|
||||||
|
|
||||||
auto params = id.split("/");
|
|
||||||
|
|
||||||
if (params.contains("player")) {
|
|
||||||
response->setResult(QImage(":/img/defaultuser").
|
|
||||||
scaled(requestedSize, Qt::KeepAspectRatioByExpanding));
|
|
||||||
|
|
||||||
} else if (params.contains("item")) {
|
|
||||||
response->setResult(QImage(":/img/defaultsnake").
|
|
||||||
scaled(requestedSize, Qt::KeepAspectRatioByExpanding));
|
|
||||||
} else {
|
|
||||||
response->error("Wrong first parametr example 'first/last'");
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
QtConcurrent::run(readImage);
|
|
||||||
|
|
||||||
return response;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,19 +0,0 @@
|
|||||||
#ifndef IMAGEPROVIDER_H
|
|
||||||
#define IMAGEPROVIDER_H
|
|
||||||
|
|
||||||
#include <QQuickAsyncImageProvider>
|
|
||||||
#include <QPixmap>
|
|
||||||
|
|
||||||
class ImageProvider: public QQuickAsyncImageProvider
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
public:
|
|
||||||
explicit ImageProvider();
|
|
||||||
~ImageProvider() override;
|
|
||||||
|
|
||||||
QQuickImageResponse *requestImageResponse(const QString &id,
|
|
||||||
const QSize &requestedSize) override;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
#endif // IMAGEPROVIDER_H
|
|
@ -1,48 +0,0 @@
|
|||||||
#include "itemworld.h"
|
|
||||||
#include "snakeutils.h"
|
|
||||||
#include <cmath>
|
|
||||||
#include <QDebug>
|
|
||||||
#include <QRectF>
|
|
||||||
|
|
||||||
#define POINT 100
|
|
||||||
|
|
||||||
ItemWorld::ItemWorld(double x, double y, const QString& guiTemplate):
|
|
||||||
GuiObject (guiTemplate) {
|
|
||||||
setLoc(x, y);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ItemWorld::setBeckGroundObject(bool value) {
|
|
||||||
beckGroundObject = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ItemWorld::setSize(double h, double w) {
|
|
||||||
setH(h);
|
|
||||||
setW(w);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ItemWorld::setLoc(double x, double y) {
|
|
||||||
setX(x);
|
|
||||||
setY(y);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ItemWorld::render() {
|
|
||||||
if (m_x + w() < 0) {
|
|
||||||
m_x = (rand() % 400) + 200;
|
|
||||||
m_y = rand() % 100;
|
|
||||||
emit xChanged(m_x);
|
|
||||||
emit yChanged(m_y);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ItemWorld::move(const GuiObject *snakeRiger, double dx) {
|
|
||||||
m_x -= dx;
|
|
||||||
emit xChanged(m_x);
|
|
||||||
|
|
||||||
return snakeRiger->rect().intersects(rect()) && !beckGroundObject;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ItemWorld::isBeckGroundObject() {
|
|
||||||
return beckGroundObject;
|
|
||||||
}
|
|
||||||
|
|
||||||
ItemWorld::~ItemWorld() {}
|
|
@ -1,26 +0,0 @@
|
|||||||
#ifndef ITEMWORLD_H
|
|
||||||
#define ITEMWORLD_H
|
|
||||||
|
|
||||||
#include "guiobject.h"
|
|
||||||
#include <QString>
|
|
||||||
|
|
||||||
class ItemWorld : public GuiObject
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
bool beckGroundObject = false;
|
|
||||||
protected:
|
|
||||||
virtual void setSize(double h, double w);
|
|
||||||
virtual void setLoc(double x, double y);
|
|
||||||
void setBeckGroundObject(bool value);
|
|
||||||
|
|
||||||
public:
|
|
||||||
ItemWorld(double x, double y, const QString& GuiTemplate = "GraphicItem");
|
|
||||||
|
|
||||||
void render();
|
|
||||||
virtual bool move(const GuiObject* snakeRiger, double dx);
|
|
||||||
bool isBeckGroundObject();
|
|
||||||
|
|
||||||
~ItemWorld();
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // ITEMWORLD_H
|
|
@ -1,20 +0,0 @@
|
|||||||
#include <QGuiApplication>
|
|
||||||
#include <QQmlApplicationEngine>
|
|
||||||
#include <QQmlContext>
|
|
||||||
#include "clientapp.h"
|
|
||||||
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
|
|
||||||
|
|
||||||
QGuiApplication app(argc, argv);
|
|
||||||
QQmlApplicationEngine engine;
|
|
||||||
ClientApp client;
|
|
||||||
|
|
||||||
if (!client.init(&engine)) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return app.exec();
|
|
||||||
}
|
|
@ -1 +0,0 @@
|
|||||||
#include "settings.h"
|
|
@ -1,17 +0,0 @@
|
|||||||
#ifndef SNAKESETTINGS_H
|
|
||||||
#define SNAKESETTINGS_H
|
|
||||||
#include <config.h>
|
|
||||||
#include <quasarapp.h>
|
|
||||||
|
|
||||||
#define SERVER_ADDRESS "SERVER_ADDRESS"
|
|
||||||
#define SERVER_ADDRESS_PORT "SERVER_ADDRESS_PORT"
|
|
||||||
#define THEME "THEME_GUI"
|
|
||||||
|
|
||||||
#define SERVER_ADDRESS_DEFAULT "quasarapp.ddns.net"
|
|
||||||
//#define SERVER_ADDRESS_DEFAULT "127.0.0.1"
|
|
||||||
#define SERVER_ADDRESS_DEFAULT_PORT DEFAULT_SNAKE_PORT
|
|
||||||
#define THEME_DEFAULT 0
|
|
||||||
|
|
||||||
using Settings = QuasarAppUtils::Settings;
|
|
||||||
|
|
||||||
#endif // SNAKESETTINGS_H
|
|
@ -1,200 +0,0 @@
|
|||||||
#include "snake.h"
|
|
||||||
#include "guiobject.h"
|
|
||||||
|
|
||||||
#include <QDateTime>
|
|
||||||
#include <QMap>
|
|
||||||
#include <QRectF>
|
|
||||||
#include <cmath>
|
|
||||||
|
|
||||||
Snake::Snake() {
|
|
||||||
}
|
|
||||||
|
|
||||||
const QVector<Head *> &Snake::getItems() const {
|
|
||||||
return items;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Snake::render() {
|
|
||||||
|
|
||||||
auto centerX = [](const Head* head) {
|
|
||||||
return head->x()/* + (head->w() / 2)*/;
|
|
||||||
};
|
|
||||||
|
|
||||||
auto centerY = [](const Head* head) {
|
|
||||||
return head->y() /*+ (head->h() / 2)*/;
|
|
||||||
};
|
|
||||||
|
|
||||||
for (int i = items.length() - 1; i >= 0; --i) {
|
|
||||||
|
|
||||||
if (dead) {
|
|
||||||
items[i]->render();
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i == 0) {
|
|
||||||
if (isClick) {
|
|
||||||
if (countClick & 1){
|
|
||||||
items[i]->setAngle(45);
|
|
||||||
} else {
|
|
||||||
items[i]->setAngle(315);
|
|
||||||
}
|
|
||||||
isClick = false;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
|
|
||||||
double _atan2 = atan2(centerY(items[i - 1]) - centerY(items[i]),
|
|
||||||
centerX(items[i - 1]) - centerX(items[i])) * 90;
|
|
||||||
|
|
||||||
items[i]->setAngle(_atan2);
|
|
||||||
}
|
|
||||||
|
|
||||||
items[i]->render();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
double Snake::checDistance(int i) {
|
|
||||||
|
|
||||||
auto result = (items[i]->rect().y() -
|
|
||||||
items[i - 1]->rect().y()) / rataticonDistance;
|
|
||||||
|
|
||||||
return result;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
double Snake::getRataticonDistance() const {
|
|
||||||
return rataticonDistance;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Snake::setRataticonDistance(double value) {
|
|
||||||
rataticonDistance = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Snake::unPause() {
|
|
||||||
for ( int i = 0; i < items.size(); ++i ) {
|
|
||||||
items[i]->unPause();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
double Snake::sizeByLvl(double lvl , int count) const {
|
|
||||||
double maxSize = 9;
|
|
||||||
double minSize = 5;
|
|
||||||
|
|
||||||
double pos = (1 - (lvl / count));
|
|
||||||
|
|
||||||
QList<QPair<double, double>> snakeGradientSize {
|
|
||||||
{1, 4},
|
|
||||||
{0.99, 7},
|
|
||||||
{0.8, 5},
|
|
||||||
{0.6, 6},
|
|
||||||
{0.0, 3}
|
|
||||||
};
|
|
||||||
|
|
||||||
double local = 0;
|
|
||||||
int index = 0;
|
|
||||||
|
|
||||||
while (index + 1 < snakeGradientSize.size()
|
|
||||||
&& pos <= snakeGradientSize[index].first) {
|
|
||||||
|
|
||||||
maxSize = snakeGradientSize[index].second;
|
|
||||||
minSize = snakeGradientSize[index + 1].second;
|
|
||||||
|
|
||||||
auto range = snakeGradientSize[index].first -
|
|
||||||
snakeGradientSize[index + 1].first;
|
|
||||||
|
|
||||||
local = ( range - (snakeGradientSize[index].first - pos)) /
|
|
||||||
range;
|
|
||||||
|
|
||||||
index++;
|
|
||||||
}
|
|
||||||
|
|
||||||
return local * (maxSize - minSize) + minSize;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Snake::changeCountObjects(int count) {
|
|
||||||
if (count > 0) {
|
|
||||||
double margin = 60.0 / count;
|
|
||||||
for ( int i = 0; i < count; ++i ) {
|
|
||||||
|
|
||||||
auto size = sizeByLvl(i, count);
|
|
||||||
auto obj = new Head(margin * (count - i),
|
|
||||||
50, size , size,
|
|
||||||
this->speed);
|
|
||||||
|
|
||||||
obj->setY(50 + obj->h() / 2);
|
|
||||||
|
|
||||||
items.push_back(obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
for ( int i = count; i < 0; ++i ) {
|
|
||||||
auto obj = items.first();
|
|
||||||
items.removeFirst();
|
|
||||||
delete obj;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
QMap<int, GuiObject*> Snake::init(int size, double *speed) {
|
|
||||||
|
|
||||||
QMap<int, GuiObject*> res;
|
|
||||||
|
|
||||||
if (size <= 0) {
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
this->speed = speed;
|
|
||||||
|
|
||||||
changeCountObjects(size - items.size());
|
|
||||||
|
|
||||||
for (auto i : items) {
|
|
||||||
res[i->guiId()] = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
dead = false;
|
|
||||||
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Snake::isInited() const {
|
|
||||||
return items.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
void Snake::clearItems() {
|
|
||||||
for (auto i : items) {
|
|
||||||
delete i;
|
|
||||||
}
|
|
||||||
items.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
void Snake::resetPosotion() {
|
|
||||||
double margin = 60.0 / items.size();
|
|
||||||
|
|
||||||
for ( int i = 0; i < items.size(); ++i ) {
|
|
||||||
items[i]->setX(margin * (items.size() - i));
|
|
||||||
items[i]->setY(50 + items[i]->h() / 2);
|
|
||||||
items[i]->setAngle(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Snake::kill() {
|
|
||||||
dead = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Snake::isDead() const {
|
|
||||||
return dead;
|
|
||||||
}
|
|
||||||
|
|
||||||
Snake::~Snake() {
|
|
||||||
clearItems();
|
|
||||||
}
|
|
||||||
|
|
||||||
void Snake::clear() {
|
|
||||||
clearItems();
|
|
||||||
}
|
|
||||||
|
|
||||||
void Snake::reverse() {
|
|
||||||
if (isClick) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
isClick = true;
|
|
||||||
countClick++;
|
|
||||||
}
|
|
@ -1,52 +0,0 @@
|
|||||||
#ifndef SNAKE_H
|
|
||||||
#define SNAKE_H
|
|
||||||
|
|
||||||
#define SPEEDSNAKE 10
|
|
||||||
|
|
||||||
#include <QVector>
|
|
||||||
#include "head.h"
|
|
||||||
#include "baseclass.h"
|
|
||||||
|
|
||||||
class GuiObject;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Snake : public BaseClass
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
double rataticonDistance = 1;
|
|
||||||
QVector<Head*> items;
|
|
||||||
double *speed = nullptr;
|
|
||||||
bool isClick = false;
|
|
||||||
int countClick = 0;
|
|
||||||
bool dead = false;
|
|
||||||
double sizeByLvl(double lvl, int count) const;
|
|
||||||
void changeCountObjects(int count);
|
|
||||||
|
|
||||||
double checDistance(int i);
|
|
||||||
void clearItems();
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
|
||||||
Snake();
|
|
||||||
~Snake() override;
|
|
||||||
void clear();
|
|
||||||
void resetPosotion();
|
|
||||||
|
|
||||||
void kill();
|
|
||||||
bool isDead() const;
|
|
||||||
|
|
||||||
void reverse();
|
|
||||||
void render() override;
|
|
||||||
QMap<int, GuiObject *> init(int size, double *speed);
|
|
||||||
bool isInited() const;
|
|
||||||
const QVector<Head*>& getItems() const;
|
|
||||||
double getMovedLong() const;
|
|
||||||
double getRataticonDistance() const;
|
|
||||||
void setRataticonDistance(double value);
|
|
||||||
int getDeadTimer() const;
|
|
||||||
void setDeadTimer(int value);
|
|
||||||
void unPause();
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // SNAKE_H
|
|
@ -1,173 +0,0 @@
|
|||||||
#include "background.h"
|
|
||||||
#include "world.h"
|
|
||||||
|
|
||||||
#include <QMap>
|
|
||||||
#include "guiobject.h"
|
|
||||||
#include "guiobjectfactory.h"
|
|
||||||
#include <QDateTime>
|
|
||||||
#include <QDebug>
|
|
||||||
|
|
||||||
World::World() {
|
|
||||||
currentLong = 0;
|
|
||||||
endLong = 0;
|
|
||||||
background = "";
|
|
||||||
}
|
|
||||||
|
|
||||||
void World::clear() {
|
|
||||||
clearItems();
|
|
||||||
snake.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
double World::getCurrentLong() const {
|
|
||||||
return currentLong;
|
|
||||||
}
|
|
||||||
|
|
||||||
QMultiMap<QString, ItemWorld *> World::getItems() const
|
|
||||||
{
|
|
||||||
return items;
|
|
||||||
}
|
|
||||||
|
|
||||||
void World::unPause() {
|
|
||||||
time = QDateTime::currentMSecsSinceEpoch();
|
|
||||||
snake.unPause();
|
|
||||||
}
|
|
||||||
|
|
||||||
void World::clearItems() {
|
|
||||||
for (auto i : items) {
|
|
||||||
delete i;
|
|
||||||
}
|
|
||||||
oldRules.clear();
|
|
||||||
items.clear();
|
|
||||||
spead = 0;
|
|
||||||
d_spead = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void World::changeCountObjects(const QString &name, int count) {
|
|
||||||
|
|
||||||
if (count > 0) {
|
|
||||||
|
|
||||||
for ( int i = 0; i < count; ++i ) {
|
|
||||||
auto obj = GuiObjectFactory::generate(name);
|
|
||||||
|
|
||||||
if (!obj) {
|
|
||||||
qWarning() <<"object not created line:" << Q_FUNC_INFO;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
items.insertMulti(name, obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
for ( int i = count; i < 0; ++i ) {
|
|
||||||
auto obj = items.value(name);
|
|
||||||
if (1 != items.remove(name, obj)) {
|
|
||||||
qWarning() << "World::changeCountObjects error delete object!";
|
|
||||||
}
|
|
||||||
delete obj;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
QMap<int, GuiObject *> World::init(WorldRules rules) {
|
|
||||||
|
|
||||||
QMap<int, GuiObject*> res;
|
|
||||||
|
|
||||||
// rules["BackGround"] = 1;
|
|
||||||
|
|
||||||
currentLong = -1;
|
|
||||||
for (auto i = rules.begin(); i != rules.end(); ++i) {
|
|
||||||
if (i.key() == "Long") {
|
|
||||||
endLong = rules["Long"];
|
|
||||||
currentLong = 0;
|
|
||||||
}
|
|
||||||
else if (i.key() == "Spead") {
|
|
||||||
d_spead = rules["Spead"];
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
changeCountObjects(i.key(), i.value() - oldRules.value(i.key()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
auto snakeItems = snake.init(20, &spead);
|
|
||||||
|
|
||||||
for (auto i = snakeItems.begin(); i != snakeItems.end(); ++i) {
|
|
||||||
res.insert(i.key(), i.value());
|
|
||||||
}
|
|
||||||
|
|
||||||
for (auto i : items) {
|
|
||||||
res[i->guiId()] = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
oldRules = rules;
|
|
||||||
time = QDateTime::currentMSecsSinceEpoch();
|
|
||||||
defiat = false;
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
World::~World() {
|
|
||||||
clearItems();
|
|
||||||
}
|
|
||||||
|
|
||||||
void World::render() {
|
|
||||||
|
|
||||||
qint64 tempTime = QDateTime::currentMSecsSinceEpoch() - time;
|
|
||||||
time = QDateTime::currentMSecsSinceEpoch();
|
|
||||||
double dx = spead / 1000 * tempTime;
|
|
||||||
|
|
||||||
spead -= 0.0310 * tempTime;
|
|
||||||
|
|
||||||
if (spead < 0)
|
|
||||||
spead = 0;
|
|
||||||
|
|
||||||
snake.render();
|
|
||||||
auto rig = snake.getItems().first();
|
|
||||||
|
|
||||||
for (auto i = items.begin(); i != items.end(); ++i) {
|
|
||||||
defiat |= (*i)->move(rig, dx);
|
|
||||||
(*i)->render();
|
|
||||||
}
|
|
||||||
|
|
||||||
defiat |= (rig->y()< 0 || rig->y() > 100);
|
|
||||||
|
|
||||||
if (!snake.isDead() && defiat) {
|
|
||||||
snake.kill();
|
|
||||||
}
|
|
||||||
|
|
||||||
currentLong += dx;
|
|
||||||
}
|
|
||||||
|
|
||||||
void World::resetPosition() {
|
|
||||||
for (auto i : items) {
|
|
||||||
i->reset();
|
|
||||||
}
|
|
||||||
spead = 0;
|
|
||||||
|
|
||||||
snake.resetPosotion();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool World::move() {
|
|
||||||
return isEnd();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool World::isEnd() {
|
|
||||||
return currentLong >= endLong;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool World::isDefiat() const {
|
|
||||||
return defiat && !static_cast<bool>(spead);
|
|
||||||
}
|
|
||||||
|
|
||||||
WorldRules World::currentRules() const {
|
|
||||||
return oldRules;
|
|
||||||
}
|
|
||||||
|
|
||||||
void World::reversClick() {
|
|
||||||
if (snake.isDead()) {
|
|
||||||
spead = 0;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
snake.reverse();
|
|
||||||
spead += d_spead;
|
|
||||||
}
|
|
@ -1,47 +0,0 @@
|
|||||||
#ifndef WORLD_H
|
|
||||||
#define WORLD_H
|
|
||||||
|
|
||||||
#define SPEEDWORLD 10
|
|
||||||
|
|
||||||
#include <QVector>
|
|
||||||
#include "itemworld.h"
|
|
||||||
#include "baseclass.h"
|
|
||||||
#include "snakeutils.h"
|
|
||||||
#include "snake.h"
|
|
||||||
|
|
||||||
class World : public BaseClass
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
|
|
||||||
Snake snake;
|
|
||||||
QMultiMap<QString, ItemWorld*> items;
|
|
||||||
double currentLong = 0;
|
|
||||||
int endLong;
|
|
||||||
double spead = 0, d_spead = 0;
|
|
||||||
QString background;
|
|
||||||
qint64 time;
|
|
||||||
bool defiat = false;
|
|
||||||
WorldRules oldRules;
|
|
||||||
|
|
||||||
void clearItems();
|
|
||||||
|
|
||||||
void changeCountObjects(const QString &name, int count);
|
|
||||||
|
|
||||||
public:
|
|
||||||
World();
|
|
||||||
void clear();
|
|
||||||
QMap<int, GuiObject*> init(WorldRules rules);
|
|
||||||
~World() override;
|
|
||||||
void render() override;
|
|
||||||
void resetPosition();
|
|
||||||
bool move();
|
|
||||||
bool isEnd();
|
|
||||||
bool isDefiat() const;
|
|
||||||
WorldRules currentRules() const;
|
|
||||||
void reversClick();
|
|
||||||
double getCurrentLong() const;
|
|
||||||
QMultiMap<QString, ItemWorld *> getItems() const;
|
|
||||||
void unPause();
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // WORLD_H
|
|
@ -1,29 +0,0 @@
|
|||||||
import QtQuick 2.9
|
|
||||||
import QtQuick.Controls.Material 2.0
|
|
||||||
import QtQuick.Controls 2.3
|
|
||||||
import QtQuick.Layouts 1.3
|
|
||||||
|
|
||||||
Page {
|
|
||||||
|
|
||||||
signal close();
|
|
||||||
|
|
||||||
title: "Page"
|
|
||||||
header: Rectangle {
|
|
||||||
height: parent.height * 0.1
|
|
||||||
color: "#cccccc"
|
|
||||||
Label {
|
|
||||||
id: title
|
|
||||||
text: qsTr("About")
|
|
||||||
font.pointSize: 13
|
|
||||||
wrapMode: Text.WordWrap
|
|
||||||
verticalAlignment: Text.AlignVCenter
|
|
||||||
horizontalAlignment: Text.AlignHCenter
|
|
||||||
anchors.fill: parent;
|
|
||||||
anchors.margins: 5
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
contentItem: AboutPage{
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,72 +0,0 @@
|
|||||||
import QtQuick 2.9
|
|
||||||
import QtQuick.Controls 2.3
|
|
||||||
import QtQuick.Controls.Material 2.0
|
|
||||||
import QtQuick.Layouts 1.3
|
|
||||||
|
|
||||||
Item {
|
|
||||||
clip: true
|
|
||||||
ColumnLayout {
|
|
||||||
id: columnLayout
|
|
||||||
anchors.fill: parent
|
|
||||||
spacing: 10
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
Layout.preferredHeight: parent.width / 4
|
|
||||||
Layout.preferredWidth: parent.width / 4
|
|
||||||
Layout.alignment: Qt.AlignHCenter | Qt.AlignTop
|
|
||||||
color: "#00000000"
|
|
||||||
Image {
|
|
||||||
id: aboutLogo
|
|
||||||
fillMode: Image.PreserveAspectFit
|
|
||||||
|
|
||||||
source: "qrc:/logo/logo"
|
|
||||||
anchors.margins: 10
|
|
||||||
anchors.fill: parent
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Flickable {
|
|
||||||
id: flickable
|
|
||||||
clip: true
|
|
||||||
flickableDirection: Flickable.VerticalFlick
|
|
||||||
|
|
||||||
Layout.preferredHeight: parent.height - parent.height / 2.8
|
|
||||||
|
|
||||||
|
|
||||||
TextArea.flickable: TextArea {
|
|
||||||
id: textArea
|
|
||||||
textFormat: Qt.RichText
|
|
||||||
wrapMode: TextArea.Wrap
|
|
||||||
readOnly: true
|
|
||||||
persistentSelection: true
|
|
||||||
|
|
||||||
leftPadding: 6
|
|
||||||
rightPadding: 6
|
|
||||||
topPadding: 0
|
|
||||||
bottomPadding: 0
|
|
||||||
background: null
|
|
||||||
|
|
||||||
text: qsTr("Product of QuasarrApp");
|
|
||||||
font.family: "Verdana"
|
|
||||||
horizontalAlignment: Text.AlignHCenter
|
|
||||||
verticalAlignment: Text.AlignTop
|
|
||||||
|
|
||||||
onLinkActivated: Qt.openUrlExternally(link)
|
|
||||||
}
|
|
||||||
|
|
||||||
ScrollBar.vertical: ScrollBar { }
|
|
||||||
Layout.fillWidth: true
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/*##^## Designer {
|
|
||||||
D{i:0;autoSize:true;height:480;width:640}
|
|
||||||
}
|
|
||||||
##^##*/
|
|
@ -1,71 +0,0 @@
|
|||||||
import QtQuick 2.11
|
|
||||||
import QtQuick.Controls 2.3
|
|
||||||
import QtQuick.Controls.Material 2.0
|
|
||||||
import QtQuick.Layouts 1.3
|
|
||||||
import QtGraphicalEffects 1.12
|
|
||||||
|
|
||||||
Dialog {
|
|
||||||
id : basePopup
|
|
||||||
width: 200
|
|
||||||
height: 100
|
|
||||||
x: 0
|
|
||||||
y: 0
|
|
||||||
|
|
||||||
transformOrigin: Item.Center
|
|
||||||
|
|
||||||
property bool autoClose: true
|
|
||||||
property bool clickClose: true
|
|
||||||
|
|
||||||
property int closeInterval: 15000;
|
|
||||||
property int margin : 0
|
|
||||||
property color backgroundColor: Material.background
|
|
||||||
|
|
||||||
background: Item {
|
|
||||||
id: bacground
|
|
||||||
|
|
||||||
Rectangle{
|
|
||||||
anchors.fill: parent
|
|
||||||
id: backCorner
|
|
||||||
color: backgroundColor
|
|
||||||
radius: metrix.mm
|
|
||||||
}
|
|
||||||
|
|
||||||
DropShadow {
|
|
||||||
anchors.fill: parent
|
|
||||||
source: backCorner
|
|
||||||
color: "#80000000"
|
|
||||||
verticalOffset: 10
|
|
||||||
samples: 30
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function _show() {
|
|
||||||
|
|
||||||
if (autoClose) {
|
|
||||||
timerAutoClose.start();
|
|
||||||
}
|
|
||||||
|
|
||||||
open();
|
|
||||||
}
|
|
||||||
|
|
||||||
Timer {
|
|
||||||
id: timerAutoClose;
|
|
||||||
running: false;
|
|
||||||
repeat: false;
|
|
||||||
interval: closeInterval;
|
|
||||||
|
|
||||||
onTriggered: {
|
|
||||||
close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
onClosed: {
|
|
||||||
if (autoClose)
|
|
||||||
opacity = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
closePolicy: (!clickClose || autoClose)? Popup.NoAutoClose: Popup.CloseOnReleaseOutside
|
|
||||||
|
|
||||||
onRejected: close()
|
|
||||||
|
|
||||||
}
|
|
@ -1,32 +0,0 @@
|
|||||||
import QtQuick 2.12
|
|
||||||
import QtQuick.Controls.Material 2.12
|
|
||||||
import QtQuick.Controls 2.12
|
|
||||||
import QtQuick.Layouts 1.3
|
|
||||||
import QtGraphicalEffects 1.12
|
|
||||||
|
|
||||||
Frame {
|
|
||||||
id: frameVew
|
|
||||||
property bool translucent: true
|
|
||||||
property bool showBorder: true
|
|
||||||
|
|
||||||
function _backGroundColor() {
|
|
||||||
if (translucent) {
|
|
||||||
if (Material.theme == Material.Dark) {
|
|
||||||
return "#50000000";
|
|
||||||
}
|
|
||||||
|
|
||||||
return "#50ffffff";
|
|
||||||
}
|
|
||||||
|
|
||||||
return Material.background;
|
|
||||||
}
|
|
||||||
|
|
||||||
background: Rectangle {
|
|
||||||
color: _backGroundColor()
|
|
||||||
border.color: (Material.theme == Material.Dark)? "#000000": "#cfcfcf"
|
|
||||||
border.width: (showBorder)? 1 : 0
|
|
||||||
radius: metrix.mm
|
|
||||||
}
|
|
||||||
|
|
||||||
padding: 3 * metrix.mm
|
|
||||||
}
|
|
@ -1,38 +0,0 @@
|
|||||||
import QtQuick 2.9
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
id: graphicItem
|
|
||||||
property var model: null
|
|
||||||
property real angle: (model) ? model.angle : 0;
|
|
||||||
property string texture: (model) ? model.texture : "";
|
|
||||||
property int guiId: (model) ? model.guiId : -1;
|
|
||||||
|
|
||||||
z:-1
|
|
||||||
property double devX: width / 2
|
|
||||||
property double devY: height / 2
|
|
||||||
|
|
||||||
Image {
|
|
||||||
id: name
|
|
||||||
visible: texture.length
|
|
||||||
source: texture
|
|
||||||
|
|
||||||
anchors.fill: parent;
|
|
||||||
}
|
|
||||||
|
|
||||||
color: (model) ? model.color : "#11ff32";
|
|
||||||
|
|
||||||
width: (model) ? model.w * metrix.gamePt: 0;
|
|
||||||
height: (model) ? model.h * metrix.gamePt: 0;
|
|
||||||
|
|
||||||
x: (model) ? model.x * metrix.gamePt - devX: 0;
|
|
||||||
y: (model) ? model.y * metrix.gamePt - devY: 0;
|
|
||||||
|
|
||||||
radius: (model) ? model.radius * metrix.gamePt : 0;
|
|
||||||
|
|
||||||
transform: Rotation {
|
|
||||||
origin.x: devX;
|
|
||||||
origin.y: devY;
|
|
||||||
angle: graphicItem.angle;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,83 +0,0 @@
|
|||||||
import QtQuick 2.12
|
|
||||||
import QtQuick.Controls.Material 2.12
|
|
||||||
import QtQuick.Controls 2.12
|
|
||||||
import QtQuick.Layouts 1.3
|
|
||||||
import QtGraphicalEffects 1.12
|
|
||||||
|
|
||||||
Item {
|
|
||||||
id: imageView
|
|
||||||
property int size: 50
|
|
||||||
property double ratio: 1
|
|
||||||
property string drawItem: ""
|
|
||||||
property bool hovered: false
|
|
||||||
property bool hold: false
|
|
||||||
|
|
||||||
signal clicked();
|
|
||||||
|
|
||||||
width: size * ratio
|
|
||||||
height: size
|
|
||||||
|
|
||||||
Image {
|
|
||||||
id: img
|
|
||||||
fillMode: Image.PreserveAspectFit
|
|
||||||
source: drawItem
|
|
||||||
sourceSize: Qt.size(width, height)
|
|
||||||
smooth: true
|
|
||||||
visible: false
|
|
||||||
anchors.fill: parent
|
|
||||||
}
|
|
||||||
|
|
||||||
DropShadow {
|
|
||||||
anchors.fill: img
|
|
||||||
horizontalOffset: (hold)? 20: (hovered)? 10: 5
|
|
||||||
verticalOffset: (hold)? 20: (hovered)? 10: 5
|
|
||||||
radius: 8.0
|
|
||||||
samples: 17
|
|
||||||
Behavior on horizontalOffset {
|
|
||||||
|
|
||||||
ColorAnimation {
|
|
||||||
duration: 200
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Behavior on verticalOffset {
|
|
||||||
|
|
||||||
ColorAnimation {
|
|
||||||
duration: 200
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Behavior on color {
|
|
||||||
|
|
||||||
ColorAnimation {
|
|
||||||
duration: 200
|
|
||||||
}
|
|
||||||
}
|
|
||||||
color: (hold)? "#80000000": (hovered)? "#60000000": "#40000000"
|
|
||||||
source: img
|
|
||||||
}
|
|
||||||
|
|
||||||
MouseArea {
|
|
||||||
anchors.fill: parent
|
|
||||||
hoverEnabled: true
|
|
||||||
|
|
||||||
onEntered: {
|
|
||||||
parent.hovered = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
onExited: {
|
|
||||||
parent.hovered = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
onReleased: {
|
|
||||||
parent.hold = false;
|
|
||||||
imageView.clicked();
|
|
||||||
}
|
|
||||||
|
|
||||||
onPressed: {
|
|
||||||
parent.hold = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,13 +0,0 @@
|
|||||||
import QtQuick 2.0
|
|
||||||
|
|
||||||
LeftSideBar {
|
|
||||||
resizeHeight: true;
|
|
||||||
closedHeight: closedWidth;
|
|
||||||
openHeight: 10 * metrix.pt;
|
|
||||||
openWidth: 10 * metrix.pt;
|
|
||||||
anchors.left: parent.left;
|
|
||||||
anchors.top: undefined;
|
|
||||||
anchors.bottom: undefined;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -1,35 +0,0 @@
|
|||||||
import QtQuick 2.12
|
|
||||||
import QtQuick.Controls.Material 2.12
|
|
||||||
import QtQuick.Controls 2.12
|
|
||||||
import QtQuick.Layouts 1.3
|
|
||||||
|
|
||||||
SideBar {
|
|
||||||
id: leftSideBar
|
|
||||||
anchors.left: parent.left;
|
|
||||||
anchors.top: parent.top;
|
|
||||||
anchors.bottom: parent.bottom;
|
|
||||||
closedWidth: closeButton.width + padding * 2;
|
|
||||||
openWidth: 10 * metrix.pt;
|
|
||||||
resizeHeight: false;
|
|
||||||
|
|
||||||
header:
|
|
||||||
RowLayout {
|
|
||||||
|
|
||||||
Button {
|
|
||||||
id: closeButton
|
|
||||||
text: leftSideBar.isOpened? "<" : ">"
|
|
||||||
|
|
||||||
Layout.preferredHeight: metrix.controlPtMaterial;
|
|
||||||
Layout.preferredWidth: metrix.controlPtMaterial;
|
|
||||||
|
|
||||||
Layout.alignment: Qt.AlignRight | Qt.AlignTop
|
|
||||||
onClicked: {
|
|
||||||
if (leftSideBar.isOpened)
|
|
||||||
leftSideBar.hide();
|
|
||||||
else
|
|
||||||
leftSideBar.show();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,301 +0,0 @@
|
|||||||
import QtQuick 2.12
|
|
||||||
import QtQuick.Controls.Material 2.12
|
|
||||||
import QtQuick.Controls 2.12
|
|
||||||
import QtQuick.Layouts 1.3
|
|
||||||
import QtGraphicalEffects 1.12
|
|
||||||
|
|
||||||
Item {
|
|
||||||
id: element
|
|
||||||
|
|
||||||
property int loginStatus : 0
|
|
||||||
|
|
||||||
readonly property int currentView: tabBar.currentIndex
|
|
||||||
readonly property var resultEnum: [
|
|
||||||
qsTr("Success"), // 0
|
|
||||||
qsTr("Password must be at least 8 characters"), // 1
|
|
||||||
qsTr("Name must be at least 1 characters"), // 2
|
|
||||||
qsTr("Passwords must match"), // 3
|
|
||||||
|
|
||||||
qsTr("The letter must match the pattern 'X@xxxx.xxx'") // 4
|
|
||||||
|
|
||||||
]
|
|
||||||
|
|
||||||
signal sigNewUser(var gmail, var password);
|
|
||||||
signal sigLogin(var gmail, var password);
|
|
||||||
signal toOffline();
|
|
||||||
|
|
||||||
|
|
||||||
function _checkLogin() {
|
|
||||||
const pass = loginPass.text;
|
|
||||||
const email = loginEmail.text;
|
|
||||||
|
|
||||||
if (pass.length < 8) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (email.search(/[a-z\-A-Z0-9_]+@[a-z\-A-Z0-9_]+\.[a-z\-A-Z0-9_]+/) < 0) {
|
|
||||||
return 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
function _checkRegister () {
|
|
||||||
const pass = registerPassword.text;
|
|
||||||
const pass2 = registerPassword2.text;
|
|
||||||
|
|
||||||
const email = registerEmail.text;
|
|
||||||
|
|
||||||
if (pass.length < 8) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pass !== pass2) {
|
|
||||||
return 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (email.search(/[a-z\-A-Z0-9_]+@[a-z\-A-Z0-9_]+\.[a-z\-A-Z0-9_]+/) < 0) {
|
|
||||||
return 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
function checkData(isregisterForm) {
|
|
||||||
if (isregisterForm) {
|
|
||||||
return _checkRegister();
|
|
||||||
}
|
|
||||||
|
|
||||||
return _checkLogin();
|
|
||||||
}
|
|
||||||
|
|
||||||
SwipeView {
|
|
||||||
id: swipeView
|
|
||||||
anchors.bottom: bottons.top
|
|
||||||
anchors.top: tabBar.bottom
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.right: parent.right
|
|
||||||
|
|
||||||
clip: true
|
|
||||||
|
|
||||||
currentIndex: tabBar.currentIndex
|
|
||||||
|
|
||||||
Item {
|
|
||||||
id: loginPage
|
|
||||||
|
|
||||||
GridLayout {
|
|
||||||
id: columnLayout
|
|
||||||
anchors.fill: parent
|
|
||||||
columns: 2
|
|
||||||
rows: 2
|
|
||||||
Label {
|
|
||||||
text: qsTr("Email")
|
|
||||||
}
|
|
||||||
|
|
||||||
TextField {
|
|
||||||
id: loginEmail
|
|
||||||
placeholderText: "Enter Your Email"
|
|
||||||
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
|
|
||||||
Layout.fillWidth: true
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Label {
|
|
||||||
text: qsTr("Passsword")
|
|
||||||
}
|
|
||||||
TextField {
|
|
||||||
id: loginPass
|
|
||||||
placeholderText: qsTr("Enter Your passsword")
|
|
||||||
|
|
||||||
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
|
|
||||||
|
|
||||||
echoMode: TextInput.Password
|
|
||||||
cursorVisible: true
|
|
||||||
Layout.fillWidth: true
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Item {
|
|
||||||
id: rigisterPage
|
|
||||||
GridLayout {
|
|
||||||
|
|
||||||
anchors.fill: parent
|
|
||||||
|
|
||||||
columns: 2
|
|
||||||
rows: 3
|
|
||||||
|
|
||||||
Label {
|
|
||||||
text: qsTr("Email")
|
|
||||||
}
|
|
||||||
TextField {
|
|
||||||
id: registerEmail;
|
|
||||||
placeholderText: qsTr("Enter Your Email")
|
|
||||||
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
|
|
||||||
Layout.fillWidth: true
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
Label {
|
|
||||||
text: qsTr("Password")
|
|
||||||
}
|
|
||||||
TextField {
|
|
||||||
id: registerPassword;
|
|
||||||
|
|
||||||
placeholderText: qsTr("Enter Your passsword")
|
|
||||||
|
|
||||||
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
|
|
||||||
Layout.fillWidth: true
|
|
||||||
echoMode: TextInput.Password
|
|
||||||
cursorVisible: true
|
|
||||||
}
|
|
||||||
|
|
||||||
Label {
|
|
||||||
text: qsTr("Repeat password")
|
|
||||||
}
|
|
||||||
TextField {
|
|
||||||
id: registerPassword2;
|
|
||||||
|
|
||||||
placeholderText: qsTr("Enter Your passsword again")
|
|
||||||
|
|
||||||
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
|
|
||||||
Layout.fillWidth: true
|
|
||||||
echoMode: TextInput.Password
|
|
||||||
cursorVisible: true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
TabBar {
|
|
||||||
id: tabBar
|
|
||||||
anchors.top: parent.top
|
|
||||||
anchors.topMargin: 0
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.leftMargin: 0
|
|
||||||
anchors.right: parent.right
|
|
||||||
anchors.rightMargin: 0
|
|
||||||
|
|
||||||
TabButton {
|
|
||||||
id: login
|
|
||||||
text: qsTr("Sign in")
|
|
||||||
checkable: false
|
|
||||||
}
|
|
||||||
|
|
||||||
TabButton {
|
|
||||||
id: register
|
|
||||||
text: qsTr("Sign Up")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
RowLayout {
|
|
||||||
id : bottons
|
|
||||||
Button {
|
|
||||||
text: qsTr("Cancel")
|
|
||||||
|
|
||||||
onClicked: {
|
|
||||||
Qt.quit()
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
Item {
|
|
||||||
Layout.fillWidth: true
|
|
||||||
}
|
|
||||||
|
|
||||||
Button {
|
|
||||||
text: tabBar.currentItem.text
|
|
||||||
|
|
||||||
onClicked: {
|
|
||||||
|
|
||||||
const messageIndex = checkData(tabBar.currentIndex);
|
|
||||||
if (messageIndex === 0) {
|
|
||||||
|
|
||||||
if (tabBar.currentIndex) {
|
|
||||||
// register request
|
|
||||||
sigNewUser(registerEmail.text, registerPassword);
|
|
||||||
} else {
|
|
||||||
//login request
|
|
||||||
sigLogin(loginEmail.text, loginPass.text);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
|
|
||||||
notificationService.setNotify(qsTr("Error"),
|
|
||||||
resultEnum[messageIndex],
|
|
||||||
"",
|
|
||||||
2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
anchors.bottom: parent.bottom
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.right: parent.right
|
|
||||||
}
|
|
||||||
|
|
||||||
onLoginStatusChanged: {
|
|
||||||
if (loginStatus === 2)
|
|
||||||
busy._show();
|
|
||||||
else {
|
|
||||||
busy.close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
PagePopUp {
|
|
||||||
id: busy
|
|
||||||
modal: true
|
|
||||||
autoClose: false;
|
|
||||||
clickClose: false;
|
|
||||||
BusyIndicator {
|
|
||||||
running: true
|
|
||||||
anchors.fill: parent
|
|
||||||
}
|
|
||||||
height: 2 * metrix.controlPtMaterial
|
|
||||||
width: height
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
FrameView {
|
|
||||||
visible: loginStatus === 4
|
|
||||||
anchors.fill: parent
|
|
||||||
translucent: false
|
|
||||||
showBorder: false
|
|
||||||
ColumnLayout {
|
|
||||||
anchors.fill: parent
|
|
||||||
|
|
||||||
Label {
|
|
||||||
text: qsTr("You need connect to server");
|
|
||||||
font.pixelSize: metrix.controlPtMaterial;
|
|
||||||
wrapMode: Text.WordWrap
|
|
||||||
horizontalAlignment: Text.AlignHCenter
|
|
||||||
verticalAlignment: Text.AlignVCenter
|
|
||||||
|
|
||||||
Layout.fillHeight: true
|
|
||||||
Layout.fillWidth: true
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
Button {
|
|
||||||
text: qsTr("Use OfflineMode");
|
|
||||||
Layout.alignment: Qt.AlignHCenter
|
|
||||||
|
|
||||||
onClicked: {
|
|
||||||
toOffline();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*##^## Designer {
|
|
||||||
D{i:0;autoSize:true;height:480;width:640}D{i:3;anchors_height:100;anchors_width:100;anchors_x:228;anchors_y:63}
|
|
||||||
D{i:1;anchors_height:200;anchors_width:200;anchors_x:205;anchors_y:53}D{i:11;anchors_width:240;anchors_x:226;anchors_y:21}
|
|
||||||
}
|
|
||||||
##^##*/
|
|
@ -1,196 +0,0 @@
|
|||||||
import QtQuick 2.9
|
|
||||||
import QtQuick.Controls.Material 2.0
|
|
||||||
import QtQuick.Controls 2.3
|
|
||||||
import QtQuick.Layouts 1.3
|
|
||||||
|
|
||||||
Item {
|
|
||||||
id: item1
|
|
||||||
property var model: null
|
|
||||||
readonly property int onlineStatus: (model)? model.onlineStatus: false
|
|
||||||
|
|
||||||
visible: true
|
|
||||||
z: 1
|
|
||||||
|
|
||||||
signal playGame();
|
|
||||||
|
|
||||||
onOnlineStatusChanged: {
|
|
||||||
if (onlineStatus && onlineStatus !== 5) {
|
|
||||||
loginPopUp._show();
|
|
||||||
} else {
|
|
||||||
loginPopUp.close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
LeftSideBar {
|
|
||||||
id: userViewSideBar
|
|
||||||
openWidth: 7 * metrix.pt;
|
|
||||||
|
|
||||||
openHeight: columnLayout.height
|
|
||||||
source: UserView {
|
|
||||||
|
|
||||||
anchors.fill: parent;
|
|
||||||
model: (item1.model)? item1.model.userViewModel: null
|
|
||||||
visible: userViewSideBar.openFinished
|
|
||||||
onTryConnect: {
|
|
||||||
if (item1.model)
|
|
||||||
item1.model.tryConnect();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
GridLayout {
|
|
||||||
id: columnLayout
|
|
||||||
anchors.top: parent.top
|
|
||||||
anchors.bottom: parent.bottom
|
|
||||||
anchors.left: userViewSideBar.right
|
|
||||||
anchors.right: parent.right
|
|
||||||
|
|
||||||
anchors.leftMargin: 0
|
|
||||||
anchors.rightMargin: 0
|
|
||||||
anchors.bottomMargin: 0
|
|
||||||
anchors.topMargin: 0
|
|
||||||
|
|
||||||
columns: 3
|
|
||||||
rows: 2
|
|
||||||
|
|
||||||
|
|
||||||
transformOrigin: Item.Center
|
|
||||||
|
|
||||||
|
|
||||||
MainMenuButton {
|
|
||||||
id: play
|
|
||||||
text: qsTr("Play game")
|
|
||||||
|
|
||||||
onClicked: {
|
|
||||||
playGame();
|
|
||||||
if (model)
|
|
||||||
model.newGame();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
MainMenuButton {
|
|
||||||
id: store
|
|
||||||
text: qsTr("Store")
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
MainMenuButton {
|
|
||||||
id: invitar
|
|
||||||
text: qsTr("My Items")
|
|
||||||
}
|
|
||||||
|
|
||||||
MainMenuButton {
|
|
||||||
id: freands
|
|
||||||
text: qsTr("My friends")
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
MainMenuButton {
|
|
||||||
id: settings
|
|
||||||
text: qsTr("My Settings")
|
|
||||||
|
|
||||||
onClicked: {
|
|
||||||
settingsPopUp._show();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
MainMenuButton {
|
|
||||||
id: exit
|
|
||||||
text: qsTr("Exit")
|
|
||||||
|
|
||||||
onClicked: {
|
|
||||||
Qt.quit();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
PagePopUp {
|
|
||||||
id: about;
|
|
||||||
width: parent.width / 2
|
|
||||||
height: parent.height / 2;
|
|
||||||
|
|
||||||
source: About {}
|
|
||||||
}
|
|
||||||
|
|
||||||
PagePopUp {
|
|
||||||
id: settingsPopUp
|
|
||||||
source: SettingsView {
|
|
||||||
id: settingsView
|
|
||||||
model: item1.model ? item1.model.userSettingsModel: null
|
|
||||||
}
|
|
||||||
|
|
||||||
standardButtons: Dialog.Save | Dialog.Cancel | Dialog.RestoreDefaults
|
|
||||||
modal: false;
|
|
||||||
autoClose: false
|
|
||||||
clickClose: true
|
|
||||||
width: 12 * metrix.controlPtMaterial
|
|
||||||
height: 8 * metrix.controlPtMaterial;
|
|
||||||
|
|
||||||
onAccepted: {
|
|
||||||
settingsView.save();
|
|
||||||
}
|
|
||||||
|
|
||||||
onReset: {
|
|
||||||
settingsView.reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
onOpened: {
|
|
||||||
settingsView.update();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
PagePopUp {
|
|
||||||
id: loginPopUp
|
|
||||||
source: LoginView {
|
|
||||||
id: loginView
|
|
||||||
loginStatus: onlineStatus
|
|
||||||
|
|
||||||
onSigLogin: {
|
|
||||||
if (!model) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
model.login(gmail, password);
|
|
||||||
}
|
|
||||||
onSigNewUser: {
|
|
||||||
if (!model) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
model.registerNewUser(gmail, password);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
onToOffline: {
|
|
||||||
if (!model) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
model.playOffline();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
visible: true;
|
|
||||||
modal: true;
|
|
||||||
autoClose: false
|
|
||||||
clickClose: false
|
|
||||||
width: 12 * metrix.controlPtMaterial
|
|
||||||
height: ((loginView.currentView)? 9 : 7) * metrix.controlPtMaterial;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*##^## Designer {
|
|
||||||
D{i:0;autoSize:true;height:480;width:640}
|
|
||||||
}
|
|
||||||
##^##*/
|
|
@ -1,17 +0,0 @@
|
|||||||
import QtQuick 2.12
|
|
||||||
import QtQuick.Controls.Material 2.12
|
|
||||||
import QtQuick.Controls 2.12
|
|
||||||
import QtQuick.Layouts 1.3
|
|
||||||
|
|
||||||
Button {
|
|
||||||
id: exit
|
|
||||||
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
|
|
||||||
font.pixelSize: height * 0.1
|
|
||||||
display: AbstractButton.TextBesideIcon
|
|
||||||
spacing: 4
|
|
||||||
focusPolicy: Qt.StrongFocus
|
|
||||||
|
|
||||||
Layout.preferredHeight: parent.height / (parent.rows + 1)
|
|
||||||
Layout.preferredWidth: parent.width / (parent.columns + 1)
|
|
||||||
|
|
||||||
}
|
|
@ -1,27 +0,0 @@
|
|||||||
import QtQuick 2.0
|
|
||||||
import QtQuick.Window 2.12
|
|
||||||
import QtQuick.Controls.Material 2.0
|
|
||||||
import QtQuick.Controls 2.3
|
|
||||||
|
|
||||||
Item {
|
|
||||||
readonly property int pointCount: 100;
|
|
||||||
readonly property real mm: Screen.pixelDensity
|
|
||||||
readonly property real sm: 10 * mm
|
|
||||||
readonly property real dsm: Math.sqrt(Math.pow(Screen.desktopAvailableWidth, 2) + Math.pow(Screen.desktopAvailableHeight, 2)) / sm
|
|
||||||
readonly property real pt: getfactor(dsm) * sm
|
|
||||||
readonly property real controlPtMaterial: Material.buttonHeight
|
|
||||||
readonly property real gamePt: (width < height) ? width / pointCount : height / pointCount;
|
|
||||||
|
|
||||||
function getfactor(dsm) {
|
|
||||||
if (dsm < 30) {
|
|
||||||
return 0.5
|
|
||||||
} else if ( dsm < 70) {
|
|
||||||
return 1
|
|
||||||
} else if (dsm < 140) {
|
|
||||||
return 2;
|
|
||||||
} else
|
|
||||||
return 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
anchors.fill: parent;
|
|
||||||
}
|
|
@ -1,84 +0,0 @@
|
|||||||
import QtQuick 2.11
|
|
||||||
import QtQuick.Controls 2.3
|
|
||||||
import QtQuick.Controls.Material 2.0
|
|
||||||
import QtQuick.Layouts 1.3
|
|
||||||
|
|
||||||
BasePopUp {
|
|
||||||
id : popup
|
|
||||||
|
|
||||||
property string text: qsTr("Message")
|
|
||||||
property string img: ""
|
|
||||||
property string titleText: qsTr("Message")
|
|
||||||
property int type: 0
|
|
||||||
|
|
||||||
function _getBackGraundColor(type) {
|
|
||||||
switch(type) {
|
|
||||||
|
|
||||||
case 1: return "#FFC107"
|
|
||||||
case 2: return "#FF5722"
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return Material.background
|
|
||||||
}
|
|
||||||
|
|
||||||
autoClose: true;
|
|
||||||
closeInterval: 5000
|
|
||||||
|
|
||||||
margins: 0
|
|
||||||
margin: 0
|
|
||||||
spacing: 0
|
|
||||||
|
|
||||||
|
|
||||||
backgroundColor: _getBackGraundColor(type);
|
|
||||||
|
|
||||||
Page {
|
|
||||||
id: page
|
|
||||||
anchors.fill: parent
|
|
||||||
spacing: 0
|
|
||||||
|
|
||||||
background: Rectangle {
|
|
||||||
color: "#00000000"
|
|
||||||
}
|
|
||||||
|
|
||||||
header: Label {
|
|
||||||
text: titleText
|
|
||||||
horizontalAlignment: Text.AlignHCenter
|
|
||||||
}
|
|
||||||
|
|
||||||
contentItem:
|
|
||||||
RowLayout {
|
|
||||||
id: rowLayout
|
|
||||||
spacing: 5
|
|
||||||
clip: true
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
color: "#00000000"
|
|
||||||
Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
|
|
||||||
Layout.preferredWidth: rowLayout.height;
|
|
||||||
Layout.preferredHeight: rowLayout.height;
|
|
||||||
|
|
||||||
Image {
|
|
||||||
id: image
|
|
||||||
fillMode: Image.PreserveAspectCrop
|
|
||||||
clip: true
|
|
||||||
anchors.fill: parent;
|
|
||||||
source: img
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Label {
|
|
||||||
id: message
|
|
||||||
text: popup.text
|
|
||||||
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
|
|
||||||
Layout.fillHeight: true;
|
|
||||||
Layout.fillWidth: true;
|
|
||||||
clip: true
|
|
||||||
wrapMode: Text.WordWrap
|
|
||||||
verticalAlignment: Text.AlignVCenter
|
|
||||||
horizontalAlignment: Text.AlignHCenter
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,30 +0,0 @@
|
|||||||
import QtQuick 2.12
|
|
||||||
import QtQuick.Controls.Material 2.12
|
|
||||||
import QtQuick.Controls 2.12
|
|
||||||
import QtQuick.Layouts 1.3
|
|
||||||
import QtGraphicalEffects 1.12
|
|
||||||
|
|
||||||
Item {
|
|
||||||
readonly property var model: notificationService;
|
|
||||||
readonly property var msg: model.notify
|
|
||||||
readonly property var history: model.history
|
|
||||||
|
|
||||||
|
|
||||||
NotificationForm {
|
|
||||||
id: notyfyView
|
|
||||||
titleText : msg.title;
|
|
||||||
text: (msg)? msg.text: "";
|
|
||||||
img: (msg)? msg.img: "";
|
|
||||||
type: (msg)? msg.type: 0;
|
|
||||||
|
|
||||||
x: parent.width - width - margin;
|
|
||||||
y: margin;
|
|
||||||
|
|
||||||
width: 6 * metrix.controlPtMaterial;
|
|
||||||
height: width * 0.5
|
|
||||||
}
|
|
||||||
|
|
||||||
onMsgChanged: {
|
|
||||||
notyfyView._show();
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,26 +0,0 @@
|
|||||||
import QtQuick 2.11
|
|
||||||
import QtQuick.Controls 2.3
|
|
||||||
import QtQuick.Controls.Material 2.0
|
|
||||||
import QtQuick.Layouts 1.3
|
|
||||||
|
|
||||||
BasePopUp {
|
|
||||||
id: pagePopUp
|
|
||||||
property var source: null
|
|
||||||
autoClose: false
|
|
||||||
|
|
||||||
Item {
|
|
||||||
id: sourceVal
|
|
||||||
anchors.fill: parent
|
|
||||||
}
|
|
||||||
|
|
||||||
onSourceChanged: {
|
|
||||||
if (!source)
|
|
||||||
return;
|
|
||||||
|
|
||||||
source.parent = sourceVal;
|
|
||||||
source.anchors.fill = sourceVal;
|
|
||||||
}
|
|
||||||
|
|
||||||
x: parent.width / 2 - width / 2
|
|
||||||
y: parent.height / 2 - height / 2
|
|
||||||
}
|
|
@ -1,124 +0,0 @@
|
|||||||
import QtQuick 2.12
|
|
||||||
import QtQuick.Controls.Material 2.12
|
|
||||||
import QtQuick.Controls 2.12
|
|
||||||
import QtQuick.Layouts 1.3
|
|
||||||
import QtGraphicalEffects 1.12
|
|
||||||
|
|
||||||
Item {
|
|
||||||
id: properyView
|
|
||||||
|
|
||||||
height: 1 * metrix.pt
|
|
||||||
|
|
||||||
property string keyImage: "";
|
|
||||||
property string keyText: "";
|
|
||||||
|
|
||||||
property string valueImage: "";
|
|
||||||
property string valueText: "";
|
|
||||||
|
|
||||||
property int lineWidth : 0.5 * metrix.mm
|
|
||||||
|
|
||||||
property bool hovered: false
|
|
||||||
property bool hold: false
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
id:background
|
|
||||||
anchors.fill: parent
|
|
||||||
color: "#00000000"
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
height: lineWidth
|
|
||||||
color: (hold)? Material.accent: (hovered)? Material.foreground:"#aaa"
|
|
||||||
anchors.bottom: parent.bottom
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.right: parent.right
|
|
||||||
|
|
||||||
Behavior on color {
|
|
||||||
|
|
||||||
ColorAnimation {
|
|
||||||
duration: 100
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
DropShadow {
|
|
||||||
anchors.fill: background
|
|
||||||
horizontalOffset: 2
|
|
||||||
verticalOffset: 2
|
|
||||||
radius: 8.0
|
|
||||||
samples: 17
|
|
||||||
|
|
||||||
color: "#80000000";
|
|
||||||
source: background
|
|
||||||
}
|
|
||||||
|
|
||||||
MouseArea {
|
|
||||||
anchors.fill: parent
|
|
||||||
hoverEnabled: true
|
|
||||||
|
|
||||||
onEntered: {
|
|
||||||
parent.hovered = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
onExited: {
|
|
||||||
parent.hovered = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
onReleased: {
|
|
||||||
parent.hold = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
onPressed: {
|
|
||||||
parent.hold = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
RowLayout {
|
|
||||||
|
|
||||||
Label {
|
|
||||||
text: keyText
|
|
||||||
visible: keyText
|
|
||||||
Layout.alignment: Qt.AlignLeft
|
|
||||||
horizontalAlignment: Text.AlignLeft
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
ImageView {
|
|
||||||
visible: keyImage
|
|
||||||
drawItem: keyImage
|
|
||||||
size: parent.height * 0.75
|
|
||||||
|
|
||||||
Layout.alignment: Qt.AlignLeft
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Label {
|
|
||||||
text: valueText
|
|
||||||
visible: valueText
|
|
||||||
horizontalAlignment: Text.AlignRight
|
|
||||||
|
|
||||||
Layout.fillWidth: true
|
|
||||||
|
|
||||||
Layout.alignment: Qt.AlignRight
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
ImageView {
|
|
||||||
drawItem: valueImage
|
|
||||||
size: parent.height * 0.75
|
|
||||||
visible: valueImage
|
|
||||||
|
|
||||||
Layout.alignment: Qt.AlignRight
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
anchors.fill: parent
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/*##^## Designer {
|
|
||||||
D{i:0;autoSize:true;height:480;width:640}
|
|
||||||
}
|
|
||||||
##^##*/
|
|
@ -1,228 +0,0 @@
|
|||||||
import QtQuick 2.11
|
|
||||||
import QtQuick.Controls.Material 2.0
|
|
||||||
import QtQuick.Controls 2.3
|
|
||||||
import QtQuick.Layouts 1.3
|
|
||||||
|
|
||||||
Item {
|
|
||||||
id: scene;
|
|
||||||
z: -2
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
id: background;
|
|
||||||
color: "#ffffff"
|
|
||||||
anchors.fill: parent;
|
|
||||||
|
|
||||||
Behavior on color {
|
|
||||||
|
|
||||||
ColorAnimation {
|
|
||||||
duration: 5000
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
z: -3
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
property var model: null;
|
|
||||||
property var arrayObjects: []
|
|
||||||
readonly property bool showMenu: (model)? model.showMenu: false
|
|
||||||
property bool isPause: false
|
|
||||||
|
|
||||||
function add (cppObjId) {
|
|
||||||
if (!model) {
|
|
||||||
console.log("create object fail")
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
var objModel = model.getGameObject(cppObjId);
|
|
||||||
|
|
||||||
if (!objModel) {
|
|
||||||
console.log("object model not found");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var viewTemplate = objModel.viewTemplate;
|
|
||||||
|
|
||||||
var temp = Qt.createComponent( viewTemplate + ".qml")
|
|
||||||
if (temp.status === Component.Ready) {
|
|
||||||
var obj = temp.createObject(parent) // parent - это обьект на который будет помещен соззданный элемент
|
|
||||||
obj.model = model.getGameObject(cppObjId);
|
|
||||||
obj.z = -2;
|
|
||||||
arrayObjects.push(obj)
|
|
||||||
} else {
|
|
||||||
console.log("wrong viewTemplate in model");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function remove(id) {
|
|
||||||
if (typeof id !== "number" || id < 0) {
|
|
||||||
console.log("id not found");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (var i = 0; i < arrayObjects.length; ++i) {
|
|
||||||
if (id === arrayObjects[i].guiId) {
|
|
||||||
arrayObjects.splice(i,1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function updateBackgroundColor(lvl) {
|
|
||||||
switch(lvl % 7) {
|
|
||||||
case 0: background.color = "#d6eaf8"; break;
|
|
||||||
case 1: background.color = "#d0ece7"; break;
|
|
||||||
case 2: background.color = "#d4efdf"; break;
|
|
||||||
case 3: background.color = "#fcf3cf"; break;
|
|
||||||
case 4: background.color = "#f6ddcc"; break;
|
|
||||||
case 5: background.color = "#f2d7d5"; break;
|
|
||||||
case 6: background.color = "#ebdef0"; break;
|
|
||||||
case 7: background.color = "#fbfcfc"; break;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Timer {
|
|
||||||
id: autoTimer;
|
|
||||||
repeat: true;
|
|
||||||
running: showMenu;
|
|
||||||
interval: 1000
|
|
||||||
onTriggered: {
|
|
||||||
interval = Math.random() * 600
|
|
||||||
scene.model.buttonPress();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Connections {
|
|
||||||
target: model;
|
|
||||||
onGameObjectsChanged: {
|
|
||||||
if (!dif) {
|
|
||||||
console.log("dif not found");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var tempDifRem = [];
|
|
||||||
tempDifRem = dif.getRemoveIds();
|
|
||||||
var tempDifAdd = [];
|
|
||||||
tempDifAdd = dif.getAddedIds();
|
|
||||||
|
|
||||||
for (var i = 0; i < tempDifAdd.length; ++i) {
|
|
||||||
add(tempDifAdd[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < tempDifRem.length; ++i) {
|
|
||||||
remove(tempDifRem[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Component.onCompleted: {
|
|
||||||
updateBackgroundColor(0);
|
|
||||||
model.handleNewGame();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
MouseArea {
|
|
||||||
anchors.fill: parent;
|
|
||||||
|
|
||||||
onClicked: {
|
|
||||||
if (!model || showMenu) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
model.buttonPress();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Button {
|
|
||||||
id: returnToMenu;
|
|
||||||
|
|
||||||
text: "<<"
|
|
||||||
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.leftMargin: metrix.gamePt
|
|
||||||
|
|
||||||
anchors.top: parent.top
|
|
||||||
anchors.topMargin: metrix.gamePt
|
|
||||||
z: 1
|
|
||||||
|
|
||||||
onClicked: {
|
|
||||||
if (model)
|
|
||||||
model.showMenu = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
visible: !showMenu
|
|
||||||
}
|
|
||||||
|
|
||||||
Button {
|
|
||||||
id: pause
|
|
||||||
|
|
||||||
text: (isPause)? "▶" :"||"
|
|
||||||
|
|
||||||
anchors.left: returnToMenu.right
|
|
||||||
anchors.leftMargin: metrix.gamePt
|
|
||||||
|
|
||||||
anchors.top: parent.top
|
|
||||||
anchors.topMargin: metrix.gamePt
|
|
||||||
z: returnToMenu.z
|
|
||||||
|
|
||||||
onClicked: {
|
|
||||||
isPause = !isPause;
|
|
||||||
if (model) model.setPause(isPause);
|
|
||||||
}
|
|
||||||
|
|
||||||
visible: !showMenu
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
Button {
|
|
||||||
id: long_
|
|
||||||
Label {
|
|
||||||
anchors.fill: parent;
|
|
||||||
|
|
||||||
textFormat: Text.AutoText
|
|
||||||
verticalAlignment: Text.AlignVCenter
|
|
||||||
horizontalAlignment: Text.AlignHCenter
|
|
||||||
wrapMode: Text.WordWrap
|
|
||||||
|
|
||||||
text: qsTr("lvl long: ") + ((model)? model.long_: "0")
|
|
||||||
}
|
|
||||||
|
|
||||||
width: 35 * metrix.gamePt;
|
|
||||||
height: pause.height;
|
|
||||||
|
|
||||||
anchors.left: pause.right
|
|
||||||
anchors.leftMargin: metrix.gamePt
|
|
||||||
|
|
||||||
anchors.top: parent.top
|
|
||||||
anchors.topMargin: metrix.gamePt
|
|
||||||
z: returnToMenu.z
|
|
||||||
|
|
||||||
visible: !showMenu
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
Button {
|
|
||||||
Label {
|
|
||||||
anchors.fill: parent;
|
|
||||||
|
|
||||||
textFormat: Text.AutoText
|
|
||||||
verticalAlignment: Text.AlignVCenter
|
|
||||||
horizontalAlignment: Text.AlignHCenter
|
|
||||||
wrapMode: Text.WordWrap
|
|
||||||
|
|
||||||
text: qsTr("general long: ") + ((model)? model.generalLong: "0")
|
|
||||||
}
|
|
||||||
|
|
||||||
width: 35 * metrix.gamePt;
|
|
||||||
height: long_.height;
|
|
||||||
|
|
||||||
anchors.left: long_.right
|
|
||||||
anchors.leftMargin: metrix.gamePt
|
|
||||||
|
|
||||||
anchors.top: parent.top
|
|
||||||
anchors.topMargin: metrix.gamePt
|
|
||||||
z: returnToMenu.z
|
|
||||||
|
|
||||||
visible: !showMenu
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,217 +0,0 @@
|
|||||||
import QtQuick 2.9
|
|
||||||
import QtQuick.Controls 2.3
|
|
||||||
import QtQuick.Controls.Material 2.0
|
|
||||||
import QtQuick.Layouts 1.3
|
|
||||||
|
|
||||||
Item {
|
|
||||||
id: item1
|
|
||||||
|
|
||||||
GridLayout {
|
|
||||||
id: gridLayout
|
|
||||||
rows: 8
|
|
||||||
columnSpacing: 5
|
|
||||||
rowSpacing: 5
|
|
||||||
anchors.rightMargin: 200
|
|
||||||
anchors.leftMargin: 200
|
|
||||||
anchors.bottomMargin: 100
|
|
||||||
anchors.topMargin: 50
|
|
||||||
anchors.fill: parent
|
|
||||||
columns: 8
|
|
||||||
|
|
||||||
RoundButton {
|
|
||||||
id: roundButton
|
|
||||||
width: 10*mainWindow.point
|
|
||||||
height: 10*mainWindow.point
|
|
||||||
text: "1"
|
|
||||||
}
|
|
||||||
|
|
||||||
RoundButton {
|
|
||||||
id: roundButton1
|
|
||||||
width: 10*mainWindow.point
|
|
||||||
height: 10*mainWindow.point
|
|
||||||
text: "2"
|
|
||||||
}
|
|
||||||
|
|
||||||
RoundButton {
|
|
||||||
id: roundButton2
|
|
||||||
width: 10*mainWindow.point
|
|
||||||
height: 10*mainWindow.point
|
|
||||||
text: "3"
|
|
||||||
}
|
|
||||||
|
|
||||||
RoundButton {
|
|
||||||
id: roundButton3
|
|
||||||
width: 10*mainWindow.point
|
|
||||||
height: 10*mainWindow.point
|
|
||||||
text: "4"
|
|
||||||
}
|
|
||||||
|
|
||||||
RoundButton {
|
|
||||||
id: roundButton4
|
|
||||||
width: 10*mainWindow.point
|
|
||||||
height: 10*mainWindow.point
|
|
||||||
text: "5"
|
|
||||||
}
|
|
||||||
|
|
||||||
RoundButton {
|
|
||||||
id: roundButton5
|
|
||||||
width: 10*mainWindow.point
|
|
||||||
height: 10*mainWindow.point
|
|
||||||
text: "6"
|
|
||||||
}
|
|
||||||
|
|
||||||
RoundButton {
|
|
||||||
id: roundButton6
|
|
||||||
width: 10*mainWindow.point
|
|
||||||
height: 10*mainWindow.point
|
|
||||||
text: "7"
|
|
||||||
}
|
|
||||||
|
|
||||||
RoundButton {
|
|
||||||
id: roundButton7
|
|
||||||
width: 10*mainWindow.point
|
|
||||||
height: 10*mainWindow.point
|
|
||||||
text: "8"
|
|
||||||
}
|
|
||||||
|
|
||||||
RoundButton {
|
|
||||||
id: roundButton8
|
|
||||||
width: 10*mainWindow.point
|
|
||||||
height: 10*mainWindow.point
|
|
||||||
text: "9"
|
|
||||||
}
|
|
||||||
|
|
||||||
RoundButton {
|
|
||||||
id: roundButton9
|
|
||||||
width: 10*mainWindow.point
|
|
||||||
height: 10*mainWindow.point
|
|
||||||
text: "10"
|
|
||||||
}
|
|
||||||
|
|
||||||
RoundButton {
|
|
||||||
id: roundButton10
|
|
||||||
width: 10*mainWindow.point
|
|
||||||
height: 10*mainWindow.point
|
|
||||||
text: "11"
|
|
||||||
}
|
|
||||||
|
|
||||||
RoundButton {
|
|
||||||
id: roundButton11
|
|
||||||
width: 10*mainWindow.point
|
|
||||||
height: 10*mainWindow.point
|
|
||||||
text: "12"
|
|
||||||
}
|
|
||||||
|
|
||||||
RoundButton {
|
|
||||||
id: roundButton12
|
|
||||||
width: 10*mainWindow.point
|
|
||||||
height: 10*mainWindow.point
|
|
||||||
text: "13"
|
|
||||||
}
|
|
||||||
|
|
||||||
RoundButton {
|
|
||||||
id: roundButton13
|
|
||||||
width: 10*mainWindow.point
|
|
||||||
height: 10*mainWindow.point
|
|
||||||
text: "14"
|
|
||||||
}
|
|
||||||
|
|
||||||
RoundButton {
|
|
||||||
id: roundButton14
|
|
||||||
width: 10*mainWindow.point
|
|
||||||
height: 10*mainWindow.point
|
|
||||||
text: "15"
|
|
||||||
}
|
|
||||||
|
|
||||||
RoundButton {
|
|
||||||
id: roundButton15
|
|
||||||
width: 10*mainWindow.point
|
|
||||||
height: 10*mainWindow.point
|
|
||||||
text: "16"
|
|
||||||
}
|
|
||||||
|
|
||||||
RoundButton {
|
|
||||||
id: roundButton16
|
|
||||||
width: 10*mainWindow.point
|
|
||||||
height: 10*mainWindow.point
|
|
||||||
text: "17"
|
|
||||||
}
|
|
||||||
|
|
||||||
RoundButton {
|
|
||||||
id: roundButton17
|
|
||||||
width: 10*mainWindow.point
|
|
||||||
height: 10*mainWindow.point
|
|
||||||
text: "18"
|
|
||||||
}
|
|
||||||
|
|
||||||
RoundButton {
|
|
||||||
id: roundButton18
|
|
||||||
width: 10*mainWindow.point
|
|
||||||
height: 10*mainWindow.point
|
|
||||||
text: "19"
|
|
||||||
}
|
|
||||||
|
|
||||||
RoundButton {
|
|
||||||
id: roundButton19
|
|
||||||
width: 10*mainWindow.point
|
|
||||||
height: 10*mainWindow.point
|
|
||||||
text: "20"
|
|
||||||
}
|
|
||||||
|
|
||||||
RoundButton {
|
|
||||||
id: roundButton20
|
|
||||||
width: 10*mainWindow.point
|
|
||||||
height: 10*mainWindow.point
|
|
||||||
text: "21"
|
|
||||||
}
|
|
||||||
|
|
||||||
RoundButton {
|
|
||||||
id: roundButton21
|
|
||||||
width: 10*mainWindow.point
|
|
||||||
height: 10*mainWindow.point
|
|
||||||
text: "22"
|
|
||||||
}
|
|
||||||
|
|
||||||
RoundButton {
|
|
||||||
id: roundButton22
|
|
||||||
width: 10*mainWindow.point
|
|
||||||
height: 10*mainWindow.point
|
|
||||||
text: "23"
|
|
||||||
}
|
|
||||||
|
|
||||||
RoundButton {
|
|
||||||
id: roundButton23
|
|
||||||
width: 10*mainWindow.point
|
|
||||||
height: 10*mainWindow.point
|
|
||||||
text: "24"
|
|
||||||
}
|
|
||||||
|
|
||||||
RoundButton {
|
|
||||||
id: roundButton24
|
|
||||||
width: 10*mainWindow.point
|
|
||||||
height: 10*mainWindow.point
|
|
||||||
text: "25"
|
|
||||||
}
|
|
||||||
|
|
||||||
RoundButton {
|
|
||||||
id: roundButton25
|
|
||||||
width: 10*mainWindow.point
|
|
||||||
height: 10*mainWindow.point
|
|
||||||
text: "26"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Label {
|
|
||||||
id: label
|
|
||||||
x: 187
|
|
||||||
color: "#795548"
|
|
||||||
text: qsTr("Select Level")
|
|
||||||
font.bold: true
|
|
||||||
font.pixelSize: 30
|
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
|
||||||
anchors.top: parent.top
|
|
||||||
anchors.topMargin: 30
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -1,122 +0,0 @@
|
|||||||
import QtQuick 2.12
|
|
||||||
import QtQuick.Controls.Material 2.12
|
|
||||||
import QtQuick.Controls 2.12
|
|
||||||
import QtQuick.Layouts 1.3
|
|
||||||
|
|
||||||
Item {
|
|
||||||
id: settingsView
|
|
||||||
|
|
||||||
property var model: null
|
|
||||||
|
|
||||||
function save() {
|
|
||||||
if (!model) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
model.setPort(port.value);
|
|
||||||
model.setHost(host.text);
|
|
||||||
model.setTheme(themeBox.currentIndex);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
function reset() {
|
|
||||||
if (!model) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
model.toDefault();
|
|
||||||
}
|
|
||||||
|
|
||||||
function update() {
|
|
||||||
if (!model) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
model.forceUpdate();
|
|
||||||
}
|
|
||||||
|
|
||||||
GridLayout {
|
|
||||||
|
|
||||||
id: columnLayout
|
|
||||||
rows: 4
|
|
||||||
columns: 2
|
|
||||||
anchors.fill: parent
|
|
||||||
|
|
||||||
|
|
||||||
Label {
|
|
||||||
text: qsTr("Game Host")
|
|
||||||
Layout.fillWidth: true
|
|
||||||
}
|
|
||||||
|
|
||||||
TextField {
|
|
||||||
id: host;
|
|
||||||
text: (model)? model.host: "localhost"
|
|
||||||
Layout.fillHeight: false
|
|
||||||
Layout.fillWidth: true
|
|
||||||
horizontalAlignment: Text.AlignLeft
|
|
||||||
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
Label {
|
|
||||||
text: qsTr("Game Port")
|
|
||||||
Layout.fillWidth: true
|
|
||||||
}
|
|
||||||
|
|
||||||
SpinBox {
|
|
||||||
id: port;
|
|
||||||
Layout.fillWidth: true
|
|
||||||
to: 10000
|
|
||||||
from: 7000
|
|
||||||
antialiasing: false
|
|
||||||
scale: 1
|
|
||||||
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
|
|
||||||
|
|
||||||
value: (model)? model.port: 7777
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
Label {
|
|
||||||
text: qsTr("Use Them")
|
|
||||||
Layout.fillWidth: true
|
|
||||||
}
|
|
||||||
|
|
||||||
ComboBox {
|
|
||||||
id: themeBox;
|
|
||||||
Layout.fillWidth: true
|
|
||||||
focusPolicy: Qt.NoFocus
|
|
||||||
|
|
||||||
model: [qsTr("Light"), qsTr("Dark")];
|
|
||||||
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
|
|
||||||
|
|
||||||
currentIndex: (settingsView.model)? settingsView.model.theme: 0
|
|
||||||
|
|
||||||
onCurrentIndexChanged: {
|
|
||||||
if (((settingsView.model)? settingsView.model.theme: 0)
|
|
||||||
!== currentIndex) {
|
|
||||||
themeWarning.visible = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
Item {
|
|
||||||
Layout.fillHeight: true
|
|
||||||
Layout.fillWidth: true
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
Label {
|
|
||||||
id: themeWarning
|
|
||||||
text: qsTr("In order for the new theme to take effect, you need to reload the game.");
|
|
||||||
|
|
||||||
color: "#FF0000"
|
|
||||||
|
|
||||||
wrapMode: Label.WordWrap
|
|
||||||
|
|
||||||
Layout.maximumWidth: themeBox.width
|
|
||||||
|
|
||||||
visible: false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,103 +0,0 @@
|
|||||||
import QtQuick 2.12
|
|
||||||
import QtQuick.Controls.Material 2.12
|
|
||||||
import QtQuick.Controls 2.12
|
|
||||||
|
|
||||||
FrameView {
|
|
||||||
id: sideBar
|
|
||||||
property int openHeight: 10 * metrix.pt
|
|
||||||
property int closedHeight: 1 * metrix.pt
|
|
||||||
property int openWidth: 10 * metrix.pt
|
|
||||||
property int closedWidth: 1 * metrix.pt
|
|
||||||
property int headerHeight : 1 * metrix.controlPtMaterial
|
|
||||||
|
|
||||||
clip: true;
|
|
||||||
|
|
||||||
property bool resizeWidth: true
|
|
||||||
property bool resizeHeight: true
|
|
||||||
|
|
||||||
property bool isOpened: true
|
|
||||||
property bool chainAnimation: true
|
|
||||||
property var source: null
|
|
||||||
property var header: null
|
|
||||||
|
|
||||||
readonly property bool openFinished: openHeight === height && openWidth == width;
|
|
||||||
readonly property bool closeFinished: closedHeight === height && closedWidth == width;
|
|
||||||
|
|
||||||
function show() {
|
|
||||||
if (resizeWidth && !(chainAnimation && resizeHeight))
|
|
||||||
width = openWidth;
|
|
||||||
if (resizeHeight )
|
|
||||||
height = openHeight;
|
|
||||||
|
|
||||||
isOpened = true;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
function hide() {
|
|
||||||
if (resizeWidth && !(chainAnimation && resizeHeight))
|
|
||||||
width = closedWidth;
|
|
||||||
if (resizeHeight )
|
|
||||||
height = closedHeight;
|
|
||||||
|
|
||||||
isOpened = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
Component.onCompleted: {
|
|
||||||
show();
|
|
||||||
}
|
|
||||||
|
|
||||||
onHeightChanged: {
|
|
||||||
if (isOpened) {
|
|
||||||
if (height === openHeight) {
|
|
||||||
sideBar.width = openWidth
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if (height === closedHeight) {
|
|
||||||
sideBar.width = closedWidth
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Behavior on width {
|
|
||||||
PropertyAnimation {
|
|
||||||
duration: 1000
|
|
||||||
easing.type: Easing.OutBounce
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Behavior on height {
|
|
||||||
PropertyAnimation {
|
|
||||||
duration: 1000
|
|
||||||
easing.type: Easing.OutBounce
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Item {
|
|
||||||
id: headerVal
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.right: parent.right
|
|
||||||
anchors.top: parent.top
|
|
||||||
height: headerHeight
|
|
||||||
}
|
|
||||||
|
|
||||||
Item {
|
|
||||||
id: sourceVal
|
|
||||||
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.right: parent.right
|
|
||||||
anchors.top: headerVal.bottom
|
|
||||||
anchors.bottom: parent.bottom
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
onSourceChanged: {
|
|
||||||
source.parent = sourceVal;
|
|
||||||
source.anchors.fill = sourceVal;
|
|
||||||
}
|
|
||||||
|
|
||||||
onHeaderChanged: {
|
|
||||||
header.parent = headerVal;
|
|
||||||
header.anchors.fill = headerVal;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,17 +0,0 @@
|
|||||||
import QtQuick 2.9
|
|
||||||
|
|
||||||
GraphicItem {
|
|
||||||
|
|
||||||
Behavior on color {
|
|
||||||
ColorAnimation {
|
|
||||||
duration: 2000
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Behavior on radius {
|
|
||||||
NumberAnimation {
|
|
||||||
duration: 2000
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,47 +0,0 @@
|
|||||||
import QtQuick 2.11
|
|
||||||
import QtQuick.Controls 2.3
|
|
||||||
import QtQuick.Controls.Material 2.0
|
|
||||||
import QtQuick.Layouts 1.3
|
|
||||||
|
|
||||||
|
|
||||||
Item {
|
|
||||||
|
|
||||||
signal close();
|
|
||||||
|
|
||||||
RowLayout {
|
|
||||||
anchors.fill: parent
|
|
||||||
Layout.fillWidth: true
|
|
||||||
Layout.alignment: Qt.AlignHCenter | Qt.AlignBottom
|
|
||||||
|
|
||||||
Label {
|
|
||||||
text: qsTr("Write you name ");
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
TextField {
|
|
||||||
|
|
||||||
id: input;
|
|
||||||
|
|
||||||
Layout.fillWidth: true
|
|
||||||
horizontalAlignment: Text.AlignHCenter
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
Button {
|
|
||||||
|
|
||||||
id: ok
|
|
||||||
text: qsTr("Ok")
|
|
||||||
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
|
|
||||||
|
|
||||||
onClicked: {
|
|
||||||
if (contr) {
|
|
||||||
var rec = contr.getRecords()
|
|
||||||
rec.append(input.text, contr.generalLong);
|
|
||||||
}
|
|
||||||
|
|
||||||
close();
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,112 +0,0 @@
|
|||||||
import QtQuick 2.12
|
|
||||||
import QtQuick.Controls.Material 2.12
|
|
||||||
import QtQuick.Controls 2.12
|
|
||||||
import QtQuick.Layouts 1.3
|
|
||||||
import QtGraphicalEffects 1.12
|
|
||||||
|
|
||||||
|
|
||||||
Flickable {
|
|
||||||
id: userVewFlic
|
|
||||||
|
|
||||||
contentWidth: userVew.width
|
|
||||||
contentHeight: userVew.height
|
|
||||||
flickableDirection: Flickable.VerticalFlick;
|
|
||||||
property var model: null
|
|
||||||
signal tryConnect();
|
|
||||||
|
|
||||||
ScrollBar.vertical: ScrollBar {
|
|
||||||
width: metrix.pt
|
|
||||||
}
|
|
||||||
|
|
||||||
Item {
|
|
||||||
id: userVew
|
|
||||||
|
|
||||||
width: userVewFlic.width
|
|
||||||
|
|
||||||
ColumnLayout {
|
|
||||||
id: columnLayout
|
|
||||||
anchors.fill: parent
|
|
||||||
|
|
||||||
visible: (model)? !model.offline: false;
|
|
||||||
|
|
||||||
ImageView {
|
|
||||||
drawItem: "image://userItems/player/" + ((model)? model.id: -1).toString()
|
|
||||||
Layout.fillWidth: true
|
|
||||||
Layout.fillHeight: true
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
PropertyView {
|
|
||||||
Layout.fillWidth: true
|
|
||||||
keyText: qsTr("You ");
|
|
||||||
valueText : (model)? model.name: -1
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
PropertyView {
|
|
||||||
valueText : ((model)? model.gmail: -1).toString()
|
|
||||||
Layout.fillWidth: true
|
|
||||||
keyText: qsTr("You gmail");
|
|
||||||
}
|
|
||||||
|
|
||||||
PropertyView {
|
|
||||||
keyText: qsTr("Money ");
|
|
||||||
|
|
||||||
valueText : ((model)? model.money: -1).toString()
|
|
||||||
Layout.fillWidth: true
|
|
||||||
}
|
|
||||||
|
|
||||||
PropertyView {
|
|
||||||
keyText: qsTr("Record ");
|
|
||||||
|
|
||||||
valueText : ((model)? model.record: -1).toString()
|
|
||||||
Layout.fillWidth: true
|
|
||||||
}
|
|
||||||
|
|
||||||
PropertyView {
|
|
||||||
keyText: qsTr("AvgRecord ");
|
|
||||||
|
|
||||||
valueText : ((model)? model.avgRecord: -1).toString()
|
|
||||||
Layout.fillWidth: true
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
PropertyView {
|
|
||||||
keyText: qsTr("Snake ");
|
|
||||||
|
|
||||||
valueImage : "image://userItems/item/" + ((model)? model.cureentSnake: -1).toString()
|
|
||||||
Layout.fillWidth: true
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ColumnLayout {
|
|
||||||
visible: (model)? model.offline: false;
|
|
||||||
anchors.fill: parent
|
|
||||||
|
|
||||||
Label {
|
|
||||||
wrapMode: Text.WordWrap
|
|
||||||
Layout.fillWidth: true
|
|
||||||
|
|
||||||
text: qsTr("Offline mode. Your statistics will be frozen until you login your profile.");
|
|
||||||
}
|
|
||||||
|
|
||||||
Button {
|
|
||||||
text: qsTr("try conect to server ");
|
|
||||||
|
|
||||||
Layout.alignment: Qt.AlignHCenter
|
|
||||||
|
|
||||||
onClicked: {
|
|
||||||
tryConnect();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Item {
|
|
||||||
Layout.fillHeight: true
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,40 +0,0 @@
|
|||||||
import QtQuick 2.12
|
|
||||||
import QtQuick.Window 2.12
|
|
||||||
import QtQuick.Controls 2.12
|
|
||||||
|
|
||||||
ApplicationWindow {
|
|
||||||
id: mainWindow;
|
|
||||||
visible: true;
|
|
||||||
width: 640;
|
|
||||||
height: 480;
|
|
||||||
title: qsTr("SnakeOnTheRoad");
|
|
||||||
|
|
||||||
// Component.onCompleted: {
|
|
||||||
// mainWindow.showFullScreen();
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
Metrix {id: metrix}
|
|
||||||
|
|
||||||
Scene {
|
|
||||||
id: scane;
|
|
||||||
model: contr;
|
|
||||||
anchors.fill: parent;
|
|
||||||
}
|
|
||||||
|
|
||||||
MainMenu {
|
|
||||||
|
|
||||||
model: (contr)? contr.mainMenuModel: null;
|
|
||||||
anchors.fill: parent;
|
|
||||||
visible: scane.showMenu;
|
|
||||||
|
|
||||||
onPlayGame: {
|
|
||||||
contr.showMenu = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
NotificationServiceView {
|
|
||||||
anchors.fill: parent;
|
|
||||||
}
|
|
||||||
}
|
|
Before Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 186 KiB |
Before Width: | Height: | Size: 79 KiB |
@ -1 +0,0 @@
|
|||||||
<svg aria-hidden="true" data-prefix="fas" data-icon="cogs" class="svg-inline--fa fa-cogs fa-w-20" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M512.1 191l-8.2 14.3c-3 5.3-9.4 7.5-15.1 5.4-11.8-4.4-22.6-10.7-32.1-18.6-4.6-3.8-5.8-10.5-2.8-15.7l8.2-14.3c-6.9-8-12.3-17.3-15.9-27.4h-16.5c-6 0-11.2-4.3-12.2-10.3-2-12-2.1-24.6 0-37.1 1-6 6.2-10.4 12.2-10.4h16.5c3.6-10.1 9-19.4 15.9-27.4l-8.2-14.3c-3-5.2-1.9-11.9 2.8-15.7 9.5-7.9 20.4-14.2 32.1-18.6 5.7-2.1 12.1.1 15.1 5.4l8.2 14.3c10.5-1.9 21.2-1.9 31.7 0L552 6.3c3-5.3 9.4-7.5 15.1-5.4 11.8 4.4 22.6 10.7 32.1 18.6 4.6 3.8 5.8 10.5 2.8 15.7l-8.2 14.3c6.9 8 12.3 17.3 15.9 27.4h16.5c6 0 11.2 4.3 12.2 10.3 2 12 2.1 24.6 0 37.1-1 6-6.2 10.4-12.2 10.4h-16.5c-3.6 10.1-9 19.4-15.9 27.4l8.2 14.3c3 5.2 1.9 11.9-2.8 15.7-9.5 7.9-20.4 14.2-32.1 18.6-5.7 2.1-12.1-.1-15.1-5.4l-8.2-14.3c-10.4 1.9-21.2 1.9-31.7 0zm-10.5-58.8c38.5 29.6 82.4-14.3 52.8-52.8-38.5-29.7-82.4 14.3-52.8 52.8zM386.3 286.1l33.7 16.8c10.1 5.8 14.5 18.1 10.5 29.1-8.9 24.2-26.4 46.4-42.6 65.8-7.4 8.9-20.2 11.1-30.3 5.3l-29.1-16.8c-16 13.7-34.6 24.6-54.9 31.7v33.6c0 11.6-8.3 21.6-19.7 23.6-24.6 4.2-50.4 4.4-75.9 0-11.5-2-20-11.9-20-23.6V418c-20.3-7.2-38.9-18-54.9-31.7L74 403c-10 5.8-22.9 3.6-30.3-5.3-16.2-19.4-33.3-41.6-42.2-65.7-4-10.9.4-23.2 10.5-29.1l33.3-16.8c-3.9-20.9-3.9-42.4 0-63.4L12 205.8c-10.1-5.8-14.6-18.1-10.5-29 8.9-24.2 26-46.4 42.2-65.8 7.4-8.9 20.2-11.1 30.3-5.3l29.1 16.8c16-13.7 34.6-24.6 54.9-31.7V57.1c0-11.5 8.2-21.5 19.6-23.5 24.6-4.2 50.5-4.4 76-.1 11.5 2 20 11.9 20 23.6v33.6c20.3 7.2 38.9 18 54.9 31.7l29.1-16.8c10-5.8 22.9-3.6 30.3 5.3 16.2 19.4 33.2 41.6 42.1 65.8 4 10.9.1 23.2-10 29.1l-33.7 16.8c3.9 21 3.9 42.5 0 63.5zm-117.6 21.1c59.2-77-28.7-164.9-105.7-105.7-59.2 77 28.7 164.9 105.7 105.7zm243.4 182.7l-8.2 14.3c-3 5.3-9.4 7.5-15.1 5.4-11.8-4.4-22.6-10.7-32.1-18.6-4.6-3.8-5.8-10.5-2.8-15.7l8.2-14.3c-6.9-8-12.3-17.3-15.9-27.4h-16.5c-6 0-11.2-4.3-12.2-10.3-2-12-2.1-24.6 0-37.1 1-6 6.2-10.4 12.2-10.4h16.5c3.6-10.1 9-19.4 15.9-27.4l-8.2-14.3c-3-5.2-1.9-11.9 2.8-15.7 9.5-7.9 20.4-14.2 32.1-18.6 5.7-2.1 12.1.1 15.1 5.4l8.2 14.3c10.5-1.9 21.2-1.9 31.7 0l8.2-14.3c3-5.3 9.4-7.5 15.1-5.4 11.8 4.4 22.6 10.7 32.1 18.6 4.6 3.8 5.8 10.5 2.8 15.7l-8.2 14.3c6.9 8 12.3 17.3 15.9 27.4h16.5c6 0 11.2 4.3 12.2 10.3 2 12 2.1 24.6 0 37.1-1 6-6.2 10.4-12.2 10.4h-16.5c-3.6 10.1-9 19.4-15.9 27.4l8.2 14.3c3 5.2 1.9 11.9-2.8 15.7-9.5 7.9-20.4 14.2-32.1 18.6-5.7 2.1-12.1-.1-15.1-5.4l-8.2-14.3c-10.4 1.9-21.2 1.9-31.7 0zM501.6 431c38.5 29.6 82.4-14.3 52.8-52.8-38.5-29.6-82.4 14.3-52.8 52.8z"></path></svg>
|
|
Before Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 38 KiB |
Before Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 2.4 KiB |
@ -1,45 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
|
||||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
|
||||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
|
||||||
width="970.504px" height="970.503px" viewBox="0 0 970.504 970.503" style="enable-background:new 0 0 970.504 970.503;"
|
|
||||||
xml:space="preserve">
|
|
||||||
<g>
|
|
||||||
<path d="M120.027,962.802c26.6,0,53.5-8.801,75.7-27l288.1-234.7l290.899,237c22.301,18.1,49.101,27,75.7,27
|
|
||||||
c34.8,0,69.4-15.101,93.101-44.2c41.899-51.4,34.1-127-17.2-168.8l-366.7-298.8c-44.1-36-107.5-36-151.6,0l-363.8,296.5
|
|
||||||
c-51.4,41.8-59.1,117.399-17.3,168.8C50.727,947.702,85.227,962.802,120.027,962.802z"/>
|
|
||||||
<path d="M120.027,541.902c26.6,0,53.5-8.8,75.7-27l288.1-234.7l290.899,237c22.301,18.101,49.101,27,75.7,27
|
|
||||||
c34.8,0,69.4-15.1,93.101-44.2c41.899-51.399,34.1-127-17.2-168.8l-366.7-298.8c-44.1-36-107.5-36-151.6,0l-363.8,296.4
|
|
||||||
c-51.4,41.9-59.1,117.5-17.3,168.9C50.727,526.802,85.227,541.902,120.027,541.902z"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 1.3 KiB |