Commit 129a7a01 authored by timel's avatar timel

Merge branch 'dev/sort-in-deck' into 'main'

fix/small

See merge request !259
parents 6ae9cd3b 6db7b43e
......@@ -30,5 +30,6 @@
width: 100%;
background-image: url("/neos-assets/noise-light.webp");
opacity: $opacity;
pointer-events: none;
}
}
......@@ -24,6 +24,7 @@
padding: 15px;
display: flex;
flex-direction: column;
position: relative;
}
.btn-close {
......@@ -40,6 +41,11 @@
border-radius: 4px;
overflow: hidden;
box-shadow: 0px 14px 20px -5px rgba(0, 0, 0, 0.3);
transition: 0.2s;
&:hover {
--width: 220px;
box-shadow: 0px 20px 20px -5px rgb(0 0 0 / 60%);
}
}
.title {
......
......@@ -52,12 +52,14 @@ export const DeckSelect: React.FC<{
okText: "上传",
maskClosable: true,
onOk: async () => {
const newDecks = await Promise.all(
const results = await Promise.all(
newDeck.current.map((deck) => deckStore.add(deck))
);
newDecks.every(Boolean)
? message.success("上传成功")
: message.error("部分文件上传失败");
newDeck.current = [];
if (results.length)
results.every(Boolean)
? message.success("上传成功")
: message.error("部分文件上传失败");
},
});
......
......@@ -42,35 +42,38 @@ export const editDeckStore = proxy({
},
/** 一张卡能不能放入某个区 */
canAdd(card: CardMeta, type: Type): { result: boolean; reason: string } {
const deckType = editDeckStore[type];
const cardType = card.data.type ?? 0;
let result = true,
reason = "";
const initialCards = editDeckStore[type];
// 如果是衍生物,则不能添加
if (isToken(card.data.type ?? 0)) {
if (isToken(cardType)) {
result = false;
reason = "不能添加衍生物";
}
// 超出数量,则不能添加
const countLimit = type === "main" ? 60 : 15;
if (initialCards.length >= countLimit) {
if (deckType.length >= countLimit) {
result = false;
reason = `超过 ${countLimit} 张的上限`;
}
// 接着需要检查卡的种类
if (
(type === "extra" && !isExtraDeckCard(card.data.type ?? 0)) ||
(type === "main" && isExtraDeckCard(card.data.type ?? 0))
(type === "extra" && !isExtraDeckCard(cardType)) ||
(type === "main" && isExtraDeckCard(cardType))
) {
result = false;
reason = "卡片种类不符合";
}
// 同名卡不超过三张
const maxSameCard = 3; // TODO: 禁卡表
const sameCardCount = initialCards.filter((c) => c.id === card.id).length;
const sameCardCount = deckType.filter((c) => c.id === card.id).length;
if (sameCardCount >= maxSameCard) {
result = false;
reason = `超过同名卡 ${maxSameCard} 张的上限`;
}
return { result, reason };
},
}) satisfies EditingDeck;
......@@ -41,14 +41,17 @@ export const compareCards = (a: CardMeta, b: CardMeta): number => {
/** 生成ydk格式的卡组文本 */
function genYdkText(deck: IDeck): string {
const lines: string[] = [];
lines.push("#created by neos");
lines.push("#main");
lines.push(...deck.main.map((cardId) => cardId.toString()));
lines.push("#extra");
lines.push(...deck.extra.map((cardId) => cardId.toString()));
lines.push("!side");
lines.push(...deck.side.map((cardId) => cardId.toString()));
const { main, extra, side } = deck;
const lines = [
"#created by neos",
"#main",
...main.map((cardId) => cardId.toString()),
"#extra",
...extra.map((cardId) => cardId.toString()),
"!side",
...side.map((cardId) => cardId.toString()),
];
return lines.join("\n");
}
......
// 此文件目的是在js和CSS之间共享一些变量,并且这些变量是0运行时的。
type CSSConfig = Record<string, [number, UNIT]>;
interface CSSConfig {
readonly [key: string]: [number, UNIT];
}
/** 转为CSS变量: BOARD_ROTATE_Z -> --board-rotate-z */
const toCssProperties = (config: CSSConfig) =>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment