From 10b1ecfc3e7fb7ba8d9fc3200630f8296616a60b Mon Sep 17 00:00:00 2001 From: PeenScreeker Date: Fri, 26 Jul 2024 17:18:57 -0400 Subject: [PATCH] feat: add and delete zones --- scripts/pages/zoning/zoning.ts | 76 +++++++++++++++++++++++++++++++++- 1 file changed, 75 insertions(+), 1 deletion(-) diff --git a/scripts/pages/zoning/zoning.ts b/scripts/pages/zoning/zoning.ts index 0c8d66f4..07b302c6 100644 --- a/scripts/pages/zoning/zoning.ts +++ b/scripts/pages/zoning/zoning.ts @@ -612,11 +612,73 @@ class ZoneMenu { zone: newZone }); } + static showAddMenu() { + UiToolkitAPI.ShowSimpleContextMenu('NewZoneButton', '', [ + { + label: $.Localize('#Zoning_AddBonus'), + jsCallback: () => this.addBonus() + }, + { + label: $.Localize('#Zoning_AddSegment'), + jsCallback: () => this.addSegment() + }, + { + label: $.Localize('#Zoning_AddCheckpoint'), + jsCallback: () => this.addCheckpoint() + }, + { + label: $.Localize('#Zoning_AddEnd'), + jsCallback: () => this.addEndZone() + }, + { + label: $.Localize('#Zoning_AddCancel'), + jsCallback: () => this.addCancelZone() + } + ]); } static showDeletePopup() { - } + UiToolkitAPI.ShowGenericPopupTwoOptionsBgStyle( + $.Localize('#Zoning_Delete') as string, + $.Localize('#Zoning_Delete_Message') as string, + 'warning-popup', + $.Localize('#Zoning_Delete') as string, + () => { + this.deleteSelection(); + }, + $.Localize('#Zoning_Cancel') as string, + () => {}, + 'none' + ); + } + + static deleteSelection() { + if (!this.selectedZone || !this.mapZoneData) return; + + if (this.selectedZone.track && this.selectedZone.segment && this.selectedZone.zone) { + const checkpointIndex = this.selectedZone.segment.checkpoints.indexOf(this.selectedZone.zone); + if (checkpointIndex === -1) { + const cancelIndex = this.selectedZone.segment.cancel.indexOf(this.selectedZone.zone); + this.selectedZone.segment.cancel.splice(cancelIndex, 1); + } else { + this.selectedZone.segment.checkpoints.splice(checkpointIndex, 1); + } + } else if (this.selectedZone.segment) { + const index = this.mapZoneData.tracks.main.zones.segments.indexOf(this.selectedZone.segment); + this.mapZoneData.tracks.main.zones.segments.splice(index, 1); + } else if (this.selectedZone.track) { + if ('stagesEndAtStageStarts' in this.selectedZone.track) { + $.Msg("Can't delete Main track!!!"); + } else { + const trackIndex = this.mapZoneData.tracks.bonuses.indexOf(this.selectedZone.track); + this.mapZoneData.tracks.bonuses.splice(trackIndex, 1); + } + } + + //hack: this can be a little more surgical + this.panels.trackList.RemoveAndDeleteChildren(); + this.initMenu(); } static setMaxVelocity() { @@ -726,4 +788,16 @@ class ZoneMenu { this.mapZoneData = null; this.initMenu(); } + + static isSelectionValid() { + return { + track: !!this.selectedZone && !!this.selectedZone.track, + segment: !!this.selectedZone && !!this.selectedZone.track && !!this.selectedZone.segment, + zone: + !!this.selectedZone && + !!this.selectedZone.track && + !!this.selectedZone.segment && + !!this.selectedZone.zone + }; + } }