2023-04-09 05:35:35 +00:00
|
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
|
2022-09-14 05:01:10 +00:00
|
|
|
import QtQuick
|
2023-05-19 02:08:36 +00:00
|
|
|
import Fk
|
|
|
|
import Fk.RoomElement
|
2022-04-14 10:22:00 +00:00
|
|
|
|
|
|
|
/* Layout of EquipArea:
|
|
|
|
* | Treasure |
|
|
|
|
| Weapon |
|
|
|
|
| Armor |
|
|
|
|
| +1 | -1 |
|
|
|
|
+---------------+
|
|
|
|
*/
|
|
|
|
|
2023-10-18 13:46:11 +00:00
|
|
|
Item {
|
2023-08-12 18:25:04 +00:00
|
|
|
id: root
|
|
|
|
|
2023-06-09 18:18:51 +00:00
|
|
|
height: 70
|
2022-04-30 07:27:56 +00:00
|
|
|
width: 138
|
2023-08-12 18:25:04 +00:00
|
|
|
property int itemHeight: (treasureItem.name === "" && !treasureItem.sealed) ? height / 3 : height / 4
|
2022-04-30 07:27:56 +00:00
|
|
|
property var items: [treasureItem, weaponItem, armorItem, defensiveHorseItem, offensiveHorseItem]
|
|
|
|
property var subtypes: ["treasure", "weapon", "armor", "defensive_horse", "offensive_horse"]
|
|
|
|
property int length: area.length
|
|
|
|
|
2023-10-18 13:46:11 +00:00
|
|
|
// FIXME: Qt 6.6
|
|
|
|
Column {
|
|
|
|
anchors.fill: parent
|
2022-04-30 07:27:56 +00:00
|
|
|
InvisibleCardArea {
|
|
|
|
id: area
|
2023-01-29 10:11:41 +00:00
|
|
|
anchors.centerIn: parent
|
2022-04-30 07:27:56 +00:00
|
|
|
checkExisting: true
|
|
|
|
}
|
|
|
|
|
|
|
|
EquipItem {
|
|
|
|
id: treasureItem
|
2023-08-12 18:25:04 +00:00
|
|
|
subtype: "treasure"
|
2022-04-30 07:27:56 +00:00
|
|
|
width: parent.width
|
2023-08-12 18:25:04 +00:00
|
|
|
height: (name === "" && !sealed) ? 0 : itemHeight
|
2022-04-30 07:27:56 +00:00
|
|
|
opacity: 0
|
2023-08-12 18:25:04 +00:00
|
|
|
sealed: root.parent.sealedSlots.includes('TreasureSlot')
|
2022-04-30 07:27:56 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
EquipItem {
|
|
|
|
id: weaponItem
|
2023-08-12 18:25:04 +00:00
|
|
|
subtype: "weapon"
|
2022-04-30 07:27:56 +00:00
|
|
|
width: parent.width
|
|
|
|
height: itemHeight
|
|
|
|
opacity: 0
|
2023-08-12 18:25:04 +00:00
|
|
|
sealed: root.parent.sealedSlots.includes('WeaponSlot')
|
2022-04-30 07:27:56 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
EquipItem {
|
|
|
|
id: armorItem
|
2023-08-12 18:25:04 +00:00
|
|
|
subtype: "armor"
|
2022-04-30 07:27:56 +00:00
|
|
|
width: parent.width
|
|
|
|
height: itemHeight
|
|
|
|
opacity: 0
|
2023-08-12 18:25:04 +00:00
|
|
|
sealed: root.parent.sealedSlots.includes('ArmorSlot')
|
2022-04-30 07:27:56 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
Row {
|
2023-10-18 13:46:11 +00:00
|
|
|
width: root.width
|
2022-04-30 07:27:56 +00:00
|
|
|
height: itemHeight
|
|
|
|
|
|
|
|
Item {
|
|
|
|
width: Math.ceil(parent.width / 2)
|
|
|
|
height: itemHeight
|
|
|
|
|
|
|
|
EquipItem {
|
|
|
|
id: defensiveHorseItem
|
2022-04-14 10:22:00 +00:00
|
|
|
width: parent.width
|
|
|
|
height: itemHeight
|
2022-04-30 07:27:56 +00:00
|
|
|
icon: "horse"
|
2022-04-14 10:22:00 +00:00
|
|
|
opacity: 0
|
2023-08-12 18:25:04 +00:00
|
|
|
sealed: root.parent.sealedSlots.includes('DefensiveRideSlot')
|
2022-04-30 07:27:56 +00:00
|
|
|
}
|
2022-04-14 10:22:00 +00:00
|
|
|
}
|
|
|
|
|
2022-04-30 07:27:56 +00:00
|
|
|
Item {
|
|
|
|
width: Math.floor(parent.width / 2)
|
|
|
|
height: itemHeight
|
2022-04-14 10:22:00 +00:00
|
|
|
|
2022-04-30 07:27:56 +00:00
|
|
|
EquipItem {
|
|
|
|
id: offensiveHorseItem
|
2022-04-14 10:22:00 +00:00
|
|
|
width: parent.width
|
|
|
|
height: itemHeight
|
2022-04-30 07:27:56 +00:00
|
|
|
icon: "horse"
|
2022-04-14 10:22:00 +00:00
|
|
|
opacity: 0
|
2023-08-12 18:25:04 +00:00
|
|
|
sealed: root.parent.sealedSlots.includes('OffensiveRideSlot')
|
2022-04-30 07:27:56 +00:00
|
|
|
}
|
2022-04-14 10:22:00 +00:00
|
|
|
}
|
2022-04-30 07:27:56 +00:00
|
|
|
}
|
2023-10-18 13:46:11 +00:00
|
|
|
}
|
2022-04-30 07:27:56 +00:00
|
|
|
|
|
|
|
function add(inputs)
|
|
|
|
{
|
|
|
|
area.add(inputs);
|
|
|
|
|
|
|
|
let card, item;
|
|
|
|
if (inputs instanceof Array) {
|
|
|
|
for (let i = 0; i < inputs.length; i++) {
|
|
|
|
card = inputs[i];
|
|
|
|
item = items[subtypes.indexOf(card.subtype)];
|
|
|
|
item.setCard(card);
|
|
|
|
item.show();
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
card = inputs;
|
|
|
|
item = items[subtypes.indexOf(card.subtype)];
|
|
|
|
item.setCard(card);
|
|
|
|
item.show();
|
2022-04-14 10:22:00 +00:00
|
|
|
}
|
2022-04-30 07:27:56 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function remove(outputs)
|
|
|
|
{
|
2023-06-09 09:23:02 +00:00
|
|
|
const result = area.remove(outputs);
|
2022-04-30 07:27:56 +00:00
|
|
|
for (let i = 0; i < result.length; i++) {
|
2023-06-09 09:23:02 +00:00
|
|
|
const card = result[i];
|
2022-04-30 07:27:56 +00:00
|
|
|
for (let j = 0; j < items.length; j++) {
|
2023-06-09 09:23:02 +00:00
|
|
|
const item = items[j];
|
2022-04-30 07:27:56 +00:00
|
|
|
if (item.cid === card.cid) {
|
|
|
|
item.reset();
|
|
|
|
item.hide();
|
2022-04-14 10:22:00 +00:00
|
|
|
}
|
2022-04-30 07:27:56 +00:00
|
|
|
}
|
2022-04-14 10:22:00 +00:00
|
|
|
}
|
|
|
|
|
2022-04-30 07:27:56 +00:00
|
|
|
return result;
|
|
|
|
}
|
2022-04-14 10:22:00 +00:00
|
|
|
|
2022-04-30 07:27:56 +00:00
|
|
|
function updateCardPosition(animated)
|
|
|
|
{
|
|
|
|
area.updateCardPosition(animated);
|
|
|
|
}
|
2022-09-14 05:01:10 +00:00
|
|
|
|
|
|
|
function getAllCards() {
|
|
|
|
return area.cards;
|
|
|
|
}
|
2022-04-14 10:22:00 +00:00
|
|
|
}
|