From b1d68fbae3bae97cfa313324a40594e8d85f0e5c Mon Sep 17 00:00:00 2001 From: Aotumuri Date: Sun, 4 May 2025 20:34:27 +0900 Subject: [PATCH] add lock --- src/client/TerritoryPatternsModal.ts | 179 ++++++++++++++++++--------- 1 file changed, 120 insertions(+), 59 deletions(-) diff --git a/src/client/TerritoryPatternsModal.ts b/src/client/TerritoryPatternsModal.ts index 32aec6e2f..c6881d3da 100644 --- a/src/client/TerritoryPatternsModal.ts +++ b/src/client/TerritoryPatternsModal.ts @@ -18,6 +18,11 @@ export class territoryPatternsModal extends LitElement { @state() private buttonWidth: number = 100; + @state() private lockedPatterns: string[] = []; + @state() private lockedReasons: Record = {}; + @state() private hoveredPattern: string | null = null; + @state() private hoverPosition = { x: 0, y: 0 }; + private resizeObserver: ResizeObserver; constructor() { @@ -38,6 +43,10 @@ export class territoryPatternsModal extends LitElement { containers.forEach((container) => this.resizeObserver.observe(container)); this.updatePreview(); }); + + this.setLockedPatterns(["evan"], { + evan: "This pattern is locked because it is restricted.", + }); } disconnectedCallback() { @@ -51,72 +60,95 @@ export class territoryPatternsModal extends LitElement { render() { return html` + ${this.hoveredPattern && this.lockedReasons[this.hoveredPattern] + ? html` +
+ ${this.lockedReasons[this.hoveredPattern]} +
+ ` + : null}
${Object.entries(territory_patterns.patterns).map( - ([key, pattern]) => html` - - `, + return html` + + `; + }, )}
@@ -198,4 +230,33 @@ export class territoryPatternsModal extends LitElement { render(previewHTML, this.previewButton); } + + private setLockedPatterns( + lockedPatterns: string[], + reasons: Record, + ) { + this.lockedPatterns = lockedPatterns; + this.lockedReasons = reasons; + } + + private isPatternLocked(patternKey: string): boolean { + return this.lockedPatterns.includes(patternKey); + } + + private handleMouseEnter(patternKey: string, event: MouseEvent) { + if (this.isPatternLocked(patternKey)) { + this.hoveredPattern = patternKey; + this.hoverPosition = { x: event.clientX, y: event.clientY }; + } + } + + private handleMouseMove(event: MouseEvent) { + if (this.hoveredPattern) { + this.hoverPosition = { x: event.clientX, y: event.clientY }; + } + } + + private handleMouseLeave() { + this.hoveredPattern = null; + } }