--- import LoggedIn from '../../layouts/LoggedIn.astro'; import locationManager from '../../lib/classes/managers/LocationManager'; import { Planet } from '../../lib/classes/managers/PlanetManager'; import SystemManager from '../../lib/classes/managers/SystemManager'; import { getAllFleetByUser } from '../../lib/db/fleet'; import { getAllShips } from '../../lib/db/ships'; import { getUserSpyReports } from '../../lib/db/users'; import { getName } from '../../lib/utils/langDriver'; const { token, user, lang } = Astro.locals; const active: SystemManager | Planet = Astro.locals.active; const activeId = active instanceof SystemManager ? active.data._id : active._id; const ships = await getAllShips(); const url = Astro.url.origin; if(Astro.request.method === "POST") { const form = await Astro.request.formData(); const cargo: Array<{ id: string, amount: number }> = []; form.forEach((v, k) => { if(k.match(/cargo\[\d\]\[id\]/)) { const amount = parseInt(form.get(`${k.substring(0, k.indexOf("]"))}][amount]`)?.toString() ?? "0"); if(amount === 0 || isNaN(amount)) return; cargo.push({ id: v.toString(), amount }); } }); const destination = form.get('mission') === "EXPEDITION" || form.get('mission') === "COLONIZE" ? form.get('toSystem') ? form.get('destination-system')?.toString() : form.get('destination-sector')?.toString() : form.get('toSystem') ? form.get('destination-system')?.toString() : form.get('destination-planet')?.toString(); const fleetData = { source: active instanceof SystemManager ? active.data._id : active._id, destination, mission: form.get('mission')?.toString() ?? "NULL", ships: ships.map(ship => { const amount = parseInt(form.get(`ship-amount-${ship.id}`)?.toString() ?? "0"); if(amount === 0) return null; return { id: ship.id, amount } }).filter(s => s !== null), cargo } const response = await fetch(`${Astro.url.origin}/api/fleet/send`, { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${token}` }, body: JSON.stringify(fleetData) }); console.log(await response.json()); return Astro.redirect('/game/fleet'); } await locationManager.updateFleet(); const fleet = (await getAllFleetByUser(user.id)).filter(f => new Date().getTime() - f.arrivalTime.getTime() < 0); fleet.sort((a, b) => a.departureTime.getTime() - b.departureTime.getTime()); const galaxies = locationManager.galaxies; let own = 0; let friendly = 0; let enemy = 0; for(const f of fleet) { const source = locationManager.findId(f.source); if(source !== null) { if(source instanceof SystemManager) { if(source.data.ownedBy.id.equals(user.id)) own++; else if(!f.returning) { if(f.mission === "SPY" || f.mission === "ATTACK") enemy++; else friendly++; } } else { if(source.system.data.ownedBy.id.equals(user.id)) own++; else if(!f.returning) { if(f.mission === "SPY" || f.mission === "ATTACK") enemy++; else friendly++; } } } } const discoveredSectors = await getUserSpyReports(user.id); const sectorsList = galaxies.map(galaxy => { return { _id: galaxy._id, name: galaxy.name, sectors: galaxy.sectors.map(sector => { return { _id: sector._id, name: sector.name, systems: sector.systems.map(system => { const discovered = discoveredSectors.find(s => s.systemId.equals(system.data._id)); if(!discovered && !system.data.ownedBy.id.equals(user.id)) return { _id: system.data._id, name: `${system.data.name} (not discovered)`, planets: [] } return { _id: system.data._id, name: system.data.name, planets: system.planets.map(planet => { return { _id: planet._id, name: planet.name } }) } }) } }) } }); ---

Sending fleet from {active instanceof SystemManager ? active.data.name : active.name}


Ships

{active.ships.ships.map(ship =>

{getName(lang, 'ships', ship.data.id)} - {ship.amount}

)}

Mission


Send to

Galaxy

Sector

System

Planet


Cargo

Solid: 0
Liquid: 0
Gas: 0
Add new +

Fuel consumption

Base usage from ships: 0
Distance: 0
0 hydrogen will be added to cargo as fuel

Estimates

Fleet will arrive at destination at:
Fleet will return at: