diff --git a/src/lib/components/ShipEdit/Weaponry/Weapon/HeavyMissile/index.svelte b/src/lib/components/ShipEdit/Weaponry/Weapon/HeavyMissile/index.svelte new file mode 100644 index 0000000..989666f --- /dev/null +++ b/src/lib/components/ShipEdit/Weaponry/Weapon/HeavyMissile/index.svelte @@ -0,0 +1,72 @@ +heavy missile + +
+ setFirstArc(detail)} + /> +
+ + + + + + + + diff --git a/src/lib/components/ShipEdit/Weaponry/Weapon/index.svelte b/src/lib/components/ShipEdit/Weaponry/Weapon/index.svelte index ad06add..c330b45 100644 --- a/src/lib/components/ShipEdit/Weaponry/Weapon/index.svelte +++ b/src/lib/components/ShipEdit/Weaponry/Weapon/index.svelte @@ -19,6 +19,7 @@ import Needle from "./Needle.svelte"; import Graser from "./Graser/index.svelte"; import Torpedo from "./Torpedo/index.svelte"; + import Missile from "./HeavyMissile/index.svelte"; const component = { beam: Beam, @@ -28,6 +29,7 @@ needle: Needle, graser: Graser, torpedo: Torpedo, + heavyMissile: Missile, }; export let reqs = {}; diff --git a/src/lib/shipDux/weaponry/weapons.ts b/src/lib/shipDux/weaponry/weapons.ts index 3a0f98d..bdb974a 100644 --- a/src/lib/shipDux/weaponry/weapons.ts +++ b/src/lib/shipDux/weaponry/weapons.ts @@ -35,6 +35,16 @@ export const weaponTypes = [ reqs: { mass: 2, cost: 6 }, initial: { arc: "F" }, }, + { + name: "heavy missile", + type: "missile", + reqs: missileReqs, + initial: { + arcs: ["FS", "F", "FP"], + extended: false, + multiState: false, + }, + }, ]; const weaponsSlice = createSlice({ diff --git a/src/lib/store/ship/weaponry/rules.ts b/src/lib/store/ship/weaponry/rules.ts index 99c4e4d..001ad74 100644 --- a/src/lib/store/ship/weaponry/rules.ts +++ b/src/lib/store/ship/weaponry/rules.ts @@ -27,6 +27,13 @@ type Scattergun = { type: "scattergun" }; type Needle = { type: "needle"; arc: Arc }; +type HeavyMissile = { + type: "heavyMissile"; + arcs: Arc[]; + extended: boolean; + multiStage: boolean; +}; + type Graser = { type: "graser"; weaponClass: 1 | 2 | 3; @@ -46,7 +53,8 @@ export type Weapon = | Scattergun | Needle | Graser - | Torpedo; + | Torpedo + | HeavyMissile; export const weaponTypes = [ { @@ -120,6 +128,17 @@ export const weaponTypes = [ reqs: { mass: 2, cost: 6 }, initial: { arc: "F", type: "needle" }, }, + { + name: "heavy missile", + type: "heavyMissile", + reqs: missileReqs, + initial: { + arcs: ["FP", "F", "FS"], + extended: false, + multiStage: false, + type: "heavyMissile", + }, + }, ]; export function weaponReqs(weapon): Reqs { @@ -213,6 +232,21 @@ function graserReqs({ weaponClass, arcs }: Graser) { }; } +function missileReqs({ extended, multiStage }: HeavyMissile): Reqs { + let mass = 2; + let cost = 6; + if (extended) { + mass += 1; + cost += 3; + } + if (multiStage) { + mass += 2; + cost *= 2; + } + + return { cost, mass }; +} + function torpedoReqs({ weaponClass, arcs }: Torpedo): Reqs { let mass: number = 4; diff --git a/src/routes/(editor)/export/print/PrintShip/Weapons/HeavyMissile/index.svelte b/src/routes/(editor)/export/print/PrintShip/Weapons/HeavyMissile/index.svelte new file mode 100644 index 0000000..5729720 --- /dev/null +++ b/src/routes/(editor)/export/print/PrintShip/Weapons/HeavyMissile/index.svelte @@ -0,0 +1,52 @@ +
+ + + +
+ {#if extended} +
extended range
+ {/if} + {#if multiStage} +
multi-stage
+ {/if} +
+
+ + + + diff --git a/src/routes/(editor)/export/print/PrintShip/Weapons/HeavyMissile/index.test.js b/src/routes/(editor)/export/print/PrintShip/Weapons/HeavyMissile/index.test.js new file mode 100644 index 0000000..200782f --- /dev/null +++ b/src/routes/(editor)/export/print/PrintShip/Weapons/HeavyMissile/index.test.js @@ -0,0 +1,14 @@ +import { render } from "@testing-library/svelte"; +import HeavyMissile from "./index.svelte"; + +test("basic", () => { + const { queryByText } = render(HeavyMissile, { + props: { + extended: true, + multiStage: false, + }, + }); + + expect(queryByText("extended range")).toBeTruthy(); + expect(queryByText("multi-stage")).toBeFalsy(); +}); diff --git a/src/routes/(editor)/export/print/PrintShip/Weapons/HeavyMissiles.svelte b/src/routes/(editor)/export/print/PrintShip/Weapons/HeavyMissiles.svelte new file mode 100644 index 0000000..3574ce0 --- /dev/null +++ b/src/routes/(editor)/export/print/PrintShip/Weapons/HeavyMissiles.svelte @@ -0,0 +1,18 @@ +
+ {#each heavyMissiles as w} + + {/each} +
+ + + + diff --git a/src/routes/(editor)/export/print/PrintShip/Weapons/printComps.js b/src/routes/(editor)/export/print/PrintShip/Weapons/printComps.js index 2f82b89..24d059c 100644 --- a/src/routes/(editor)/export/print/PrintShip/Weapons/printComps.js +++ b/src/routes/(editor)/export/print/PrintShip/Weapons/printComps.js @@ -5,6 +5,7 @@ import Scattergun from "./Scattergun.svelte"; import Needlebeam from "./Needlebeam.svelte"; import Graser from "./Graser/index.svelte"; import Torpedo from "./Torpedo/index.svelte"; +import HeavyMissile from "./HeavyMissile/index.svelte"; export default { torpedo: Torpedo, @@ -14,4 +15,5 @@ export default { pds: PDS, scattergun: Scattergun, needle: Needlebeam, + heavyMissile: HeavyMissile, }; diff --git a/src/routes/(editor)/export/print/PrintShip/index.svelte b/src/routes/(editor)/export/print/PrintShip/index.svelte index ddf0db6..fdc5f76 100644 --- a/src/routes/(editor)/export/print/PrintShip/index.svelte +++ b/src/routes/(editor)/export/print/PrintShip/index.svelte @@ -5,6 +5,8 @@