mirror of
https://github.com/Qsgs-Fans/FreeKill.git
synced 2024-11-16 03:32:34 +08:00
parent
0d709d6a73
commit
2acec5f20a
2
.github/workflows/build-windows.yml
vendored
2
.github/workflows/build-windows.yml
vendored
|
@ -65,7 +65,7 @@ jobs:
|
|||
run: |
|
||||
mkdir FreeKill-release
|
||||
cp build/FreeKill.exe FreeKill-release
|
||||
cp -r qml FreeKill-release
|
||||
cp -r qml Fk FreeKill-release
|
||||
cd FreeKill-release
|
||||
windeployqt FreeKill.exe
|
||||
cp -r ../.git .
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
import QtQuick
|
||||
import QtQuick.Controls
|
||||
import QtQuick.Layouts
|
||||
import ".."
|
||||
import Fk.RoomElement
|
||||
|
||||
Item {
|
||||
id: root
|
|
@ -3,7 +3,7 @@
|
|||
import QtQuick
|
||||
import QtQuick.Controls
|
||||
import QtQuick.Layouts
|
||||
import ".."
|
||||
import Fk.RoomElement
|
||||
|
||||
Item {
|
||||
id: root
|
6
Fk/Cheat/qmldir
Normal file
6
Fk/Cheat/qmldir
Normal file
|
@ -0,0 +1,6 @@
|
|||
module Fk.Cheat
|
||||
CardDetail 1.0 CardDetail.qml
|
||||
FreeAssign 1.0 FreeAssign.qml
|
||||
GeneralDetail 1.0 GeneralDetail.qml
|
||||
PlayerDetail 1.0 PlayerDetail.qml
|
||||
SameConvert 1.0 SameConvert.qml
|
3
Fk/Common/qmldir
Normal file
3
Fk/Common/qmldir
Normal file
|
@ -0,0 +1,3 @@
|
|||
module Fk.Common
|
||||
ChatBox 1.0 ChatBox.qml
|
||||
LogEdit 1.0 LogEdit.qml
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import "../skin-bank.js" as SkinBank
|
||||
import Fk
|
||||
|
||||
Item {
|
||||
id: root
|
||||
|
@ -49,7 +49,7 @@ Item {
|
|||
|
||||
TapHandler {
|
||||
onTapped: {
|
||||
lobby_dialog.source = "LobbyElement/EditProfile.qml";
|
||||
lobby_dialog.sourceComponent = Qt.createComponent("Fk.LobbyElement", "EditProfile");
|
||||
lobby_drawer.open();
|
||||
}
|
||||
}
|
9
Fk/LobbyElement/qmldir
Normal file
9
Fk/LobbyElement/qmldir
Normal file
|
@ -0,0 +1,9 @@
|
|||
module Fk.LobbyElement
|
||||
AudioSetting 1.0 AudioSetting.qml
|
||||
BGSetting 1.0 BGSetting.qml
|
||||
CreateRoom 1.0 CreateRoom.qml
|
||||
EditProfile 1.0 EditProfile.qml
|
||||
PersonalSettings 1.0 PersonalSettings.qml
|
||||
RoomGeneralSettings 1.0 RoomGeneralSettings.qml
|
||||
RoomPackageSettings 1.0 RoomPackageSettings.qml
|
||||
UserInfo 1.0 UserInfo.qml
|
|
@ -3,7 +3,7 @@
|
|||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import QtQuick.Controls
|
||||
import "RoomElement"
|
||||
import Fk.RoomElement
|
||||
|
||||
Item {
|
||||
id: root
|
|
@ -3,7 +3,7 @@
|
|||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import QtQuick.Controls
|
||||
import "RoomElement"
|
||||
import Fk.RoomElement
|
||||
|
||||
Item {
|
||||
id: root
|
|
@ -4,8 +4,8 @@ import QtQuick
|
|||
import QtQuick.Controls
|
||||
import QtQuick.Window
|
||||
import QtQuick.Layouts
|
||||
import "LobbyElement"
|
||||
import "Common"
|
||||
import Fk.LobbyElement
|
||||
import Fk.Common
|
||||
import "Logic.js" as Logic
|
||||
|
||||
Item {
|
||||
|
@ -154,7 +154,7 @@ Item {
|
|||
icon.name: "media-playback-start"
|
||||
text: Backend.translate("Create Room")
|
||||
onClicked: {
|
||||
lobby_dialog.source = "LobbyElement/CreateRoom.qml";
|
||||
lobby_dialog.sourceComponent = Qt.createComponent("Fk.LobbyElement", "CreateRoom");
|
||||
lobby_drawer.open();
|
||||
config.observing = false;
|
||||
}
|
||||
|
@ -225,10 +225,11 @@ Item {
|
|||
if (item === null)
|
||||
return;
|
||||
item.finished.connect(() => {
|
||||
source = "";
|
||||
sourceComponent = undefined;
|
||||
lobby_drawer.close();
|
||||
});
|
||||
}
|
||||
onSourceComponentChanged: sourceChanged();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -289,4 +290,3 @@ Item {
|
|||
toast.show(Backend.translate("$WelcomeToLobby"));
|
||||
}
|
||||
}
|
||||
|
|
@ -71,4 +71,3 @@ Item {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -4,10 +4,10 @@ import QtQuick
|
|||
import QtQuick.Controls
|
||||
import QtQuick.Layouts
|
||||
import QtMultimedia
|
||||
import "Common"
|
||||
import "RoomElement"
|
||||
import Fk
|
||||
import Fk.Common
|
||||
import Fk.RoomElement
|
||||
import "RoomLogic.js" as Logic
|
||||
import "skin-bank.js" as SkinBank
|
||||
|
||||
|
||||
Item {
|
||||
|
@ -100,7 +100,7 @@ Item {
|
|||
from: "*"; to: "notactive"
|
||||
ScriptAction {
|
||||
script: {
|
||||
skillInteraction.source = "";
|
||||
skillInteraction.sourceComponent = undefined;
|
||||
promptText = "";
|
||||
progress.visible = false;
|
||||
okCancel.visible = false;
|
||||
|
@ -128,7 +128,7 @@ Item {
|
|||
from: "*"; to: "playing"
|
||||
ScriptAction {
|
||||
script: {
|
||||
skillInteraction.source = "";
|
||||
skillInteraction.sourceComponent = undefined;
|
||||
dashboard.enableCards();
|
||||
dashboard.enableSkills();
|
||||
progress.visible = true;
|
||||
|
@ -143,7 +143,7 @@ Item {
|
|||
from: "*"; to: "responding"
|
||||
ScriptAction {
|
||||
script: {
|
||||
skillInteraction.source = "";
|
||||
skillInteraction.sourceComponent = undefined;
|
||||
dashboard.enableCards(responding_card);
|
||||
dashboard.enableSkills(responding_card, respond_play);
|
||||
autoPending = false;
|
||||
|
@ -157,7 +157,7 @@ Item {
|
|||
from: "*"; to: "replying"
|
||||
ScriptAction {
|
||||
script: {
|
||||
skillInteraction.source = "";
|
||||
skillInteraction.sourceComponent = undefined;
|
||||
dashboard.disableAllCards();
|
||||
dashboard.disableSkills();
|
||||
progress.visible = true;
|
||||
|
@ -435,7 +435,7 @@ Item {
|
|||
if (item === null)
|
||||
return;
|
||||
item.finished.connect(function(){
|
||||
source = "";
|
||||
sourceComponent = undefined;
|
||||
});
|
||||
item.widthChanged.connect(function(){
|
||||
popupBox.moveToCenter();
|
||||
|
@ -445,6 +445,7 @@ Item {
|
|||
});
|
||||
moveToCenter();
|
||||
}
|
||||
onSourceComponentChanged: sourceChanged();
|
||||
|
||||
function moveToCenter()
|
||||
{
|
||||
|
@ -460,11 +461,12 @@ Item {
|
|||
onSourceChanged: {
|
||||
if (item === null)
|
||||
return;
|
||||
item.finished.connect(() => source = "");
|
||||
item.finished.connect(() => sourceComponent = undefined);
|
||||
item.widthChanged.connect(() => manualBox.moveToCenter());
|
||||
item.heightChanged.connect(() => manualBox.moveToCenter());
|
||||
moveToCenter();
|
||||
}
|
||||
onSourceComponentChanged: sourceChanged();
|
||||
|
||||
function moveToCenter()
|
||||
{
|
||||
|
@ -486,30 +488,30 @@ Item {
|
|||
Backend.callLuaFunction("SetInteractionDataOfSkill", [skill_name, "null"]);
|
||||
switch (data.type) {
|
||||
case "combo":
|
||||
skillInteraction.source = "RoomElement/SkillInteraction/SkillCombo.qml";
|
||||
skillInteraction.sourceComponent = Qt.createComponent("Fk.SkillInteraction", "SkillCombo");
|
||||
skillInteraction.item.skill = skill_name;
|
||||
skillInteraction.item.default_choice = data["default"];
|
||||
skillInteraction.item.choices = data.choices;
|
||||
skillInteraction.item.clicked();
|
||||
// skillInteraction.item.clicked();
|
||||
break;
|
||||
case "spin":
|
||||
skillInteraction.source = "RoomElement/SkillInteraction/SkillSpin.qml";
|
||||
skillInteraction.sourceComponent = Qt.createComponent("Fk.SkillInteraction", "SkillSpin");
|
||||
skillInteraction.item.skill = skill_name;
|
||||
skillInteraction.item.from = data.from;
|
||||
skillInteraction.item.to = data.to;
|
||||
break;
|
||||
default:
|
||||
skillInteraction.source = "";
|
||||
skillInteraction.sourceComponent = undefined;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
skillInteraction.source = "";
|
||||
skillInteraction.sourceComponent = undefined;
|
||||
}
|
||||
|
||||
dashboard.startPending(skill_name);
|
||||
cancelButton.enabled = true;
|
||||
} else {
|
||||
skillInteraction.source = "";
|
||||
skillInteraction.sourceComponent = undefined;
|
||||
Logic.doCancelButton();
|
||||
}
|
||||
}
|
||||
|
@ -582,6 +584,7 @@ Item {
|
|||
cheatDrawer.close();
|
||||
});
|
||||
}
|
||||
onSourceComponentChanged: sourceChanged();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -798,8 +801,8 @@ Item {
|
|||
}
|
||||
}
|
||||
|
||||
function startCheat(source, data) {
|
||||
cheatLoader.source = source;
|
||||
function startCheat(type, data) {
|
||||
cheatLoader.sourceComponent = Qt.createComponent("Fk.Cheat", type);
|
||||
cheatLoader.item.extra_data = data;
|
||||
cheatDrawer.open();
|
||||
}
|
||||
|
@ -834,4 +837,3 @@ Item {
|
|||
Logic.arrangePhotos();
|
||||
}
|
||||
}
|
||||
|
|
@ -227,7 +227,7 @@ function setEmotion(id, emotion, isCardId) {
|
|||
// TODO: set picture emotion
|
||||
return;
|
||||
}
|
||||
let component = Qt.createComponent("RoomElement/PixmapAnimation.qml");
|
||||
let component = Qt.createComponent("Fk.RoomElement", "PixmapAnimation");
|
||||
if (component.status !== Component.Ready)
|
||||
return;
|
||||
|
||||
|
@ -276,7 +276,7 @@ function changeHp(id, delta, losthp) {
|
|||
}
|
||||
|
||||
function doIndicate(from, tos) {
|
||||
let component = Qt.createComponent("RoomElement/IndicatorLine.qml");
|
||||
let component = Qt.createComponent("Fk.RoomElement", "IndicatorLine");
|
||||
if (component.status !== Component.Ready)
|
||||
return;
|
||||
|
||||
|
@ -593,7 +593,7 @@ callbacks["AskForGeneral"] = function(jsonData) {
|
|||
let heg = data[2];
|
||||
roomScene.promptText = Backend.translate("#AskForGeneral");
|
||||
roomScene.state = "replying";
|
||||
roomScene.popupBox.source = "RoomElement/ChooseGeneralBox.qml";
|
||||
roomScene.popupBox.sourceComponent = Qt.createComponent("Fk.RoomElement", "ChooseGeneralBox");
|
||||
let box = roomScene.popupBox.item;
|
||||
box.accepted.connect(() => {
|
||||
replyToServer(JSON.stringify(box.choices));
|
||||
|
@ -626,7 +626,7 @@ callbacks["AskForGuanxing"] = function(jsonData) {
|
|||
let min_bottom_cards = data.min_bottom_cards;
|
||||
let max_bottom_cards = data.max_bottom_cards;
|
||||
roomScene.state = "replying";
|
||||
roomScene.popupBox.source = "RoomElement/GuanxingBox.qml";
|
||||
roomScene.popupBox.sourceComponent = Qt.createComponent("Fk.RoomElement", "GuanxingBox");
|
||||
data.cards.forEach(id => {
|
||||
let d = Backend.callLuaFunction("GetCardData", [id]);
|
||||
cards.push(JSON.parse(d));
|
||||
|
@ -662,7 +662,7 @@ callbacks["AskForChoice"] = function(jsonData) {
|
|||
roomScene.promptText = processPrompt(prompt);
|
||||
}
|
||||
roomScene.state = "replying";
|
||||
roomScene.popupBox.source = "RoomElement/ChoiceBox.qml";
|
||||
roomScene.popupBox.sourceComponent = Qt.createComponent("Fk.RoomElement", "ChoiceBox");
|
||||
let box = roomScene.popupBox.item;
|
||||
box.options = choices;
|
||||
box.skill_name = skill_name;
|
||||
|
@ -701,7 +701,7 @@ callbacks["AskForCardChosen"] = function(jsonData) {
|
|||
roomScene.promptText = Backend.translate("#AskForChooseCard")
|
||||
.arg(Backend.translate(reason));
|
||||
roomScene.state = "replying";
|
||||
roomScene.popupBox.source = "RoomElement/PlayerCardBox.qml";
|
||||
roomScene.popupBox.sourceComponent = Qt.createComponent("Fk.RoomElement", "PlayerCardBox");
|
||||
let box = roomScene.popupBox.item;
|
||||
box.addHandcards(handcards);
|
||||
box.addEquips(equips);
|
||||
|
@ -744,7 +744,7 @@ callbacks["AskForCardsChosen"] = function(jsonData) {
|
|||
roomScene.promptText = Backend.translate("#AskForChooseCard")
|
||||
.arg(Backend.translate(reason));
|
||||
roomScene.state = "replying";
|
||||
roomScene.popupBox.source = "RoomElement/PlayerCardBox.qml";
|
||||
roomScene.popupBox.sourceComponent = Qt.createComponent("Fk.RoomElement", "PlayerCardBox");
|
||||
let box = roomScene.popupBox.item;
|
||||
box.multiChoose = true;
|
||||
box.min = min;
|
||||
|
@ -933,7 +933,7 @@ callbacks["Animate"] = function(jsonData) {
|
|||
}
|
||||
case "InvokeSkill": {
|
||||
let id = data.player;
|
||||
let component = Qt.createComponent("RoomElement/SkillInvokeAnimation.qml");
|
||||
let component = Qt.createComponent("Fk.RoomElement", "SkillInvokeAnimation");
|
||||
if (component.status !== Component.Ready)
|
||||
return;
|
||||
|
||||
|
@ -997,7 +997,7 @@ callbacks["LogEvent"] = function(jsonData) {
|
|||
|
||||
callbacks["GameOver"] = function(jsonData) {
|
||||
roomScene.state = "notactive";
|
||||
roomScene.popupBox.source = "RoomElement/GameOverBox.qml";
|
||||
roomScene.popupBox.sourceComponent = Qt.createComponent("Fk.RoomElement", "GameOverBox");
|
||||
let box = roomScene.popupBox.item;
|
||||
box.winner = jsonData;
|
||||
roomScene.isStarted = false;
|
||||
|
@ -1006,7 +1006,7 @@ callbacks["GameOver"] = function(jsonData) {
|
|||
callbacks["FillAG"] = (j) => {
|
||||
let data = JSON.parse(j);
|
||||
let ids = data[0];
|
||||
roomScene.manualBox.source = "RoomElement/AG.qml";
|
||||
roomScene.manualBox.sourceComponent = Qt.createComponent("Fk.RoomElement", "AG");
|
||||
roomScene.manualBox.item.addIds(ids);
|
||||
}
|
||||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
import QtQuick
|
||||
import Qt5Compat.GraphicalEffects
|
||||
import "skin-bank.js" as SkinBank
|
||||
import Fk
|
||||
|
||||
Item {
|
||||
property alias text: labelText.text
|
12
Fk/Pages/qmldir
Normal file
12
Fk/Pages/qmldir
Normal file
|
@ -0,0 +1,12 @@
|
|||
module Fk.Pages
|
||||
About 1.0 About.qml
|
||||
CardsOverview 1.0 CardsOverview.qml
|
||||
Danmaku 1.0 Danmaku.qml
|
||||
GeneralsOverview 1.0 GeneralsOverview.qml
|
||||
Init 1.0 Init.qml
|
||||
Lobby 1.0 Lobby.qml
|
||||
MetroButton 1.0 MetroButton.qml
|
||||
ModesOverview 1.0 ModesOverview.qml
|
||||
PackageManage 1.0 PackageManage.qml
|
||||
Room 1.0 Room.qml
|
||||
TileButton 1.0 TileButton.qml
|
|
@ -1,8 +1,8 @@
|
|||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
import QtQuick
|
||||
import ".."
|
||||
import "../../skin-bank.js" as SkinBank
|
||||
import Fk
|
||||
import Fk.RoomElement
|
||||
|
||||
Item {
|
||||
InvisibleCardArea {
|
|
@ -1,8 +1,8 @@
|
|||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
import QtQuick
|
||||
import ".."
|
||||
import "../../skin-bank.js" as SkinBank
|
||||
import Fk
|
||||
import Fk.RoomElement
|
||||
|
||||
/* Layout of EquipArea:
|
||||
* | Treasure |
|
||||
|
@ -124,4 +124,3 @@ Column {
|
|||
return area.cards;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,9 +1,8 @@
|
|||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
import QtQuick
|
||||
import ".."
|
||||
import "../../../util.js" as Utility
|
||||
import "../../skin-bank.js" as SkinBank
|
||||
import Fk
|
||||
import Fk.RoomElement
|
||||
|
||||
Item {
|
||||
property int cid: 0
|
|
@ -1,8 +1,8 @@
|
|||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
import QtQuick
|
||||
import ".."
|
||||
import "../../skin-bank.js" as SkinBank
|
||||
import Fk
|
||||
import Fk.RoomElement
|
||||
|
||||
Column {
|
||||
id: root
|
||||
|
@ -83,4 +83,3 @@ Column {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
import QtQuick
|
||||
import "../../skin-bank.js" as SkinBank
|
||||
import Fk
|
||||
|
||||
Item {
|
||||
id: root
|
|
@ -1,7 +1,7 @@
|
|||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
import QtQuick
|
||||
import "../../skin-bank.js" as SkinBank
|
||||
import Fk
|
||||
|
||||
Image {
|
||||
source: SkinBank.MAGATAMA_DIR + "0"
|
||||
|
@ -57,4 +57,3 @@ Image {
|
|||
anchors.centerIn: parent
|
||||
}
|
||||
}
|
||||
|
|
@ -59,7 +59,7 @@ Item {
|
|||
return;
|
||||
|
||||
// Just for using room's right drawer
|
||||
roomScene.startCheat("RoomElement/ViewPile.qml", {
|
||||
roomScene.startCheat("ViewPile", {
|
||||
name: mark_name,
|
||||
ids: data
|
||||
});
|
|
@ -1,7 +1,7 @@
|
|||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
import QtQuick
|
||||
import "../../skin-bank.js" as SkinBank
|
||||
import Fk
|
||||
|
||||
Image {
|
||||
property string value: "unknown"
|
|
@ -1,5 +1,5 @@
|
|||
import QtQuick
|
||||
import "../../skin-bank.js" as SkinBank
|
||||
import Fk
|
||||
|
||||
Image {
|
||||
id: root
|
12
Fk/PhotoElement/qmldir
Normal file
12
Fk/PhotoElement/qmldir
Normal file
|
@ -0,0 +1,12 @@
|
|||
module Fk.PhotoElement
|
||||
DelayedTrickArea 1.0 DelayedTrickArea.qml
|
||||
EquipArea 1.0 EquipArea.qml
|
||||
EquipItem 1.0 EquipItem.qml
|
||||
HpBar 1.0 HpBar.qml
|
||||
LimitSkillArea 1.0 LimitSkillArea.qml
|
||||
LimitSkillItem 1.0 LimitSkillItem.qml
|
||||
Magatama 1.0 Magatama.qml
|
||||
MarkArea 1.0 MarkArea.qml
|
||||
RoleComboBox 1.0 RoleComboBox.qml
|
||||
Shield 1.0 Shield.qml
|
||||
SpecialMarkArea 1.0 SpecialMarkArea.qml
|
|
@ -78,4 +78,3 @@ Item {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
import QtQuick
|
||||
import Qt5Compat.GraphicalEffects
|
||||
import "../skin-bank.js" as SkinBank
|
||||
import Fk
|
||||
|
||||
/* Layout of card:
|
||||
* +--------+
|
||||
|
@ -70,7 +70,7 @@ Item {
|
|||
|
||||
onRightClicked: {
|
||||
if (!showDetail) return;
|
||||
roomScene.startCheat("RoomElement/Cheat/CardDetail.qml", { card: this });
|
||||
roomScene.startCheat("CardDetail", { card: this });
|
||||
}
|
||||
|
||||
RectangularGlow {
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import ".."
|
||||
import Fk.Pages
|
||||
|
||||
GraphicsBox {
|
||||
property var options: []
|
|
@ -1,8 +1,8 @@
|
|||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
import QtQuick
|
||||
import ".."
|
||||
import "../skin-bank.js" as SkinBank
|
||||
import Fk
|
||||
import Fk.Pages
|
||||
|
||||
GraphicsBox {
|
||||
property alias generalList: generalList
|
||||
|
@ -91,10 +91,7 @@ GraphicsBox {
|
|||
MetroButton {
|
||||
id: convertBtn
|
||||
text: Backend.translate("Same General Convert")
|
||||
onClicked: roomScene.startCheat(
|
||||
"RoomElement/Cheat/SameConvert.qml",
|
||||
{ cards: generalList }
|
||||
);
|
||||
onClicked: roomScene.startCheat("SameConvert", { cards: generalList });
|
||||
}
|
||||
|
||||
MetroButton {
|
||||
|
@ -112,7 +109,7 @@ GraphicsBox {
|
|||
enabled: choices.length > 0
|
||||
text: Backend.translate("Show General Detail")
|
||||
onClicked: roomScene.startCheat(
|
||||
"RoomElement/Cheat/GeneralDetail.qml",
|
||||
"GeneralDetail",
|
||||
{ generals: choices }
|
||||
);
|
||||
}
|
||||
|
@ -146,7 +143,7 @@ GraphicsBox {
|
|||
|
||||
onRightClicked: {
|
||||
if (selectedItem.indexOf(this) === -1 && config.enableFreeAssign)
|
||||
roomScene.startCheat("RoomElement/Cheat/FreeAssign.qml", { card: this });
|
||||
roomScene.startCheat("FreeAssign", { card: this });
|
||||
}
|
||||
|
||||
onReleased: {
|
|
@ -73,7 +73,7 @@ RowLayout {
|
|||
if (expanded_pile_names.indexOf(pile) !== -1)
|
||||
return;
|
||||
|
||||
let component = Qt.createComponent("CardItem.qml");
|
||||
let component = Qt.createComponent("Fk.RoomElement", "CardItem");
|
||||
let parentPos = roomScene.mapFromItem(self, 0, 0);
|
||||
|
||||
expanded_piles[pile] = [];
|
|
@ -1,7 +1,7 @@
|
|||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
import QtQuick
|
||||
import ".."
|
||||
import Fk.Pages
|
||||
|
||||
GraphicsBox {
|
||||
property string winner: ""
|
|
@ -2,8 +2,8 @@
|
|||
|
||||
import QtQuick
|
||||
import Qt5Compat.GraphicalEffects
|
||||
import "PhotoElement"
|
||||
import "../skin-bank.js" as SkinBank
|
||||
import Fk
|
||||
import Fk.PhotoElement
|
||||
|
||||
/* Layout of general card:
|
||||
* +--------+
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import ".."
|
||||
import Fk.Pages
|
||||
|
||||
GraphicsBox {
|
||||
id: root
|
|
@ -1,7 +1,7 @@
|
|||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
import QtQuick
|
||||
import "../../util.js" as Utility
|
||||
import Fk
|
||||
|
||||
Item {
|
||||
property alias cards: cardArea.cards
|
|
@ -50,7 +50,7 @@ Item {
|
|||
|
||||
function remove(outputs)
|
||||
{
|
||||
let component = Qt.createComponent("CardItem.qml");
|
||||
let component = Qt.createComponent("Fk.RoomElement", "CardItem");
|
||||
if (component.status !== Component.Ready)
|
||||
return [];
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
import QtQuick
|
||||
import "../skin-bank.js" as SkinBank
|
||||
import Fk
|
||||
|
||||
Item {
|
||||
id: root
|
|
@ -3,8 +3,8 @@
|
|||
import QtQuick
|
||||
import Qt5Compat.GraphicalEffects
|
||||
import QtQuick.Controls
|
||||
import "PhotoElement"
|
||||
import "../skin-bank.js" as SkinBank
|
||||
import Fk
|
||||
import Fk.PhotoElement
|
||||
|
||||
Item {
|
||||
id: root
|
||||
|
@ -595,6 +595,6 @@ Item {
|
|||
}
|
||||
|
||||
function showDetail() {
|
||||
roomScene.startCheat("RoomElement/Cheat/PlayerDetail.qml", { photo: this });
|
||||
roomScene.startCheat("PlayerDetail", { photo: this });
|
||||
}
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
import QtQuick
|
||||
import "../skin-bank.js" as SkinBank
|
||||
import Fk
|
||||
|
||||
Item {
|
||||
property string source: ""
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import ".."
|
||||
import Fk.Pages
|
||||
|
||||
GraphicsBox {
|
||||
id: root
|
|
@ -1,7 +1,7 @@
|
|||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
import QtQuick
|
||||
import "../skin-bank.js" as SkinBank
|
||||
import Fk
|
||||
|
||||
Item {
|
||||
id: root
|
24
Fk/RoomElement/qmldir
Normal file
24
Fk/RoomElement/qmldir
Normal file
|
@ -0,0 +1,24 @@
|
|||
module Fk.RoomElement
|
||||
AG 1.0 AG.qml
|
||||
CardArea 1.0 CardArea.qml
|
||||
CardItem 1.0 CardItem.qml
|
||||
ChoiceBox 1.0 ChoiceBox.qml
|
||||
ChooseGeneralBox 1.0 ChooseGeneralBox.qml
|
||||
Dashboard 1.0 Dashboard.qml
|
||||
GameOverBox 1.0 GameOverBox.qml
|
||||
GeneralCardItem 1.0 GeneralCardItem.qml
|
||||
GlowText 1.0 GlowText.qml
|
||||
GraphicsBox 1.0 GraphicsBox.qml
|
||||
GuanxingBox 1.0 GuanxingBox.qml
|
||||
HandcardArea 1.0 HandcardArea.qml
|
||||
IndicatorLine 1.0 IndicatorLine.qml
|
||||
InvisibleCardArea 1.0 InvisibleCardArea.qml
|
||||
MiscStatus 1.0 MiscStatus.qml
|
||||
Photo 1.0 Photo.qml
|
||||
PixmapAnimation 1.0 PixmapAnimation.qml
|
||||
PlayerCardBox 1.0 PlayerCardBox.qml
|
||||
SkillArea 1.0 SkillArea.qml
|
||||
SkillButton 1.0 SkillButton.qml
|
||||
SkillInvokeAnimation 1.0 SkillInvokeAnimation.qml
|
||||
TablePile 1.0 TablePile.qml
|
||||
ViewPile 1.0 ViewPile.qml
|
|
@ -1,7 +1,7 @@
|
|||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
import QtQuick
|
||||
import "../.."
|
||||
import Fk.Pages
|
||||
|
||||
MetroButton {
|
||||
id: root
|
||||
|
@ -21,7 +21,7 @@ MetroButton {
|
|||
}
|
||||
|
||||
onClicked: {
|
||||
roomScene.popupBox.source = "RoomElement/ChoiceBox.qml";
|
||||
roomScene.popupBox.sourceComponent = Qt.createComponent("Fk.RoomElement", "ChoiceBox");
|
||||
let box = roomScene.popupBox.item;
|
||||
box.options = choices;
|
||||
box.accepted.connect(() => {
|
|
@ -18,4 +18,3 @@ SpinBox {
|
|||
}
|
||||
|
||||
}
|
||||
|
3
Fk/SkillInteraction/qmldir
Normal file
3
Fk/SkillInteraction/qmldir
Normal file
|
@ -0,0 +1,3 @@
|
|||
module Fk.SkillInteraction
|
||||
SkillCombo 1.0 SkillCombo.qml
|
||||
SkillSpin 1.0 SkillSpin.qml
|
|
@ -4,7 +4,7 @@ import QtQuick
|
|||
import QtQuick.Controls
|
||||
import QtQuick.Window
|
||||
import "Logic.js" as Logic
|
||||
import "Pages"
|
||||
import Fk.Pages
|
||||
|
||||
Window {
|
||||
id: realMainWin
|
||||
|
@ -45,12 +45,11 @@ Item {
|
|||
id: mainStack
|
||||
visible: !mainWindow.busy
|
||||
// If error occurs during loading initialItem, the program will fall into "polish()" loop
|
||||
// initialItem: OS !== "Web" ? init : webinit
|
||||
// initialItem: init
|
||||
anchors.fill: parent
|
||||
}
|
||||
|
||||
Component { id: init; Init {} }
|
||||
Component { id: webinit; WebInit {} }
|
||||
Component { id: packageManage; PackageManage {} }
|
||||
Component { id: lobby; Lobby {} }
|
||||
Component { id: generalsOverview; GeneralsOverview {} }
|
||||
|
@ -123,73 +122,6 @@ Item {
|
|||
}
|
||||
}
|
||||
|
||||
// global popup. it is modal and just lower than toast
|
||||
Rectangle {
|
||||
id: globalPopupDim
|
||||
anchors.fill: parent
|
||||
color: "black"
|
||||
opacity: 0
|
||||
visible: !mainWindow.busy
|
||||
|
||||
property bool stateVisible: false
|
||||
states: [
|
||||
State {
|
||||
when: globalPopupDim.stateVisible
|
||||
PropertyChanges { target: globalPopupDim; opacity: 0.5 }
|
||||
},
|
||||
State {
|
||||
when: !globalPopupDim.stateVisible
|
||||
PropertyChanges { target: globalPopupDim; opacity: 0.0 }
|
||||
}
|
||||
]
|
||||
|
||||
transitions: Transition {
|
||||
NumberAnimation { properties: "opacity"; easing.type: Easing.InOutQuad }
|
||||
}
|
||||
}
|
||||
|
||||
Popup {
|
||||
id: globalPopup
|
||||
property string source: ""
|
||||
modal: true
|
||||
dim: false // cannot animate the dim
|
||||
focus: true
|
||||
opacity: mainWindow.busy ? 0 : 1
|
||||
closePolicy: Popup.CloseOnEscape
|
||||
anchors.centerIn: parent
|
||||
|
||||
onAboutToShow: {
|
||||
globalPopupDim.stateVisible = true
|
||||
}
|
||||
|
||||
enter: Transition {
|
||||
NumberAnimation { properties: "opacity"; from: 0; to: 1 }
|
||||
NumberAnimation { properties: "scale"; from: 0.4; to: 1 }
|
||||
}
|
||||
|
||||
onAboutToHide: {
|
||||
globalPopupDim.stateVisible = false
|
||||
}
|
||||
|
||||
exit: Transition {
|
||||
NumberAnimation { properties: "opacity"; from: 1; to: 0 }
|
||||
NumberAnimation { properties: "scale"; from: 1; to: 0.4 }
|
||||
}
|
||||
|
||||
Loader {
|
||||
visible: !mainWindow.busy
|
||||
source: globalPopup.source === "" ? "" : "GlobalPopups/" + globalPopup.source
|
||||
onSourceChanged: {
|
||||
if (item === null)
|
||||
return;
|
||||
item.finished.connect(() => {
|
||||
globalPopup.close();
|
||||
globalPopup.source = "";
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Popup {
|
||||
id: errDialog
|
||||
property string txt: ""
|
||||
|
@ -266,16 +198,12 @@ Item {
|
|||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
if (OS !== "Web") {
|
||||
mainStack.push(init);
|
||||
if (!Debugging) {
|
||||
splashLoader.source = "Splash.qml";
|
||||
splashLoader.item.disappeared.connect(() => {
|
||||
splashLoader.source = "";
|
||||
});
|
||||
}
|
||||
} else {
|
||||
mainStack.push(webinit);
|
||||
mainStack.push(init);
|
||||
if (!Debugging) {
|
||||
splashLoader.source = "Splash.qml";
|
||||
splashLoader.item.disappeared.connect(() => {
|
||||
splashLoader.source = "";
|
||||
});
|
||||
}
|
||||
if (OS !== "Android" && OS !== "Web") {
|
||||
x = config.winX;
|
3
Fk/qmldir
Normal file
3
Fk/qmldir
Normal file
|
@ -0,0 +1,3 @@
|
|||
module Fk
|
||||
SkinBank 1.0 skin-bank.js
|
||||
Utility 1.0 util.js
|
|
@ -27,6 +27,7 @@ cp -r ../packages/test assets/res/packages
|
|||
rm assets/res/packages/test/test.lua
|
||||
cp ../packages/init.sql assets/res/packages
|
||||
cp -r ../qml assets/res
|
||||
cp -r ../Fk assets/res
|
||||
mkdir assets/res/server
|
||||
cp ../server/init.sql assets/res/server
|
||||
cp ../LICENSE assets/res
|
||||
|
|
|
@ -1,187 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import QtQuick.Controls
|
||||
|
||||
Item {
|
||||
id: root
|
||||
|
||||
Item {
|
||||
width: 960 * 0.8
|
||||
height: 540 * 0.8
|
||||
anchors.centerIn: parent
|
||||
|
||||
Item {
|
||||
id: left
|
||||
width: 300
|
||||
height: parent.height
|
||||
|
||||
Image {
|
||||
id: lady
|
||||
width: parent.width + 20
|
||||
height: parent.height
|
||||
fillMode: Image.PreserveAspectFit
|
||||
}
|
||||
|
||||
Image {
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.bottomMargin: 12
|
||||
width: parent.width
|
||||
source: AppPath + "/image/widelogo"
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
id: right
|
||||
anchors.left: left.right
|
||||
width: parent.width - left.width
|
||||
height: parent.height
|
||||
color: "#88EEEEEE"
|
||||
radius: 16
|
||||
|
||||
ColumnLayout {
|
||||
width: parent.width * 0.8
|
||||
height: parent.height * 0.8
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
anchors.top: parent.top
|
||||
anchors.topMargin: 40
|
||||
//spacing
|
||||
|
||||
Text {
|
||||
text: qsTr("Welcome back!")
|
||||
font.pixelSize: 28
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
}
|
||||
|
||||
GridLayout {
|
||||
columns: 2
|
||||
rowSpacing: 20
|
||||
|
||||
Text {
|
||||
text: qsTr("Server Addr")
|
||||
}
|
||||
ComboBox {
|
||||
id: server_addr
|
||||
Layout.fillWidth: true
|
||||
model: []
|
||||
editable: true
|
||||
|
||||
onEditTextChanged: {
|
||||
if (model.indexOf(editText) === -1) {
|
||||
passwordEdit.text = "";
|
||||
} else {
|
||||
let data = config.savedPassword[editText];
|
||||
screenNameEdit.text = data.username;
|
||||
passwordEdit.text = data.shorten_password;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Text {
|
||||
text: qsTr("Username")
|
||||
}
|
||||
TextField {
|
||||
id: screenNameEdit
|
||||
Layout.fillWidth: true
|
||||
placeholderText: qsTr("Username")
|
||||
text: ""
|
||||
onTextChanged: {
|
||||
passwordEdit.text = "";
|
||||
let data = config.savedPassword[server_addr.editText];
|
||||
if (data) {
|
||||
if (text === data.username) {
|
||||
passwordEdit.text = data.shorten_password;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
CheckBox {
|
||||
id: showPasswordCheck
|
||||
text: qsTr("Show Password")
|
||||
}
|
||||
TextField {
|
||||
id: passwordEdit
|
||||
Layout.fillWidth: true
|
||||
placeholderText: qsTr("Password")
|
||||
text: ""
|
||||
echoMode: showPasswordCheck.checked ? TextInput.Normal : TextInput.Password
|
||||
passwordCharacter: "*"
|
||||
}
|
||||
}
|
||||
|
||||
Button {
|
||||
text: qsTr("Join Server")
|
||||
Layout.fillWidth: true
|
||||
display: AbstractButton.TextBesideIcon
|
||||
icon.name: "go-next"
|
||||
enabled: passwordEdit.text !== ""
|
||||
onClicked: {
|
||||
config.serverAddr = server_addr.editText;
|
||||
config.screenName = screenNameEdit.text;
|
||||
config.password = passwordEdit.text;
|
||||
mainWindow.busy = true;
|
||||
Backend.joinServer(server_addr.editText);
|
||||
}
|
||||
}
|
||||
|
||||
Button {
|
||||
Layout.fillWidth: true
|
||||
text: qsTr("PackageManage")
|
||||
onClicked: {
|
||||
mainStack.push(packageManage);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Text {
|
||||
anchors.left: parent.left
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.leftMargin: 12
|
||||
anchors.bottomMargin: 12
|
||||
text: "FreeKill " + FkVersion
|
||||
font.pixelSize: 16
|
||||
font.bold: true
|
||||
}
|
||||
|
||||
Text {
|
||||
anchors.right: parent.right
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.rightMargin: 8
|
||||
anchors.bottomMargin: 8
|
||||
text: qsTr("FAQ")
|
||||
color: "blue"
|
||||
font.pixelSize: 24
|
||||
font.underline: true
|
||||
|
||||
TapHandler {
|
||||
onTapped: {
|
||||
errDialog.txt = qsTr("$LoginFAQ");
|
||||
errDialog.open();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function downloadComplete() {
|
||||
toast.show(qsTr("updated packages for md5"));
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
config.loadConf();
|
||||
|
||||
lady.source = config.ladyImg;
|
||||
|
||||
server_addr.model = Object.keys(config.savedPassword);
|
||||
server_addr.onModelChanged();
|
||||
server_addr.currentIndex = server_addr.model.indexOf(config.lastLoginServer);
|
||||
|
||||
let data = config.savedPassword[config.lastLoginServer];
|
||||
if (data) {
|
||||
screenNameEdit.text = data.username;
|
||||
passwordEdit.text = data.shorten_password;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -217,6 +217,8 @@ QString calcFileMD5() {
|
|||
writeDirMD5(flist, "lua", "*.lua");
|
||||
writeDirMD5(flist, "qml", "*.qml");
|
||||
writeDirMD5(flist, "qml", "*.js");
|
||||
writeDirMD5(flist, "Fk", "*.qml");
|
||||
writeDirMD5(flist, "Fk", "*.js");
|
||||
|
||||
// then, return flist.txt's md5
|
||||
flist.close();
|
||||
|
|
|
@ -288,8 +288,10 @@ int main(int argc, char *argv[]) {
|
|||
engine->rootContext()->setContextProperty(
|
||||
"AppPath", QUrl::fromLocalFile(QDir::currentPath()));
|
||||
|
||||
engine->addImportPath(QDir::currentPath());
|
||||
|
||||
// 加载完全局变量后,就再去加载 main.qml,此时UI界面正式显示
|
||||
engine->load("qml/main.qml");
|
||||
engine->load("Fk/main.qml");
|
||||
|
||||
// qml 报错了就直接退出吧
|
||||
if (engine->rootObjects().isEmpty())
|
||||
|
|
Loading…
Reference in New Issue
Block a user