This commit is contained in:
Aotumuri
2025-05-30 14:58:00 +09:00
parent 10846cc4a9
commit 6e924c24a9
4 changed files with 26 additions and 63 deletions
+16 -50
View File
@@ -1,52 +1,18 @@
{
"patterns": {
"stripes_v": {
"patternBase64": "AQACAAIACKA="
},
"stripes_h": {
"patternBase64": "AQACAAIACMA="
},
"checkerboard": {
"patternBase64": "AQACAAIACJA="
},
"diagonal": {
"patternBase64": "AQAQABAAAYAAQAAgABAACAAEAAIAAQAAgABAACAAEAAIAAQAAgAB"
},
"cross": {
"patternBase64": "AQAQABAAAYABQAIgBBAICBAEIAJAAYABgAJABCAIEBAIIARAAoAB"
},
"mini_cross": {
"patternBase64": "AQAQAAgAAcADMAwMMAPAA8AMMDAMwAM="
},
"horizontal_stripes": {
"patternBase64": "AQAQABAAAf//AAAAAAAAAAAAAAAAAAD//wAAAAAAAAAAAAAAAAAA"
},
"sparse_dots": {
"patternBase64": "AQAQABAAAYCAAAAAAAAAAAAAAAAAAACAgAAAAAAAAAAAAAAAAAAA"
},
"evan": {
"patternBase64": "AQAYAAcABQAAAHkjEkEkmnEnlkDEknjEkgAAAA=="
},
"diagonal_stripe": {
"patternBase64": "AQAQAAgAAYABQAIgBBAICBAEIAJAAYA="
},
"mountain_ridge": {
"patternBase64": "AQAQAAgAAQAAGBg8PH5+//9+fjw8GBg="
},
"scattered_dots": {
"patternBase64": "AQAQAAgAAQAAQAQAAAAAAAAAABAIAAA="
},
"circuit_board": {
"patternBase64": "AQAQAAgAAcPDw8MwMDAwDDAMMMPDw8M="
},
"vertical_bars": {
"patternBase64": "AQAQAAgAAZJJkkmSSZJJkkmSSZJJkkk="
},
".w.": {
"patternBase64": "AQAQAAgAAQAAAAAAAEACQYIiRHQuaBY="
},
"openfront": {
"patternBase64": "AQBCAAoABQAAAAAAAAAAAAAAAAAAAAABw4+RD54cRfCJEgZCBEiZECJEgVCBEiVECJ48TDx4iTECJAgRCBQiRECJAgRCBIiREBxA+RCBEcREAAAAAAAAAAAA"
}
}
"stripes_v": "AQACAAIACKA=",
"stripes_h": "AQACAAIACMA=",
"checkerboard": "AQACAAIACJA=",
"diagonal": "AQAQABAAAYAAQAAgABAACAAEAAIAAQAAgABAACAAEAAIAAQAAgAB",
"cross": "AQAQABAAAYABQAIgBBAICBAEIAJAAYABgAJABCAIEBAIIARAAoAB",
"mini_cross": "AQAQAAgAAcADMAwMMAPAA8AMMDAMwAM=",
"horizontal_stripes": "AQAQABAAAf//AAAAAAAAAAAAAAAAAAD//wAAAAAAAAAAAAAAAAAA",
"sparse_dots": "AQAQABAAAYCAAAAAAAAAAAAAAAAAAACAgAAAAAAAAAAAAAAAAAAA",
"evan": "AQAYAAcABQAAAHkjEkEkmnEnlkDEknjEkgAAAA==",
"diagonal_stripe": "AQAQAAgAAYABQAIgBBAICBAEIAJAAYA=",
"mountain_ridge": "AQAQAAgAAQAAGBg8PH5+//9+fjw8GBg=",
"scattered_dots": "AQAQAAgAAQAAQAQAAAAAAAAAABAIAAA=",
"circuit_board": "AQAQAAgAAcPDw8MwMDAwDDAMMMPDw8M=",
"vertical_bars": "AQAQAAgAAZJJkkmSSZJJkkmSSZJJkkk=",
".w.": "AQAQAAgAAQAAAAAAAEACQYIiRHQuaBY=",
"openfront": "AQBCAAoABQAAAAAAAAAAAAAAAAAAAAABw4+RD54cRfCJEgZCBEiZECJEgVCBEiVECJ48TDx4iTECJAgRCBQiRECJAgRCBIiREBxA+RCBEcREAAAAAAAAAAAA"
}
+4 -7
View File
@@ -1,13 +1,10 @@
import { z } from "zod";
import rawTerritoryPatterns from "../../resources/territory_patterns.json";
const PatternSchema = z.object({
patternBase64: z.string().optional(),
});
const TerritoryPatternsSchema = z.object({
patterns: z.record(PatternSchema),
});
export const TerritoryPatternsSchema = z.record(
z.string(),
z.string().base64(),
);
export const territoryPatterns =
TerritoryPatternsSchema.parse(rawTerritoryPatterns);
+4 -4
View File
@@ -82,7 +82,7 @@ export class territoryPatternsModal extends LitElement {
class="flex flex-wrap gap-4 p-2"
style="justify-content: center; align-items: flex-start;"
>
${Object.entries(territoryPatterns.patterns).map(([key, pattern]) => {
${Object.entries(territoryPatterns ?? {}).map(([key, pattern]) => {
const isLocked = this.isPatternLocked(key);
const reason = this.lockedReasons[key] || "Locked";
@@ -114,7 +114,7 @@ export class territoryPatternsModal extends LitElement {
"
>
${(() => {
const decoder = new PatternDecoder(pattern.patternBase64!);
const decoder = new PatternDecoder(pattern);
const cellCountX = decoder.getTileWidth();
const cellCountY = decoder.getTileHeight();
const cellSize = Math.floor(
@@ -186,12 +186,12 @@ export class territoryPatternsModal extends LitElement {
private updatePreview() {
if (!this.previewButton || !this.selectedPattern) return;
const pattern = territoryPatterns.patterns[this.selectedPattern];
const pattern = territoryPatterns[this.selectedPattern];
if (!pattern) return;
const fixedHeight = 48;
const fixedWidth = 48;
const decoder = new PatternDecoder(pattern.patternBase64!);
const decoder = new PatternDecoder(pattern);
const cellCountX = decoder.getTileWidth();
const cellCountY = decoder.getTileHeight();
+2 -2
View File
@@ -299,9 +299,9 @@ export class TerritoryLayer implements Layer {
const x = this.game.x(tile);
const y = this.game.y(tile);
const baseColor = this.theme.territoryColor(owner);
const patternConfig = territoryPatterns.patterns[patternName];
const patternBase64 = territoryPatterns[patternName];
const decoder = new PatternDecoder(patternConfig.patternBase64 ?? "");
const decoder = new PatternDecoder(patternBase64 ?? "");
const bit = decoder.isSet(x, y) ? 1 : 0;
const colorToUse = bit ? baseColor.darken(0.2) : baseColor;
this.paintCell(x, y, colorToUse, 150);