diff --git a/_docs/img/bridge.png b/_docs/img/bridge.png index 81b8b69..1cb8276 100644 Binary files a/_docs/img/bridge.png and b/_docs/img/bridge.png differ diff --git a/_docs/pages/advanced/missions.html b/_docs/pages/advanced/missions.html index 0bc1558..6539b74 100644 --- a/_docs/pages/advanced/missions.html +++ b/_docs/pages/advanced/missions.html @@ -1,68 +1,72 @@ - - - - - - - Spearhead Missions - - - - - - - -
- -
-
-
- - -
-

Advanced Tutorial: Missions

-

Strike

-

- Naming: MISSION_STRIKE_[Name]
-

-

Specific Targets

-

TBD

- - -

Scenery Targets

-

- Bridges, buildings or other type of targets that are baked into the map are awesome targets.
- We wanted to make sure they were easily integrated in Spearhead. - - All you will need to do is right click on the scenery object you want added.
- You will then get the option to "Assign as...", click this and you'll see a new trigger zone created.
- It's best not to edit the triggerzone, but you can rename it however you like.
- - Scenery objects will always be a specific "target" in the mission. - -

- - - Be aware that Object IDs can change when maps are updated and edited and the "Assign as..." action will have to be performed again. - - - -

Here's two images showing how a bridge is added to a mission.

- - -
-
- -
- - - - + + + + + + + Spearhead Missions + + + + + + + +
+ +
+
+
+ + +
+

Advanced Tutorial: Missions

+

Strike

+

+ Naming: MISSION_STRIKE_[Name]
+

+

Specific Targets

+

TBD

+ + +

Scenery Targets

+

+ Bridges, buildings or other type of targets that are baked into the map are awesome targets.
+ We wanted to make sure they were easily integrated in Spearhead. +

+ + + Spearhead detects scenery targets by the trigger zone name. A zone named scenerytarget_[freeform] or + scenerytargets (case-insensitive) will be scanned and any scenery objects that has the attribute "Buildings" inside the zone + will be added as mission scenery targets. + + +

+ Scenery targets are treated like mission targets: they are included in the mission completion calculation + (their `IsAlive()` state is checked) and their state is persisted/updated when missions spawn or resume. +

+ + + Due to Object IDs changing when maps are updated and edited the "Assign as..." functionality does not work for scenery targets. + Hence the need to use trigger zones to define them. + + + +

Here's two images showing how a bridge is added to a mission.

+ +
+
+ +
+ + + + ``` \ No newline at end of file diff --git a/_miz/SPEARHEADDEV.miz b/_miz/SPEARHEADDEV.miz index 6d19676..a2540a2 100644 Binary files a/_miz/SPEARHEADDEV.miz and b/_miz/SPEARHEADDEV.miz differ diff --git a/classes/spearhead_base.lua b/classes/spearhead_base.lua index 3cb8336..311b0b0 100644 --- a/classes/spearhead_base.lua +++ b/classes/spearhead_base.lua @@ -979,6 +979,90 @@ do -- INIT DCS_UTIL end + ---@param zone SpearheadTriggerZone + ---@return Array sceneryObjects + function DCS_UTIL.getSceneryObjectsInZone(zone) + ---@type Volume + local volume + + if(zone.zone_type == "Cilinder") then + local y = land.getHeight({ x = zone.location.x, y = zone.location.y }) + ---@type Sphere + local sphere = { + id = world.VolumeType.SPHERE, + params = { + point = { x = zone.location.x, y = y, z = zone.location.y }, + radius = zone.radius + } + } + volume = sphere + else + local minX = nil + local maxX = nil + local minZ = nil + local maxZ = nil + + for _, point in pairs(zone.verts) do + if minX == nil or point.x < minX then + minX = point.x + end + if maxX == nil or point.x > maxX then + maxX = point.x + end + if minZ == nil or point.y < minZ then + minZ = point.y + end + if maxZ == nil or point.y > maxZ then + maxZ = point.y + end + end + + if(minX == nil or maxX == nil or minZ == nil or maxZ == nil) then + return {} + end + + ---@type Vec3 + local min = { + x = minX, + y = land.getHeight({ x = minX, y = minZ }) - 100, + z = minZ + } + + ---@type Vec3 + local max = { + x = maxX, + y = land.getHeight({ x = maxX, y = maxZ }) + 500, + z = maxZ + } + + ---@type Box + local box = { + id = world.VolumeType.BOX, + params = { + min = min, + max = max + } + } + volume = box + end + + ---@type Array + local sceneryObjects = {} + + ---@param object SceneryObject + local onFound = function(object) + if object and object:isExist() and + object:hasAttribute("Buildings") + then + local obj = Spearhead.classes.stageClasses.Groups.SpearheadSceneryObject.New(object["id_"]) + table.insert(sceneryObjects, obj) + end + end + + world.searchObjects(Object.Category.SCENERY, volume, onFound) + return sceneryObjects + end + ---@param group Group function DCS_UTIL.getUnitTypeFromGroup(group) for _, unit in pairs(group:getUnits()) do diff --git a/classes/spearhead_db.lua b/classes/spearhead_db.lua index 9bfa080..e603f97 100644 --- a/classes/spearhead_db.lua +++ b/classes/spearhead_db.lua @@ -186,18 +186,12 @@ function Database.New(Logger) table.insert(self._tables.SupplyHubZones, zone_name) end - if zone_data.properties then - for _, kvPair in pairs(zone_data.properties) do - if kvPair.key and kvPair.key == "OBJECT ID" then - local objectID = tonumber(kvPair.value) - if objectID then - local sceneryObject = Spearhead.classes.stageClasses.Groups.SpearheadSceneryObject.New(objectID) - table.insert(self._tables.AllSceneryObjects, sceneryObject) - end - end + if lowered == "scenerytarget" or lowered == "scenerytargets" then + local sceneryObjects = Spearhead.DcsUtil.getSceneryObjectsInZone(zone_data) + for _, sceneryObject in pairs(sceneryObjects) do + table.insert(self._tables.AllSceneryObjects, sceneryObject) end end - end end diff --git a/classes/stageClasses/Groups/SpearheadSceneryObject.lua b/classes/stageClasses/Groups/SpearheadSceneryObject.lua index 5056b10..6d26f56 100644 --- a/classes/stageClasses/Groups/SpearheadSceneryObject.lua +++ b/classes/stageClasses/Groups/SpearheadSceneryObject.lua @@ -1,77 +1,77 @@ ----@class SpearheadSceneryObject ----@field private persistentName string The persistent name of the scenery object ----@field private objectID number The ID of the scenery object ----@field private internalObj table ----@field private isDead boolean Indicates if the scenery object is dead -local SpearheadSceneryObject = {} -SpearheadSceneryObject.__index = SpearheadSceneryObject - ----comment ----@param objectID number ----@return SpearheadSceneryObject? -function SpearheadSceneryObject.New(objectID) - - local self = setmetatable({}, SpearheadSceneryObject) - - if objectID == nil then - return nil - end - - self.persistentName = "SpearheadSceneryObject_" .. objectID - self.objectID = objectID - self.isDead = false - self.internalObj = { - ["id_"] = objectID - } - - return self -end - ----@return boolean -function SpearheadSceneryObject:IsAlive() - - if Object.isExist(self.internalObj) == false then - self:MarkDead() - return false - end - - if SceneryObject.getLife(self.internalObj) <= 0.10 then - self:MarkDead() - return false - end - - return true -end - ----@private -function SpearheadSceneryObject:MarkDead() - if self.isDead == true then return end - self.isDead = true - Spearhead.classes.persistence.Persistence.UnitKilled(self.persistentName, self:GetPoint(), 0, "Scenery") -end - -function SpearheadSceneryObject:UpdateStatePersistently() - if self.isDead == true then - return - end - - local state = Spearhead.classes.persistence.Persistence.UnitState(self.persistentName) - if state and state.isDead == true then - trigger.action.explosion(self:GetPoint(), 1000) - self.isDead = true - end -end - - -function SpearheadSceneryObject:GetPersistentName() - return self.persistentName -end - -function SpearheadSceneryObject:GetPoint() - return Object.getPoint(self.internalObj) -end - -if not Spearhead.classes then Spearhead.classes = {} end -if not Spearhead.classes.stageClasses then Spearhead.classes.stageClasses = {} end -if not Spearhead.classes.stageClasses.Groups then Spearhead.classes.stageClasses.Groups = {} end -Spearhead.classes.stageClasses.Groups.SpearheadSceneryObject = SpearheadSceneryObject +---@class SpearheadSceneryObject +---@field private persistentName string The persistent name of the scenery object +---@field private objectID number The ID of the scenery object +---@field private internalObj table +---@field private isDead boolean Indicates if the scenery object is dead +local SpearheadSceneryObject = {} +SpearheadSceneryObject.__index = SpearheadSceneryObject + +---comment +---@param objectID number +---@return SpearheadSceneryObject? +function SpearheadSceneryObject.New(objectID) + + local self = setmetatable({}, SpearheadSceneryObject) + + if objectID == nil then + return nil + end + + self.persistentName = "SpearheadSceneryObject_" .. objectID + self.objectID = objectID + self.isDead = false + self.internalObj = { + ["id_"] = objectID + } + + return self +end + +---@return boolean +function SpearheadSceneryObject:IsAlive() + + if Object.isExist(self.internalObj) == false then + self:MarkDead() + return false + end + + if SceneryObject.getLife(self.internalObj) <= 0.10 then + self:MarkDead() + return false + end + + return true +end + +---@private +function SpearheadSceneryObject:MarkDead() + if self.isDead == true then return end + self.isDead = true + Spearhead.classes.persistence.Persistence.UnitKilled(self.persistentName, self:GetPoint(), 0, "Scenery") +end + +function SpearheadSceneryObject:UpdateStatePersistently() + if self.isDead == true then + return + end + + local state = Spearhead.classes.persistence.Persistence.UnitState(self.persistentName) + if state and state.isDead == true then + trigger.action.explosion(self:GetPoint(), 1000) + self.isDead = true + end +end + + +function SpearheadSceneryObject:GetPersistentName() + return self.persistentName +end + +function SpearheadSceneryObject:GetPoint() + return Object.getPoint(self.internalObj) +end + +if not Spearhead.classes then Spearhead.classes = {} end +if not Spearhead.classes.stageClasses then Spearhead.classes.stageClasses = {} end +if not Spearhead.classes.stageClasses.Groups then Spearhead.classes.stageClasses.Groups = {} end +Spearhead.classes.stageClasses.Groups.SpearheadSceneryObject = SpearheadSceneryObject diff --git a/logistics.excalidraw.json b/logistics.excalidraw.json new file mode 100644 index 0000000..54a54b2 --- /dev/null +++ b/logistics.excalidraw.json @@ -0,0 +1,2294 @@ +{ + "type": "excalidraw", + "version": 2, + "source": "https://marketplace.visualstudio.com/items?itemName=pomdtr.excalidraw-editor", + "elements": [ + { + "id": "cs78phPEGFYfkmoLznU2k", + "type": "rectangle", + "x": 235.5, + "y": 1102, + "width": 554, + "height": 485, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a2", + "roundness": { + "type": 3 + }, + "seed": 1480715984, + "version": 1017, + "versionNonce": 2014953008, + "isDeleted": false, + "boundElements": [], + "updated": 1765720175528, + "link": null, + "locked": false + }, + { + "id": "xF89q0zxEeOaus5r0_bHU", + "type": "text", + "x": 357.5, + "y": 1110, + "width": 341.951904296875, + "height": 64.99999999999996, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a4", + "roundness": null, + "seed": 452506832, + "version": 423, + "versionNonce": 1880284368, + "isDeleted": false, + "boundElements": [ + { + "id": "6hg_WhPyp23X2B2SKBR2V", + "type": "arrow" + } + ], + "updated": 1765721194718, + "link": null, + "locked": false, + "text": "FARP/Airport", + "fontSize": 51.999999999999964, + "fontFamily": 5, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "FARP/Airport", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "aBRAOM8MzkDI_OweAs0Qi", + "type": "rectangle", + "x": 319.20810308882494, + "y": 291.78528063780084, + "width": 394, + "height": 341.99999999999994, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "R5I1tib3-GOAXPEIbqk--" + ], + "frameId": null, + "index": "a9G", + "roundness": { + "type": 3 + }, + "seed": 1317450800, + "version": 1017, + "versionNonce": 731947216, + "isDeleted": false, + "boundElements": [ + { + "id": "6hg_WhPyp23X2B2SKBR2V", + "type": "arrow" + } + ], + "updated": 1765721615634, + "link": null, + "locked": false + }, + { + "id": "AvoNS_q_P48qCSOSMaTjF", + "type": "text", + "x": 339.45200614801786, + "y": 308.20810308882494, + "width": 309.34393310546875, + "height": 58.393233388830446, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "R5I1tib3-GOAXPEIbqk--" + ], + "frameId": null, + "index": "a9V", + "roundness": null, + "seed": 143418064, + "version": 630, + "versionNonce": 1038789840, + "isDeleted": false, + "boundElements": [], + "updated": 1765721615634, + "link": null, + "locked": false, + "text": "Supply Source", + "fontSize": 46.71458671106434, + "fontFamily": 5, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Supply Source", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "qITqQygBHE2CPSzIw-WcV", + "type": "text", + "x": 335.5159862505569, + "y": 381.70810308882494, + "width": 300.519775390625, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "R5I1tib3-GOAXPEIbqk--" + ], + "frameId": null, + "index": "aA", + "roundness": null, + "seed": 35678256, + "version": 305, + "versionNonce": 1536987856, + "isDeleted": false, + "boundElements": null, + "updated": 1765721615634, + "link": null, + "locked": false, + "text": "zone: SupplySource_", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "zone: SupplySource_", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "5IGrRrtZAl5nq7afY6uPX", + "type": "text", + "x": 334.5159862505569, + "y": 467.70810308882494, + "width": 149.69984436035156, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "R5I1tib3-GOAXPEIbqk--" + ], + "frameId": null, + "index": "aB", + "roundness": null, + "seed": 1659672624, + "version": 310, + "versionNonce": 1981921488, + "isDeleted": false, + "boundElements": null, + "updated": 1765721615634, + "link": null, + "locked": false, + "text": "infinite supplies", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "infinite supplies", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "RSOb2NLdEKgWWB5pIMfeO", + "type": "text", + "x": 329.5, + "y": 1201, + "width": 423.6798095703125, + "height": 250, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aW", + "roundness": null, + "seed": 1391094320, + "version": 722, + "versionNonce": 1614171696, + "isDeleted": false, + "boundElements": null, + "updated": 1765721008728, + "link": null, + "locked": false, + "text": "zone: FARP_\n\nparameters:\n - starting_supplies: [0, N, -1]\n 0 : 0 of everything.\n N: N of everything\n -1 : custom\n with custom, it will not edit the \n values at all\n - buildable: true", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "zone: FARP_\n\nparameters:\n - starting_supplies: [0, N, -1]\n 0 : 0 of everything.\n N: N of everything\n -1 : custom\n with custom, it will not edit the \n values at all\n - buildable: true", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "DtDKPiLaL2Q0WeDDYfCp-", + "type": "rectangle", + "x": 1032.0402428428317, + "y": 303.7679832629085, + "width": 381.9999999999999, + "height": 271.3179487179487, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "0BtBxRHr2Qs1ajLSGX3uz" + ], + "frameId": null, + "index": "aXl", + "roundness": { + "type": 3 + }, + "seed": 1395091152, + "version": 705, + "versionNonce": 1745884368, + "isDeleted": false, + "boundElements": [], + "updated": 1765721713739, + "link": null, + "locked": false + }, + { + "id": "FMerdoUgOk5ZOgOWbZN5g", + "type": "text", + "x": 1042.7274223300112, + "y": 317.3167012116264, + "width": 279.8335150928985, + "height": 54.23134627794711, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#aaaaaa", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "0BtBxRHr2Qs1ajLSGX3uz" + ], + "frameId": null, + "index": "aY", + "roundness": null, + "seed": 809733328, + "version": 733, + "versionNonce": 1825897168, + "isDeleted": false, + "boundElements": null, + "updated": 1765721713739, + "link": null, + "locked": false, + "text": "Supply Config", + "fontSize": 43.38507702235773, + "fontFamily": 5, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Supply Config", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "E-sJdenMyJFKPvSE2XK4e", + "type": "text", + "x": 265.5, + "y": 1455, + "width": 442.6197204589844, + "height": 100, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "ab", + "roundness": null, + "seed": 1323777584, + "version": 456, + "versionNonce": 1562782768, + "isDeleted": false, + "boundElements": null, + "updated": 1765720175528, + "link": null, + "locked": false, + "text": "properties: \n personel: count of personel that's present\n supplies:\n warehouse data", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "properties: \n personel: count of personel that's present\n supplies:\n warehouse data", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "WSHKuarAUQAeV8PmQ39m7", + "type": "text", + "x": 1049.0402428428317, + "y": 391.9269576218828, + "width": 132.0598907470703, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "0BtBxRHr2Qs1ajLSGX3uz" + ], + "frameId": null, + "index": "ad", + "roundness": null, + "seed": 2031607504, + "version": 406, + "versionNonce": 336404688, + "isDeleted": false, + "boundElements": null, + "updated": 1765721713739, + "link": null, + "locked": false, + "text": "enabled: false", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "enabled: false", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "aH2mWUxNtU2jAPX0nFkmL", + "type": "rectangle", + "x": 1305.9626048048387, + "y": 798.19904010432, + "width": 397.5, + "height": 85, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#e9ecef", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "ah", + "roundness": { + "type": 3 + }, + "seed": 1024526896, + "version": 1074, + "versionNonce": 866079440, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "jfHU6xyqOSIzsZKKBny0O" + }, + { + "id": "friWeGi7sPIQahwgVX-At", + "type": "arrow" + }, + { + "id": "SIAZ8tRfcPQfkxEtTJ2xC", + "type": "arrow" + }, + { + "id": "Nlt3wP3tQKHwuqJFA6Cd-", + "type": "arrow" + }, + { + "id": "pLMbcAG8GGgYeGRpjWrjt", + "type": "arrow" + } + ], + "updated": 1765721693703, + "link": null, + "locked": false + }, + { + "id": "jfHU6xyqOSIzsZKKBny0O", + "type": "text", + "x": 1379.4727061231981, + "y": 828.19904010432, + "width": 250.47979736328125, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#e9ecef", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "ai", + "roundness": null, + "seed": 1937723600, + "version": 907, + "versionNonce": 1466228432, + "isDeleted": false, + "boundElements": null, + "updated": 1765721693703, + "link": null, + "locked": false, + "text": "Personel (non-parachute)", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "aH2mWUxNtU2jAPX0nFkmL", + "originalText": "Personel (non-parachute)", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "6hg_WhPyp23X2B2SKBR2V", + "type": "arrow", + "x": 527.2888784540913, + "y": 641.2676735628943, + "width": 95.95554512075807, + "height": 454.73232643710594, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#e9ecef", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "al", + "roundness": { + "type": 2 + }, + "seed": 1679062064, + "version": 263, + "versionNonce": 108267216, + "isDeleted": false, + "boundElements": [], + "updated": 1765721615634, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -95.95554512075807, + 213.5934375482168 + ], + [ + -42.930239710635874, + 454.73232643710594 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "aBRAOM8MzkDI_OweAs0Qi", + "focus": -0.33329436816051433, + "gap": 11.361111111111086 + }, + "endBinding": { + "elementId": "xF89q0zxEeOaus5r0_bHU", + "focus": -0.1902745200080385, + "gap": 14 + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "4GuyB0WHJLP6qH1UtY2rz", + "type": "rectangle", + "x": 1294.3308522308182, + "y": 1153.137021771729, + "width": 397.5, + "height": 85, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#e9ecef", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "an", + "roundness": { + "type": 3 + }, + "seed": 1515529936, + "version": 1187, + "versionNonce": 1456472624, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "nyLN4be97H9HQhrFd4HS1" + }, + { + "id": "wrB_6hD7EV4pSGq0qqfjQ", + "type": "arrow" + }, + { + "id": "LWI3DyrIZVDnfHpf-V6QQ", + "type": "arrow" + }, + { + "id": "lH2yFDahZXKw9rAa3QUAw", + "type": "arrow" + }, + { + "id": "pLMbcAG8GGgYeGRpjWrjt", + "type": "arrow" + } + ], + "updated": 1765721693703, + "link": null, + "locked": false + }, + { + "id": "nyLN4be97H9HQhrFd4HS1", + "type": "text", + "x": 1414.070926388533, + "y": 1183.137021771729, + "width": 158.0198516845703, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#e9ecef", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "ao", + "roundness": null, + "seed": 950521040, + "version": 1037, + "versionNonce": 1795196112, + "isDeleted": false, + "boundElements": [], + "updated": 1765721693703, + "link": null, + "locked": false, + "text": "Building Supplies", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "4GuyB0WHJLP6qH1UtY2rz", + "originalText": "Building Supplies", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "YJdAyP1XOkBoYA5fM8RhX", + "type": "rectangle", + "x": 1291.6186139711347, + "y": 1326.1965590018049, + "width": 152.5, + "height": 85, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#e9ecef", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "ap", + "roundness": { + "type": 3 + }, + "seed": 1197196496, + "version": 1389, + "versionNonce": 356706512, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "UfpVWffSW9uEOG6FTK7mj" + }, + { + "id": "wrB_6hD7EV4pSGq0qqfjQ", + "type": "arrow" + } + ], + "updated": 1765721488258, + "link": null, + "locked": false + }, + { + "id": "UfpVWffSW9uEOG6FTK7mj", + "type": "text", + "x": 1330.7886502870526, + "y": 1356.1965590018049, + "width": 74.15992736816406, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#e9ecef", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aq", + "roundness": null, + "seed": 1193978576, + "version": 1262, + "versionNonce": 344805072, + "isDeleted": false, + "boundElements": [], + "updated": 1765721488258, + "link": null, + "locked": false, + "text": "Building", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "YJdAyP1XOkBoYA5fM8RhX", + "originalText": "Building", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "_wUjI7MUw6Ah8isRHbtjz", + "type": "rectangle", + "x": 1558.0229690690865, + "y": 1343.2141993207051, + "width": 152.5, + "height": 85, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#e9ecef", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "ar", + "roundness": { + "type": 3 + }, + "seed": 1031329488, + "version": 1429, + "versionNonce": 436460240, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "tqMDv3ZG9baQevgbVxkzV" + }, + { + "id": "LWI3DyrIZVDnfHpf-V6QQ", + "type": "arrow" + } + ], + "updated": 1765721488258, + "link": null, + "locked": false + }, + { + "id": "tqMDv3ZG9baQevgbVxkzV", + "type": "text", + "x": 1613.632984938227, + "y": 1373.2141993207051, + "width": 41.27996826171875, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#e9ecef", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "as", + "roundness": null, + "seed": 1540717776, + "version": 1305, + "versionNonce": 2019557584, + "isDeleted": false, + "boundElements": [], + "updated": 1765721488258, + "link": null, + "locked": false, + "text": "SAM", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "_wUjI7MUw6Ah8isRHbtjz", + "originalText": "SAM", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "wrB_6hD7EV4pSGq0qqfjQ", + "type": "arrow", + "x": 1406.404853402694, + "y": 1325.2695710840012, + "width": 95.28701921129937, + "height": 86.60085528562422, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#e9ecef", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dotted", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "at", + "roundness": { + "type": 2 + }, + "seed": 798166736, + "version": 340, + "versionNonce": 1685036240, + "isDeleted": false, + "boundElements": [], + "updated": 1765721693704, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 88.34634017663302, + -29.59396053778414 + ], + [ + 95.28701921129937, + -86.60085528562422 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "YJdAyP1XOkBoYA5fM8RhX", + "focus": -0.44852093737995713, + "gap": 1.876886059642402 + }, + "endBinding": { + "elementId": "4GuyB0WHJLP6qH1UtY2rz", + "focus": -0.06791827719492026, + "gap": 2.4390178100593403 + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "LWI3DyrIZVDnfHpf-V6QQ", + "type": "arrow", + "x": 1611.6557730919942, + "y": 1341.6290841617254, + "width": 111.85645031847639, + "height": 102.79750502529896, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#e9ecef", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dotted", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "av", + "roundness": { + "type": 2 + }, + "seed": 1274830544, + "version": 340, + "versionNonce": 1141080784, + "isDeleted": false, + "boundElements": [], + "updated": 1765721693704, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -48.15457951266717, + -37.2034736155083 + ], + [ + -111.85645031847639, + -102.79750502529896 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "_wUjI7MUw6Ah8isRHbtjz", + "focus": 0.2624153498871331, + "gap": 3.1795582007912344 + }, + "endBinding": { + "elementId": "4GuyB0WHJLP6qH1UtY2rz", + "focus": 0.14677728142948268, + "gap": 3.149445733308994 + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "HGvzTx5MrUaT6zo-tlBww", + "type": "rectangle", + "x": 1307.8170302137034, + "y": 965.0050350028833, + "width": 397.5, + "height": 85, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#e9ecef", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "ax", + "roundness": { + "type": 3 + }, + "seed": 1481531440, + "version": 1141, + "versionNonce": 2066448432, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "Hzek-yVXZvYRF7MFuR1HE" + }, + { + "id": "Z4_dIyJNDD478UnIkY4j6", + "type": "arrow" + }, + { + "id": "Nlt3wP3tQKHwuqJFA6Cd-", + "type": "arrow" + } + ], + "updated": 1765721673979, + "link": null, + "locked": false + }, + { + "id": "Hzek-yVXZvYRF7MFuR1HE", + "type": "text", + "x": 1414.8870985730784, + "y": 982.5050350028833, + "width": 183.35986328125, + "height": 50, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#e9ecef", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "ay", + "roundness": null, + "seed": 166910512, + "version": 1040, + "versionNonce": 439713488, + "isDeleted": false, + "boundElements": [], + "updated": 1765721488258, + "link": null, + "locked": false, + "text": "Vehicles (combat)\nAirdropped/hooked", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "HGvzTx5MrUaT6zo-tlBww", + "originalText": "Vehicles (combat)\nAirdropped/hooked", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "Z-4a3zlXnA99OMoKhYGTJ", + "type": "rectangle", + "x": 1975.4658686737462, + "y": 664.1381690439542, + "width": 467.66813284728687, + "height": 94.76433218221348, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#e9ecef", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dotted", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b01", + "roundness": { + "type": 3 + }, + "seed": 1272358448, + "version": 383, + "versionNonce": 392170192, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "YoGO_zMl8gnmdbjNU8WRX" + }, + { + "id": "friWeGi7sPIQahwgVX-At", + "type": "arrow" + } + ], + "updated": 1765721488258, + "link": null, + "locked": false + }, + { + "id": "YoGO_zMl8gnmdbjNU8WRX", + "type": "text", + "x": 2004.9700858542255, + "y": 686.5203351350609, + "width": 408.6596984863281, + "height": 50, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#e9ecef", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dotted", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b01V", + "roundness": null, + "seed": 1099605040, + "version": 358, + "versionNonce": 1521889488, + "isDeleted": false, + "boundElements": null, + "updated": 1765721488258, + "link": null, + "locked": false, + "text": "- Need to be present before Building/SAM\nsupplies can be built", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "Z-4a3zlXnA99OMoKhYGTJ", + "originalText": "- Need to be present before Building/SAM supplies can be built", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "friWeGi7sPIQahwgVX-At", + "type": "arrow", + "x": 1704.653672752891, + "y": 843.8756730506668, + "width": 263.78905202728674, + "height": 109.53965287403719, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#e9ecef", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dotted", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b03", + "roundness": { + "type": 2 + }, + "seed": 1215858384, + "version": 481, + "versionNonce": 651358256, + "isDeleted": false, + "boundElements": [], + "updated": 1765721693704, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 84.97564839469669, + -81.28105498623131 + ], + [ + 263.78905202728674, + -109.53965287403719 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "aH2mWUxNtU2jAPX0nFkmL", + "focus": 0.8358441219856321, + "gap": 1.2192015724870089 + }, + "endBinding": { + "elementId": "Z-4a3zlXnA99OMoKhYGTJ", + "focus": 0.18080015786098866, + "gap": 7.20096959793932 + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "AJgetQphHShI3KIMav7Ul", + "type": "rectangle", + "x": 1971.7737518354784, + "y": 786.5933775131778, + "width": 467.66813284728687, + "height": 94.76433218221348, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#e9ecef", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dotted", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b05", + "roundness": { + "type": 3 + }, + "seed": 824426192, + "version": 533, + "versionNonce": 433857232, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "ufwkOxMNnAqwVSfGKKSfm" + }, + { + "id": "SIAZ8tRfcPQfkxEtTJ2xC", + "type": "arrow" + } + ], + "updated": 1765721488258, + "link": null, + "locked": false + }, + { + "id": "ufwkOxMNnAqwVSfGKKSfm", + "type": "text", + "x": 1995.7579342259187, + "y": 808.9755436042846, + "width": 419.69976806640625, + "height": 50, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#e9ecef", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dotted", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b06", + "roundness": null, + "seed": 1776510160, + "version": 578, + "versionNonce": 1710180560, + "isDeleted": false, + "boundElements": [], + "updated": 1765721488258, + "link": null, + "locked": false, + "text": "- Need to be near a combar vehicle to take\ncontrol", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "AJgetQphHShI3KIMav7Ul", + "originalText": "- Need to be near a combar vehicle to take control", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "SIAZ8tRfcPQfkxEtTJ2xC", + "type": "arrow", + "x": 1705.7906379325166, + "y": 860.083956344296, + "width": 260.27561302987374, + "height": 36.65757351054526, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#e9ecef", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dotted", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b07", + "roundness": { + "type": 2 + }, + "seed": 1250889264, + "version": 328, + "versionNonce": 962947632, + "isDeleted": false, + "boundElements": [], + "updated": 1765721693704, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 117.06773475948353, + 36.65757351054526 + ], + [ + 260.27561302987374, + 3.7317058126941447 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "aH2mWUxNtU2jAPX0nFkmL", + "focus": -0.41608798738520897, + "gap": 2.385297178045221 + }, + "endBinding": { + "elementId": "AJgetQphHShI3KIMav7Ul", + "focus": 0.24948390043936872, + "gap": 6.127642465182616 + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "p2N3AlLu52TreYjAL0ewm", + "type": "rectangle", + "x": 1982.8501023502818, + "y": 955.2000464607526, + "width": 467.66813284728687, + "height": 94.76433218221348, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#e9ecef", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dotted", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b09", + "roundness": { + "type": 3 + }, + "seed": 730740944, + "version": 634, + "versionNonce": 1368144592, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "yBQwlGJFwzUDGvyPgUngu" + }, + { + "id": "Z4_dIyJNDD478UnIkY4j6", + "type": "arrow" + } + ], + "updated": 1765721488258, + "link": null, + "locked": false + }, + { + "id": "yBQwlGJFwzUDGvyPgUngu", + "type": "text", + "x": 2083.2142591059564, + "y": 990.0822125518592, + "width": 266.9398193359375, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#e9ecef", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dotted", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0A", + "roundness": null, + "seed": 1693359824, + "version": 743, + "versionNonce": 1608278224, + "isDeleted": false, + "boundElements": [], + "updated": 1765721488258, + "link": null, + "locked": false, + "text": "- Way to help combat areas", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "p2N3AlLu52TreYjAL0ewm", + "originalText": "- Way to help combat areas", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "Z4_dIyJNDD478UnIkY4j6", + "type": "arrow", + "x": 1713.096802289363, + "y": 1011.1276234402895, + "width": 268.5480971859761, + "height": 38.22140239629812, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#e9ecef", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dotted", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0B", + "roundness": { + "type": 2 + }, + "seed": 1837444656, + "version": 322, + "versionNonce": 283931696, + "isDeleted": false, + "boundElements": [], + "updated": 1765721488374, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 125.76074336846523, + 38.22140239629812 + ], + [ + 268.5480971859761, + 3.5087727384345726 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "HGvzTx5MrUaT6zo-tlBww", + "focus": -0.574768980705492, + "gap": 7.779772075659594 + }, + "endBinding": { + "elementId": "p2N3AlLu52TreYjAL0ewm", + "focus": 0.43256281407036, + "gap": 1.2052028749426427 + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "aZkwzftYycrJ2yWkGhtEd", + "type": "rectangle", + "x": 1976.6965742865023, + "y": 1166.881411854788, + "width": 467.66813284728687, + "height": 94.76433218221348, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#e9ecef", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dotted", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0E", + "roundness": { + "type": 3 + }, + "seed": 1510586064, + "version": 694, + "versionNonce": 74470096, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "QOk6Sgd05urkd-dhcCA6e" + }, + { + "id": "lH2yFDahZXKw9rAa3QUAw", + "type": "arrow" + } + ], + "updated": 1765721488258, + "link": null, + "locked": false + }, + { + "id": "QOk6Sgd05urkd-dhcCA6e", + "type": "text", + "x": 2118.190713036806, + "y": 1201.7635779458947, + "width": 184.6798553466797, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#e9ecef", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dotted", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0F", + "roundness": null, + "seed": 1934253264, + "version": 846, + "versionNonce": 1316845776, + "isDeleted": false, + "boundElements": [], + "updated": 1765721488258, + "link": null, + "locked": false, + "text": "- Buildable Objects", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "aZkwzftYycrJ2yWkGhtEd", + "originalText": "- Buildable Objects", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "lH2yFDahZXKw9rAa3QUAw", + "type": "arrow", + "x": 1692.8079512709355, + "y": 1209.562659092961, + "width": 271.9282167137476, + "height": 23.161503044273104, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#e9ecef", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dotted", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0G", + "roundness": { + "type": 2 + }, + "seed": 1867445296, + "version": 298, + "versionNonce": 338340048, + "isDeleted": false, + "boundElements": [], + "updated": 1765721693704, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 170.66370664201304, + 23.161503044273104 + ], + [ + 271.9282167137476, + 18.221770845652145 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "4GuyB0WHJLP6qH1UtY2rz", + "focus": -0.1897160423379731, + "gap": 1 + }, + "endBinding": { + "elementId": "aZkwzftYycrJ2yWkGhtEd", + "focus": -0.02604033699259518, + "gap": 12.307056127560372 + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "PcTXV5kDe5wVPAidNLBCl", + "type": "rectangle", + "x": 1570.6174700678891, + "y": 1646.8159444697174, + "width": 152.5, + "height": 85, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#e9ecef", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0I", + "roundness": { + "type": 3 + }, + "seed": 265134640, + "version": 1486, + "versionNonce": 1825862352, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "EBV7j_Cmh6PCbA4rmPqdj" + }, + { + "id": "AJ_nwcqbc4EOpn7vi5Zxi", + "type": "arrow" + } + ], + "updated": 1765721536491, + "link": null, + "locked": false + }, + { + "id": "EBV7j_Cmh6PCbA4rmPqdj", + "type": "text", + "x": 1627.1574862422056, + "y": 1676.8159444697174, + "width": 39.41996765136719, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#e9ecef", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0J", + "roundness": null, + "seed": 1413078064, + "version": 1362, + "versionNonce": 278356016, + "isDeleted": false, + "boundElements": [], + "updated": 1765721520542, + "link": null, + "locked": false, + "text": "Fuel", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "PcTXV5kDe5wVPAidNLBCl", + "originalText": "Fuel", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "ZbfTMrWKLviaxR_NLF5m2", + "type": "rectangle", + "x": 1571.8481756806448, + "y": 1527.4375000323828, + "width": 152.5, + "height": 85, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#e9ecef", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0K", + "roundness": { + "type": 3 + }, + "seed": 166855888, + "version": 1441, + "versionNonce": 2071030992, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "nMQGusNE97w5UeO6oscW8" + }, + { + "id": "xhjb3vIieswY23YvjCPkp", + "type": "arrow" + } + ], + "updated": 1765721533255, + "link": null, + "locked": false + }, + { + "id": "nMQGusNE97w5UeO6oscW8", + "type": "text", + "x": 1595.6682135224416, + "y": 1557.4375000323828, + "width": 104.85992431640625, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#e9ecef", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0L", + "roundness": null, + "seed": 1559816912, + "version": 1327, + "versionNonce": 2147088080, + "isDeleted": false, + "boundElements": [], + "updated": 1765721517540, + "link": null, + "locked": false, + "text": "Ammunition", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "ZbfTMrWKLviaxR_NLF5m2", + "originalText": "Ammunition", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "4fQVIU9TYYmXGLhepMrHi", + "type": "rectangle", + "x": 1298.631529648809, + "y": 1538.513850547188, + "width": 152.5, + "height": 137.92034134850883, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#e9ecef", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0M", + "roundness": { + "type": 3 + }, + "seed": 2087552720, + "version": 1641, + "versionNonce": 2027007696, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "kycIxN7WPz5aYLMtOjO7D" + }, + { + "id": "xhjb3vIieswY23YvjCPkp", + "type": "arrow" + }, + { + "id": "AJ_nwcqbc4EOpn7vi5Zxi", + "type": "arrow" + } + ], + "updated": 1765721545291, + "link": null, + "locked": false + }, + { + "id": "kycIxN7WPz5aYLMtOjO7D", + "type": "text", + "x": 1336.541571457891, + "y": 1582.4740212214424, + "width": 76.67991638183594, + "height": 50, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#e9ecef", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0N", + "roundness": null, + "seed": 951332048, + "version": 1534, + "versionNonce": 1716737232, + "isDeleted": false, + "boundElements": [], + "updated": 1765721545291, + "link": null, + "locked": false, + "text": "Aircraft\nSupplies", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "4fQVIU9TYYmXGLhepMrHi", + "originalText": "Aircraft Supplies", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "xhjb3vIieswY23YvjCPkp", + "type": "arrow", + "x": 1570.823072137336, + "y": 1578.0288419215324, + "width": 115.10424663379717, + "height": 52.21323313589551, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#e9ecef", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dotted", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0O", + "roundness": { + "type": 2 + }, + "seed": 1304948432, + "version": 162, + "versionNonce": 1085291216, + "isDeleted": false, + "boundElements": [], + "updated": 1765721545291, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -59.33321947260902, + 52.21323313589551 + ], + [ + -115.10424663379717, + 43.56056301782428 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "ZbfTMrWKLviaxR_NLF5m2", + "focus": 0.5466309236219168, + "gap": 1.1769576218832754 + }, + "endBinding": { + "elementId": "4fQVIU9TYYmXGLhepMrHi", + "focus": 0.019479793425358986, + "gap": 6.207276054653676 + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "AJ_nwcqbc4EOpn7vi5Zxi", + "type": "arrow", + "x": 1565.2729653495805, + "y": 1685.7516456072037, + "width": 107.04846767032836, + "height": 29.669113735771816, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#e9ecef", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dotted", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0Q", + "roundness": { + "type": 2 + }, + "seed": 2035722448, + "version": 166, + "versionNonce": 1249927376, + "isDeleted": false, + "boundElements": [], + "updated": 1765721545291, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -67.32087442516945, + -9.973462877803058 + ], + [ + -107.04846767032836, + -29.669113735771816 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "PcTXV5kDe5wVPAidNLBCl", + "focus": -0.15844540418958572, + "gap": 6.207276054653221 + }, + "endBinding": { + "elementId": "4fQVIU9TYYmXGLhepMrHi", + "focus": 0.06828070222826686, + "gap": 9.899392892921469 + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "SuHzmu7piFTPSV_0gXXro", + "type": "rectangle", + "x": 1299.862235261565, + "y": 1824.6529055129615, + "width": 152.5, + "height": 137.92034134850883, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#e9ecef", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0S", + "roundness": { + "type": 3 + }, + "seed": 1525385264, + "version": 1768, + "versionNonce": 369266896, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "ST61yKeOZxVikXzQL079e" + }, + { + "id": "CbVvVoAj02v9gdNPAsIjd", + "type": "arrow" + } + ], + "updated": 1765721566641, + "link": null, + "locked": false + }, + { + "id": "ST61yKeOZxVikXzQL079e", + "type": "text", + "x": 1337.772277070647, + "y": 1881.113076187216, + "width": 76.67991638183594, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#e9ecef", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0T", + "roundness": null, + "seed": 246088240, + "version": 1670, + "versionNonce": 645825232, + "isDeleted": false, + "boundElements": [], + "updated": 1765721553875, + "link": null, + "locked": false, + "text": "Aircraft", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "SuHzmu7piFTPSV_0gXXro", + "originalText": "Aircraft", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "hsCRRVv1QSw8HBPIiNiaI", + "type": "rectangle", + "x": 1993.926452865086, + "y": 1788.3877462965756, + "width": 467.66813284728687, + "height": 94.76433218221348, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#e9ecef", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dotted", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0U", + "roundness": { + "type": 3 + }, + "seed": 1545761840, + "version": 1249, + "versionNonce": 1960840752, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "JrobVAweXqE8jOY9NlUyZ" + }, + { + "id": "CbVvVoAj02v9gdNPAsIjd", + "type": "arrow" + } + ], + "updated": 1765721598048, + "link": null, + "locked": false + }, + { + "id": "JrobVAweXqE8jOY9NlUyZ", + "type": "text", + "x": 2011.1506865250576, + "y": 1810.7699123876823, + "width": 433.21966552734375, + "height": 50, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#e9ecef", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dotted", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0V", + "roundness": null, + "seed": 572812848, + "version": 1504, + "versionNonce": 1142868016, + "isDeleted": false, + "boundElements": [], + "updated": 1765721598048, + "link": null, + "locked": false, + "text": "- Aircraft themselves being a supply as well. \nCan be ferried, or need to be transported", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "hsCRRVv1QSw8HBPIiNiaI", + "originalText": "- Aircraft themselves being a supply as well. \nCan be ferried, or need to be transported", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "CbVvVoAj02v9gdNPAsIjd", + "type": "arrow", + "x": 1992.6096729265103, + "y": 1827.8447153890945, + "width": 528.2635513869322, + "height": 78.60993001025508, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#e9ecef", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dotted", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0W", + "roundness": { + "type": 2 + }, + "seed": 1706006736, + "version": 665, + "versionNonce": 1870021168, + "isDeleted": false, + "boundElements": [], + "updated": 1765721598048, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -329.7430298927927, + 68.22977202363336 + ], + [ + -528.2635513869322, + 78.60993001025508 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "hsCRRVv1QSw8HBPIiNiaI", + "focus": 0.5908334979342952, + "gap": 1.344746369108634 + }, + "endBinding": { + "elementId": "SuHzmu7piFTPSV_0gXXro", + "focus": 0.23928444094081253, + "gap": 16.293951609805617 + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "RPW1I4t0X3p1jF7bLVGLq", + "type": "text", + "x": 449.390908856284, + "y": 835.2062492170405, + "width": 200.17135620117188, + "height": 37.76955868256944, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#e9ecef", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dotted", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0Y", + "roundness": null, + "seed": 932489936, + "version": 146, + "versionNonce": 884102352, + "isDeleted": false, + "boundElements": null, + "updated": 1765721637306, + "link": null, + "locked": false, + "text": "Ferry supplies", + "fontSize": 30.215646946055553, + "fontFamily": 5, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Ferry supplies", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "Nlt3wP3tQKHwuqJFA6Cd-", + "type": "arrow", + "x": 1302.5758985158277, + "y": 877.9876956334612, + "width": 62.8097325726776, + "height": 117.25231402193822, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#e9ecef", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dotted", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0a", + "roundness": { + "type": 2 + }, + "seed": 1088636112, + "version": 141, + "versionNonce": 127444016, + "isDeleted": false, + "boundElements": [], + "updated": 1765721693704, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -59.37986943191254, + 56.905708216816834 + ], + [ + 3.4298631407650646, + 117.25231402193822 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "aH2mWUxNtU2jAPX0nFkmL", + "focus": 0.6714449383730328, + "gap": 7.475273390184452 + }, + "endBinding": { + "elementId": "HGvzTx5MrUaT6zo-tlBww", + "focus": -0.7728702040169446, + "gap": 1.8550148792312484 + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "pLMbcAG8GGgYeGRpjWrjt", + "type": "arrow", + "x": 1298.7849685644017, + "y": 849.8699323875323, + "width": 107.27857521623923, + "height": 352.3928106846606, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#e9ecef", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dotted", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0c", + "roundness": { + "type": 2 + }, + "seed": 275907632, + "version": 200, + "versionNonce": 1618808528, + "isDeleted": false, + "boundElements": [], + "updated": 1765721693704, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -107.27857521623923, + 54.255831143845285 + ], + [ + -88.8179910248989, + 312.7040098226089 + ], + [ + -19.362589516308162, + 352.3928106846606 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "aH2mWUxNtU2jAPX0nFkmL", + "focus": 0.66409068643277, + "gap": 7.3848231469025905 + }, + "endBinding": { + "elementId": "4GuyB0WHJLP6qH1UtY2rz", + "focus": -0.8247267202143235, + "gap": 15.444360376978466 + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "lZCxHPXiM5hJGbIrH-rCf", + "type": "text", + "x": 1159.508047416506, + "y": 964.4303385564224, + "width": 115.159912109375, + "height": 25, + "angle": 4.717029164463175, + "strokeColor": "#1e1e1e", + "backgroundColor": "#e9ecef", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dotted", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0e", + "roundness": null, + "seed": 217785904, + "version": 73, + "versionNonce": 1012672720, + "isDeleted": false, + "boundElements": null, + "updated": 1765721696916, + "link": null, + "locked": false, + "text": "Depends On", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Depends On", + "autoResize": true, + "lineHeight": 1.25 + } + ], + "appState": { + "gridSize": 20, + "gridStep": 5, + "gridModeEnabled": false, + "viewBackgroundColor": "#ffffff" + }, + "files": {} +} \ No newline at end of file