diff --git a/public/data/aetherytes.json b/public/data/aetherytes.json deleted file mode 100644 index 366d5e9..0000000 --- a/public/data/aetherytes.json +++ /dev/null @@ -1,173 +0,0 @@ -[ - { - "position": { - "zone": "labyrinthos", - "x": 30.3, - "y": 11.9 - }, - "name": { - "en": "The Archeion" - } - }, - { - "position": { - "zone": "labyrinthos", - "x": 21.6, - "y": 20.4 - }, - "name": { - "en": "Sharlayan Hamlet" - } - }, - { - "position": { - "zone": "labyrinthos", - "x": 6.8, - "y": 27.5 - }, - "name": { - "en": "Aporia" - } - }, - { - "position": { - "zone": "thavnair", - "x": 29.5, - "y": 16.5 - }, - "name": { - "en": "Palaka's Stand" - } - }, - { - "position": { - "zone": "thavnair", - "x": 10.9, - "y": 22.2 - }, - "name": { - "en": "The Great Work" - } - }, - { - "position": { - "zone": "thavnair", - "x": 25.3, - "y": 34.0 - }, - "name": { - "en": "Yedlihmad" - } - }, - { - "position": { - "zone": "shaaloani", - "x": 15.6, - "y": 19.2 - }, - "name": { - "en": "Sheshenewezi Springs" - } - }, - { - "position": { - "zone": "shaaloani", - "x": 29.0, - "y": 30.8 - }, - "name": { - "en": "Hhusatahwi" - } - }, - { - "position": { - "zone": "shaaloani", - "x": 27.1, - "y": 10.1 - }, - "name": { - "en": "Mehwahhetsoan" - } - }, - { - "position": { - "zone": "heritage-found", - "x": 17.0, - "y": 9.8 - }, - "name": { - "en": "The Outskirts" - } - }, - { - "position": { - "zone": "heritage-found", - "x": 31.7, - "y": 25.7 - }, - "name": { - "en": "Yyasulani Station" - } - }, - { - "position": { - "zone": "heritage-found", - "x": 17.0, - "y": 23.9 - }, - "name": { - "en": "Electrope Strike" - } - }, - { - "position": { - "zone": "living-memory", - "x": 21.5, - "y": 37.3 - }, - "name": { - "en": "Leynode Mnemo" - } - }, - { - "position": { - "zone": "living-memory", - "x": 34.7, - "y": 15.7 - }, - "name": { - "en": "Leynode Pyro" - } - }, - { - "position": { - "zone": "living-memory", - "x": 16.4, - "y": 13.5 - }, - "name": { - "en": "Leynode Aero" - } - }, - { - "position": { - "zone": "urquopacha", - "x": 30.5, - "y": 34.2 - }, - "name": { - "en": "Worlar's Echo" - } - }, - { - "position": { - "zone": "urquopacha", - "x": 28.1, - "y": 13.1 - }, - "name": { - "en": "Wachunpelo" - } - } -] - diff --git a/public/data/zones.json b/public/data/zones.json index 752b146..c23becf 100644 --- a/public/data/zones.json +++ b/public/data/zones.json @@ -2,36 +2,221 @@ "labyrinthos": { "name": { "en": "Labyrinthos" - } + }, + "aetherytes": [ + { + "position": { + "x": 30.3, + "y": 11.9 + }, + "name": { + "en": "The Archeion" + } + }, + { + "position": { + "x": 21.6, + "y": 20.4 + }, + "name": { + "en": "Sharlayan Hamlet" + } + }, + { + "position": { + "x": 6.8, + "y": 27.5 + }, + "name": { + "en": "Aporia" + } + } + ] }, "thavnair": { "name": { "en": "Thavnair" - } + }, + "aetherytes": [ + { + "position": { + "x": 29.5, + "y": 16.5 + }, + "name": { + "en": "Palaka's Stand" + } + }, + { + "position": { + "x": 10.9, + "y": 22.2 + }, + "name": { + "en": "The Great Work" + } + }, + { + "position": { + "x": 25.3, + "y": 34.0 + }, + "name": { + "en": "Yedlihmad" + } + } + ] }, "yak-tel": { "name": { "en": "Yak T'el" - } + }, + "aetherytes": [ + { + "position": { + "x": 13.5, + "y": 12.9 + }, + "name": { + "en": "Iq Br'aax" + } + }, + { + "position": { + "x": 35.9, + "y": 32.0 + }, + "name": { + "en": "Mamook" + } + } + ] }, "shaaloani": { "name": { "en": "Shaaloani" - } + }, + "aetherytes": [ + { + "position": { + "x": 15.6, + "y": 19.2 + }, + "name": { + "en": "Sheshenewezi Springs" + } + }, + { + "position": { + "x": 29.0, + "y": 30.8 + }, + "name": { + "en": "Hhusatahwi" + } + }, + { + "position": { + "x": 27.1, + "y": 10.1 + }, + "name": { + "en": "Mehwahhetsoan" + } + } + ] }, "heritage-found": { "name": { "en": "Heritage Found" - } + }, + "aetherytes": [ + { + "position": { + "x": 17.0, + "y": 9.8 + }, + "name": { + "en": "The Outskirts" + } + }, + { + "position": { + "x": 31.7, + "y": 25.7 + }, + "name": { + "en": "Yyasulani Station" + } + }, + { + "position": { + "x": 17.0, + "y": 23.9 + }, + "name": { + "en": "Electrope Strike" + } + } + ] }, "living-memory": { "name": { "en": "Living Memory" - } + }, + "aetherytes": [ + { + "position": { + "x": 21.5, + "y": 37.3 + }, + "name": { + "en": "Leynode Mnemo" + } + }, + { + "position": { + "x": 34.7, + "y": 15.7 + }, + "name": { + "en": "Leynode Pyro" + } + }, + { + "position": { + "x": 16.4, + "y": 13.5 + }, + "name": { + "en": "Leynode Aero" + } + } + ] }, "urquopacha": { "name": { "en": "Urquopacha" - } + }, + "aetherytes": [ + { + "position": { + "x": 30.5, + "y": 34.2 + }, + "name": { + "en": "Worlar's Echo" + } + }, + { + "position": { + "x": 28.1, + "y": 13.1 + }, + "name": { + "en": "Wachunpelo" + } + } + ] } } \ No newline at end of file diff --git a/src/App.vue b/src/App.vue index 347d953..dc89f8b 100644 --- a/src/App.vue +++ b/src/App.vue @@ -58,23 +58,22 @@ export default defineComponent({ data: () => ({ eorzeaTime: new EorzeaTime() as EorzeaTime, nodes: [] as Node[], - aetherytes: [] as Aetheryte[], items: {} as { [key: string]: Item }, zones: {} as { [key: string]: Zone }, filtersActive: false, filters: new Filters(), }), methods: { - findNearestAetheryte(zone: string, x: number, y: number): Aetheryte | null { + findNearestAetheryte(zoneName: string, x: number, y: number): Aetheryte | null { let result = null; let distance = Number.MAX_SAFE_INTEGER; - for (const aetheryte of this.aetherytes) { - if (aetheryte.position.zone !== zone) continue; + const zone = this.zones[zoneName] + if (!zone) return null; + for (const aetheryte of zone.aetherytes) { const a = aetheryte.position.x - x; const b = aetheryte.position.y - y; const distanceToAetheryte = Math.hypot(a, b); if (distanceToAetheryte < distance) { - `Aetheryte ${aetheryte.name.en} (${distance}) is new nearest aetheryte`; distance = distanceToAetheryte; result = aetheryte; } @@ -88,20 +87,6 @@ export default defineComponent({ this.eorzeaTime = new EorzeaTime(); }, 500); - const aetheryteData: Response | null = await fetch("/data/aetherytes.json") - .catch((): null => { - return null; - }); - if (aetheryteData === null) { - console.error("Failed to fetch aetheryte data!") - return; - } - - const aetherytes = await aetheryteData.json(); - for (const aetheryteData of aetherytes) { - this.aetherytes.push(new Aetheryte(aetheryteData)); - } - const itemData: Response | null = await fetch("/data/items.json") .catch((): null => { return null; diff --git a/src/entities/Zone.ts b/src/entities/Zone.ts index 7ba977d..2d0b641 100644 --- a/src/entities/Zone.ts +++ b/src/entities/Zone.ts @@ -1,13 +1,21 @@ +import Aetheryte from "@/entities/Aetheryte"; + export default class Zone { name: { en: string, } - constructor(data: {name: {en: string}}) { + aetherytes: Array = []; + + constructor(data: {name: {en: string}, aetherytes: Array<{position: {x: number, y: number, zone: string}, name: {en: string}}>}) { this.name = { en: data.name.en }; + if (!Array.isArray(data.aetherytes)) return; + for (const aetheryte of data.aetherytes) { + this.aetherytes.push(new Aetheryte(aetheryte)); + } } }