Author SHA1 Message Date
dutchie031 95fe7e1058 updated releasenotes 2026-09-07 19:22:52 +02:00
dutchie031 b8fe242c43 merged develop 2026-09-07 19:13:11 +02:00
dutchie031 61ba4de338 buildable mission updates 2026-08-30 20:24:20 +02:00
dutchie031 674160abbf Update doc slightly 2026-08-30 19:17:35 +02:00
dutchie031 8ff25ffeb0 Merge remote-tracking branch 'origin/develop' into feature/customBriefingSupplyMissions 2026-08-30 19:13:26 +02:00
dutchie031 428fe75a12 wip 2026-08-29 16:12:43 +02:00
dutchie031 2e5a31faef Custom briefings for BlueSam and FARPS 2026-08-29 15:57:29 +02:00
6 changed files with 26 additions and 28 deletions
+1 -1
View File
@@ -64,7 +64,7 @@
</footer> </footer>
<script> <script>
if (window.location.hostname.toLowerCase() == 'beta.spearhead.rocks') { if (true || window.location.hostname.toLowerCase() == 'beta.spearhead.rocks') {
betaHtml = '<note-box type="warning" title="Beta Version">You are looking at docs that are released with the beta version.</note-box>'; betaHtml = '<note-box type="warning" title="Beta Version">You are looking at docs that are released with the beta version.</note-box>';
} }
document.getElementById('beta-box-div').innerHTML = betaHtml || ''; document.getElementById('beta-box-div').innerHTML = betaHtml || '';
@@ -49,6 +49,17 @@ class DownloadScript extends HTMLElement {
return null; return null;
} }
} }
async fetchReleaseAssets(url){
try {
const response = await fetch(url);
const data = await response.json();
return data;
} catch (error) {
console.error('Error fetching release assets:', error);
return null;
}
}
async connectedCallback() { async connectedCallback() {
@@ -61,9 +72,10 @@ class DownloadScript extends HTMLElement {
if (latestRelease) { if (latestRelease) {
version = latestRelease.tag_name; version = latestRelease.tag_name;
timestamp = new Date(latestRelease.published_at).toLocaleDateString('en-CA'); timestamp = new Date(latestRelease.published_at).toLocaleDateString('en-CA');
const assets = latestRelease.assets;
const assets = await this.fetchReleaseAssets(latestRelease.assets_url);
if (assets && assets.length > 0) { if (assets && assets.length > 0) {
const spearheadAsset = assets.find(asset => asset.name.includes('spearhead.v')); const spearheadAsset = assets.find(asset => asset.name.includes('spearhead'));
if (spearheadAsset) { if (spearheadAsset) {
size = (spearheadAsset.size / 1024).toFixed(2) + 'kb'; size = (spearheadAsset.size / 1024).toFixed(2) + 'kb';
href = spearheadAsset.browser_download_url; href = spearheadAsset.browser_download_url;
@@ -93,7 +105,7 @@ class DownloadScript extends HTMLElement {
<p> <p>
<span class="version-text">${version}</span> (${timestamp}) <br> <span class="version-text">${version}</span> (${timestamp}) <br>
<a style="text-decoration: underline;" target="_blank" href="${href}">Download</a> (${size}) <br> <a style="text-decoration: underline;" target="_blank" href="${href}">Download</a> (${size}) <br>
<a style="text-decoration: underline;" target="_blank" href="https://git.dutchie031.com/Spearhead/spearhead/releases">See All Versions here</a> <a style="text-decoration: underline;" target="_blank" href="https://git.dutchie031.com/api/v1/repos/Spearhead/spearhead/releases">See All Versions here</a>
</p> </p>
</div> </div>
+2 -5
View File
@@ -169,16 +169,13 @@ class Sidebar extends HTMLElement {
render() { render() {
var betaHtml = ''; var betaHtml = '';
if (true || window.location.hostname.toLowerCase() == 'beta.spearhead.rocks') { if (window.location.hostname.toLowerCase() == 'beta.spearhead.rocks') {
betaHtml = '<note-box type="warning" title="Beta Version">You are looking at docs that are released with the beta version.</note-box>'; betaHtml = '<note-box type="warning" title="Beta Version">You are looking at docs that are released with the beta version.</note-box>';
} }
this.innerHTML = ` this.innerHTML = `
<div class="side-nav"> <div class="side-nav">
<div style="width:100%"> ${betaHtml}
${betaHtml}
</div>
<h4 class="side-nav-title"></h4> <h4 class="side-nav-title"></h4>
<ul> <ul>
<!-- Navigation items will be populated automatically --> <!-- Navigation items will be populated automatically -->
+7 -16
View File
@@ -80,12 +80,17 @@
</tbody> </tbody>
</table> </table>
<note-box type="info" title="Combining Tasks"> <note-box type="info" title="Combining Tasks">
Currently a group can do 1 thing. Either be Primary, Seconday, Sweep or Intercept. <br> Currently a group can do 1 thing. Either be Primary, Seconday, Sweep or Intercept. <br>
If you want to have different types during different stages, it's best to copy paste groups and If you want to have different types during different stages, it's best to copy paste groups and
rename them accordingly. <br> rename them accordingly. <br>
</note-box> </note-box>
<note-box type="info" title="Airfield Defenses">
</note-box>
<h3 id="cap-zones-ref">Zones</h3> <h3 id="cap-zones-ref">Zones</h3>
<table class="table-no-style"> <table class="table-no-style">
<tbody> <tbody>
@@ -94,7 +99,6 @@
<td>=></td> <td>=></td>
<td>A Cap ROUTE. The two most outer points are used to define the fly-over points.</td> <td>A Cap ROUTE. The two most outer points are used to define the fly-over points.</td>
</tr> </tr>
<tr><td>______________________</td><td></td><td></td> </tr>
<tr> <tr>
<td><code-inline>INTERCEPTZONE_[ZoneID]_[NAME]</code-inline></td> <td><code-inline>INTERCEPTZONE_[ZoneID]_[NAME]</code-inline></td>
<td>=></td> <td>=></td>
@@ -108,19 +112,6 @@
</p> </p>
<h2 id="setup">Setting up groups</h2> <h2 id="setup">Setting up groups</h2>
<h3 id="airbases-grouping">Airbases</h3>
<p>
Before talking about the groups, it's good to mention that groups are currently logically grouped and managed by an Airbase. <br>
Meaning, Airbase A does not know how many flights Airbase B is sending out. <br>
This might change in the future where multiple Airbases can work together.
</p>
<note-box type="info" title="Airbase Defenses">
When an Airbase is "active" and thus has aircraft being scheduled for taskings, all RED groups at that airfield will also be spawned. <br>
Additionally, all missions of type <code-inline>SAM</code-inline> will be spawned (without being available in Primary Missions). <br>
This should hopefully give you all the tools to make distance CAP airbases still feel very well defended.
</note-box>
<h3 id="types-explained">Types explained</h3> <h3 id="types-explained">Types explained</h3>
<p> <p>
Before we go into depth on each type it's best to first look at the types briefly and what we Before we go into depth on each type it's best to first look at the types briefly and what we
@@ -149,7 +140,7 @@
The ground attack units mentioned are not in yet and thus escort groups are not either. <br> The ground attack units mentioned are not in yet and thus escort groups are not either. <br>
<note-box type="warning" title="Overriding Taskings"> <note-box type="warning" title="Overriding Taskings">
Each tasking has very specific waypoints, both for departure, arrival and ofcourse all point in between. <br> Each tasking has very specific waypoints, both for departure, arrical and ofcourse all point in between. <br>
Overriding the "tasking" will break part of the cap flow as "RTBInTen" and RTB events are triggered by waypoints. <br> Overriding the "tasking" will break part of the cap flow as "RTBInTen" and RTB events are triggered by waypoints. <br>
Overriding these waypoints and taskings will break the management by Spearhead. Overriding these waypoints and taskings will break the management by Spearhead.
</note-box> </note-box>
@@ -163,7 +154,7 @@
The way the trigger zone is mapped to a route is as follows: <br> The way the trigger zone is mapped to a route is as follows: <br>
<br> <br>
The 2 points that are furthest apart from each other are chosen as the "leg" of the route. <br> The 2 points that are furthest apart from each other are chosen as the "leg" of the route. <br>
The other 2 points are discarded at this time. <br> The other 2 points are discarded. <br>
<br> <br>
The Orbit route is then created with an "Anchored" task. With the closest point being the starting The Orbit route is then created with an "Anchored" task. With the closest point being the starting
point with an outbound leg to the furthest point. <br> point with an outbound leg to the furthest point. <br>
-1
View File
@@ -337,7 +337,6 @@ main {
.side-nav { .side-nav {
min-width: 200px; min-width: 200px;
max-width: 200px;
padding-left: 0; padding-left: 0;
overflow-y: auto; overflow-y: auto;
border-right: none; border-right: none;
@@ -1,7 +1,6 @@
local Stage = require("classes.stageClasses.Stages.BaseStage.Stage") local Stage = require("classes.stageClasses.Stages.BaseStage.Stage")
local GlobalCapManager = require("classes.capClasses.GlobalCapManager") local GlobalCapManager = require("classes.capClasses.GlobalCapManager")
local StageState = require("classes.stageClasses.Stages.StageState")
---@class ExtraStage : Stage ---@class ExtraStage : Stage
local ExtraStage = {} local ExtraStage = {}
@@ -62,7 +61,7 @@ function ExtraStage:OnStageNumberChanged(number, stageLaneIdentifier)
self:ActivateStage() self:ActivateStage()
end end
if self._currentStageState == StageState.BLUE then if self._currentStageState == Stage.CurrentStageState.BLUE then
self:ActivateBlueStage() self:ActivateBlueStage()
end end