From e515ce2e749898e91c074aa74e64b3953ff33723 Mon Sep 17 00:00:00 2001 From: Yanick Champoux Date: Fri, 12 May 2023 10:48:53 -0400 Subject: [PATCH] add salvo missile racks --- CHANGELOG.yml | 4 ++ .../Weaponry/Weapon/SalvoMissileRack.svelte | 66 ++++++++++++++++++ .../ShipEdit/Weaponry/Weapon/index.svelte | 2 + src/lib/store/ship/weaponry/rules.ts | 25 +++++++ .../print/PrintShip/Weapons/SMR/index.svelte | 36 ++++++++++ .../print/PrintShip/Weapons/SMR/index.test.js | 12 ++++ .../print/PrintShip/Weapons/printComps.js | 2 + .../export/print/PrintShip/index.svelte | 25 ++++++- static/icons/missile.svg | 68 +++++++++++++++++++ 9 files changed, 237 insertions(+), 3 deletions(-) create mode 100644 src/lib/components/ShipEdit/Weaponry/Weapon/SalvoMissileRack.svelte create mode 100644 src/routes/(editor)/export/print/PrintShip/Weapons/SMR/index.svelte create mode 100644 src/routes/(editor)/export/print/PrintShip/Weapons/SMR/index.test.js create mode 100644 static/icons/missile.svg diff --git a/CHANGELOG.yml b/CHANGELOG.yml index e1ee642..754345c 100644 --- a/CHANGELOG.yml +++ b/CHANGELOG.yml @@ -4,6 +4,10 @@ project: with_stats: true ticket_url: null releases: + - version: NEXT + changes: + - desc: add SMRs + type: feat - version: 3.1.0 changes: - desc: add version and changelog to the about section diff --git a/src/lib/components/ShipEdit/Weaponry/Weapon/SalvoMissileRack.svelte b/src/lib/components/ShipEdit/Weaponry/Weapon/SalvoMissileRack.svelte new file mode 100644 index 0000000..08b5b46 --- /dev/null +++ b/src/lib/components/ShipEdit/Weaponry/Weapon/SalvoMissileRack.svelte @@ -0,0 +1,66 @@ +salvo missile rack + +
+ setFirstArc(detail)} + /> +
+ + + + + + diff --git a/src/lib/components/ShipEdit/Weaponry/Weapon/index.svelte b/src/lib/components/ShipEdit/Weaponry/Weapon/index.svelte index c330b45..c1b2815 100644 --- a/src/lib/components/ShipEdit/Weaponry/Weapon/index.svelte +++ b/src/lib/components/ShipEdit/Weaponry/Weapon/index.svelte @@ -20,6 +20,7 @@ import Graser from "./Graser/index.svelte"; import Torpedo from "./Torpedo/index.svelte"; import Missile from "./HeavyMissile/index.svelte"; + import SalvoMissileRack from "./SalvoMissileRack.svelte"; const component = { beam: Beam, @@ -30,6 +31,7 @@ graser: Graser, torpedo: Torpedo, heavyMissile: Missile, + smr: SalvoMissileRack, }; export let reqs = {}; diff --git a/src/lib/store/ship/weaponry/rules.ts b/src/lib/store/ship/weaponry/rules.ts index 001ad74..e4184c4 100644 --- a/src/lib/store/ship/weaponry/rules.ts +++ b/src/lib/store/ship/weaponry/rules.ts @@ -34,6 +34,12 @@ type HeavyMissile = { multiStage: boolean; }; +type SalvoMissileRack = { + type: "salvoMissileRack"; + arcs: Arc[]; + extended: boolean; +}; + type Graser = { type: "graser"; weaponClass: 1 | 2 | 3; @@ -139,6 +145,16 @@ export const weaponTypes = [ type: "heavyMissile", }, }, + { + name: "salvo missile rack", + type: "smr", + reqs: smrReqs, + initial: { + arcs: ["FP", "F", "FS"], + extended: false, + type: "smr", + }, + }, ]; export function weaponReqs(weapon): Reqs { @@ -247,6 +263,15 @@ function missileReqs({ extended, multiStage }: HeavyMissile): Reqs { return { cost, mass }; } +function smrReqs({ extended }: SalvoMissileRack): Reqs { + let mass = 4; + if (extended) mass += 1; + return { + mass, + cost: 3 * mass, + }; +} + function torpedoReqs({ weaponClass, arcs }: Torpedo): Reqs { let mass: number = 4; diff --git a/src/routes/(editor)/export/print/PrintShip/Weapons/SMR/index.svelte b/src/routes/(editor)/export/print/PrintShip/Weapons/SMR/index.svelte new file mode 100644 index 0000000..c6a495f --- /dev/null +++ b/src/routes/(editor)/export/print/PrintShip/Weapons/SMR/index.svelte @@ -0,0 +1,36 @@ +
+ + + +
+ {#if extended} +
extended range
+ {/if} +
+
+ + + + diff --git a/src/routes/(editor)/export/print/PrintShip/Weapons/SMR/index.test.js b/src/routes/(editor)/export/print/PrintShip/Weapons/SMR/index.test.js new file mode 100644 index 0000000..58f7065 --- /dev/null +++ b/src/routes/(editor)/export/print/PrintShip/Weapons/SMR/index.test.js @@ -0,0 +1,12 @@ +import { render } from "@testing-library/svelte"; +import SMR from "./index.svelte"; + +test("basic", () => { + const { queryByText } = render(SMR, { + props: { + extended: true, + }, + }); + + expect(queryByText("extended range")).toBeTruthy(); +}); diff --git a/src/routes/(editor)/export/print/PrintShip/Weapons/printComps.js b/src/routes/(editor)/export/print/PrintShip/Weapons/printComps.js index 24d059c..516a706 100644 --- a/src/routes/(editor)/export/print/PrintShip/Weapons/printComps.js +++ b/src/routes/(editor)/export/print/PrintShip/Weapons/printComps.js @@ -6,6 +6,7 @@ import Needlebeam from "./Needlebeam.svelte"; import Graser from "./Graser/index.svelte"; import Torpedo from "./Torpedo/index.svelte"; import HeavyMissile from "./HeavyMissile/index.svelte"; +import SalvoMissileRack from "./SMR/index.svelte"; export default { torpedo: Torpedo, @@ -16,4 +17,5 @@ export default { scattergun: Scattergun, needle: Needlebeam, heavyMissile: HeavyMissile, + smr: SalvoMissileRack, }; diff --git a/src/routes/(editor)/export/print/PrintShip/index.svelte b/src/routes/(editor)/export/print/PrintShip/index.svelte index fdc5f76..2562d1a 100644 --- a/src/routes/(editor)/export/print/PrintShip/index.svelte +++ b/src/routes/(editor)/export/print/PrintShip/index.svelte @@ -5,7 +5,15 @@