From 11c8b427c7fdae065b094fff4b82480a7a2fc63d Mon Sep 17 00:00:00 2001 From: Pyro Nicampt <81565698+PyroNicampt@users.noreply.github.com> Date: Sat, 15 Mar 2025 23:20:00 -0500 Subject: [PATCH] Add Demonstrator Spawn Locations --- CommunityMapTool/Main.cs | 4 +- index.js | 19 ++ js/mapdata.js | 17 +- legend.js | 16 ++ mapSprites.svg | 2 +- poi_dv.json | 429 +++++++++++++++++++++++++++++++++++++++ 6 files changed, 482 insertions(+), 5 deletions(-) diff --git a/CommunityMapTool/Main.cs b/CommunityMapTool/Main.cs index 2ae8539..4712b83 100644 --- a/CommunityMapTool/Main.cs +++ b/CommunityMapTool/Main.cs @@ -99,8 +99,8 @@ namespace CommunityMapTool { sb.Append("\n{"); string[] jsonKVP = new[] { "name", $"\"{spawnPoint.name}\"", - "position", $"{{\"x\":{spawnPoint.transform.position.x},\"y\":{spawnPoint.transform.position.y},\"z\":{spawnPoint.transform.position.z}}}", - "isUsed", spawnPoint.pointUsed ? "true" : "false" + "type", $"\"demonstratorSpawn\"", + "position", $"{{\"x\":{spawnPoint.transform.position.x - WorldMover.currentMove.x},\"y\":{spawnPoint.transform.position.y - WorldMover.currentMove.y},\"z\":{spawnPoint.transform.position.z - WorldMover.currentMove.z}}}" }; for(int i = 0; i < jsonKVP.Length; i++) { if(i % 2 == 0) sb.Append($"\n\t\"{jsonKVP[i]}\":"); diff --git a/index.js b/index.js index a787a73..fc45095 100644 --- a/index.js +++ b/index.js @@ -418,6 +418,25 @@ function redrawMap(){ mapctx.fillStyle = '#000'; mapctx.fillText(marker.name, markerX - 0.5*tempMeasure.width, markerY + 0.5*tempMeasure.height); break; + case 'demonstratorSpawn': + if(!(MapData.layers.demonstratorExact && MapData.layers.poi)) break; + marker.visible = true; + curSprite = Config.spriteBounds.demonstrator; + spriteSize = 25; + break; + case 'demonstratorSpawnHint': + if(!(MapData.layers.demonstratorHint && MapData.layers.poi)) break; + marker.visible = true; + if(!marker.tooltipHitzone) marker.tooltipHitzone = {}; + marker.tooltipHitzone.radius = marker.radius * MapData.view.scale; + mapctx.beginPath(); + mapctx.moveTo(markerX, markerY); + mapctx.arc(markerX, markerY, marker.radius*MapData.view.scale, 0, Math.PI*2); + mapctx.fillStyle = '#894b35'; + mapctx.globalAlpha = 0.65; + mapctx.fill(); + mapctx.globalAlpha = 1.0; + break; default: if(!MapData.layers.poi) break; marker.visible = true; diff --git a/js/mapdata.js b/js/mapdata.js index 0184127..69c3880 100644 --- a/js/mapdata.js +++ b/js/mapdata.js @@ -104,6 +104,9 @@ export function sortMarkers(){ if(b.type == 'junction') return -1; if(a.type == 'service') return 1; if(b.type == 'service') return -1; + + if(a.type == 'demonstratorSpawnHint') return -1; + if(b.type == 'demonstratorSpawnHint') return 1; return 0; }); } @@ -256,16 +259,26 @@ export function addPoi(poiData, level = 0){ else if(poiData.military) newPoi.tooltip = '

Military Office

'; else newPoi.tooltip = '

Office

'; break; + case 'demonstratorSpawn': + newPoi.name = newPoi.name.replace('spawn anchor ', ''); + newPoi.tooltip = `

Demonstrator Spawnpoint

${newPoi.name ?? ''}`; + break; + case 'demonstratorSpawnHint': + newPoi.tooltip = `

Demonstrator Spawn Hint

${newPoi.name ?? ''}`; + newPoi.radius = poiData.radius; + break; default: newPoi.tooltip = `

${newPoi.name}

${poiData.description ? '
'+poiData.description : ''}`; newPoi.minZoom = 0.07; break; } - markers.push(newPoi); + if(poiData.type != 'dummy') + markers.push(newPoi); + if(poiData.children){ for(let child of poiData.children){ - addPoi(child, level+1); + addPoi(child, level+(poiData.type == 'dummy' ? 0 : 1)); } } } diff --git a/legend.js b/legend.js index e4ba3f0..1063cab 100644 --- a/legend.js +++ b/legend.js @@ -106,6 +106,21 @@ let settingEntries = [ MapData.view.dirty = true; }, }, + { + label: 'Demonstrator Spawns', + id: 'dropdown_demonstrators', + options: [ + 'None', + 'Hint', + 'Exact', + ], + state: 'None', + func: state =>{ + MapData.layers.demonstratorExact = state == 'Exact'; + MapData.layers.demonstratorHint = state == 'Hint'; + MapData.view.dirty = true; + }, + } ] }, { @@ -288,6 +303,7 @@ function populateKey(){ addKeyEntry('water', 'Water Tower'); addKeyEntry('landmark', 'Landmark'); addKeyEntry('garage', 'Garage'); + addKeyEntry('demonstrator', 'Demonstrator Spawn'); //Add empty entries to make entries align right in the columns. for(let i=0; i<3; i++){ addKeyEntry(); diff --git a/mapSprites.svg b/mapSprites.svg index c775a45..ee1012c 100644 --- a/mapSprites.svg +++ b/mapSprites.svg @@ -272,7 +272,7 @@ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1" d="m 67.96,122.6 h 4.56 l -1.97,5.8 h 3.02 l -4.96,9.96 0.99,-8.11 h -2.34 z" id="path12" />