new weapon
This commit is contained in:
parent
fd72aafec0
commit
b40efe242e
@ -1,30 +1,4 @@
|
||||
|
||||
export function weapon_cost_mass(weapon){
|
||||
let cost = 0;
|
||||
let mass = 0;
|
||||
|
||||
if( weapon.weapon_type === 'beam' ) {
|
||||
return beam_cost_mass(weapon);
|
||||
}
|
||||
|
||||
if( weapon.weapon_type == 'submunition' ) {
|
||||
return { mass: 1, cost: 3 };
|
||||
}
|
||||
|
||||
if( weapon.weapon_type === 'pds' ) {
|
||||
return { mass: 1, cost: 3 };
|
||||
}
|
||||
|
||||
if( weapon.weapon_type === 'scattergun' ) {
|
||||
return { mass: 1, cost: 4 };
|
||||
}
|
||||
|
||||
if( weapon.weapon_type === 'needle' ) {
|
||||
return { mass: 2, cost: 6 };
|
||||
}
|
||||
|
||||
return { cost, mass };
|
||||
}
|
||||
|
||||
const is_broadside = arcs => {
|
||||
if( arcs.length !== 4 ) return false;
|
||||
@ -33,42 +7,3 @@ const is_broadside = arcs => {
|
||||
return !arcs.some( a => a.length === 1 );
|
||||
}
|
||||
|
||||
function beam_cost_mass({weapon_class, arcs}) {
|
||||
let mass;
|
||||
if( weapon_class === 1 ) {
|
||||
mass = 1;
|
||||
}
|
||||
|
||||
if( weapon_class == 2 ) {
|
||||
mass = 2 + (arcs.length > 3 ? 1 : 0);
|
||||
}
|
||||
|
||||
|
||||
if( weapon_class == 3 ) {
|
||||
mass = 4;
|
||||
|
||||
if( is_broadside(arcs) ) {
|
||||
mass += 2;
|
||||
}
|
||||
else {
|
||||
mass += arcs.length - 1;
|
||||
}
|
||||
}
|
||||
|
||||
if( weapon_class == 4 ) {
|
||||
mass = 8;
|
||||
|
||||
if( is_broadside(arcs) ) {
|
||||
mass += 4;
|
||||
}
|
||||
else {
|
||||
mass += 2*(arcs.length - 1);
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
mass, cost: 3 * mass
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
22
src/lib/components/ShipEdit/Weaponry/AddWeapon.svelte
Normal file
22
src/lib/components/ShipEdit/Weaponry/AddWeapon.svelte
Normal file
@ -0,0 +1,22 @@
|
||||
<Field label="weapon type">
|
||||
<select bind:value={type}>
|
||||
{#each weaponTypes as weapon (weapon.type)}
|
||||
<option value={weapon.type}>{weapon.name}</option>
|
||||
{/each}
|
||||
</select>
|
||||
|
||||
<button class="button small blue" on:click={addWeapon} >add weapon</button>
|
||||
</Field>
|
||||
|
||||
<script>
|
||||
import { getContext } from "svelte";
|
||||
import Field from "../../Field/index.svelte";
|
||||
|
||||
import { weaponTypes } from '$lib/shipDux/weaponry/weapons.js';
|
||||
|
||||
export let ship = getContext("ship");
|
||||
|
||||
let type = weaponTypes[0].value;
|
||||
|
||||
const addWeapon = () => ship.dispatch.addWeapon(type);
|
||||
</script>
|
@ -2,6 +2,8 @@
|
||||
<Firecons {...firecons} />
|
||||
|
||||
<ADFC {...adfc} />
|
||||
|
||||
<AddWeapon />
|
||||
</Section>
|
||||
|
||||
<script>
|
||||
@ -13,10 +15,13 @@ import Field from '$lib/components/Field/index.svelte';
|
||||
|
||||
import Firecons from './Firecons.svelte';
|
||||
import ADFC from './ADFC.svelte';
|
||||
import AddWeapon from './AddWeapon.svelte';
|
||||
|
||||
export let firecons = {};
|
||||
export let adfc = {};
|
||||
|
||||
export let weapons = [];
|
||||
|
||||
</script>
|
||||
|
||||
<style>
|
||||
|
@ -1,9 +1,12 @@
|
||||
import { Updux } from "updux";
|
||||
import u from "updeep";
|
||||
|
||||
import weapons from './weapons.js';
|
||||
|
||||
const reqs = { cost: 0, mass: 0 };
|
||||
|
||||
const dux = new Updux({
|
||||
subduxes: { weapons },
|
||||
initial: {
|
||||
firecons: {
|
||||
stations: 0,
|
||||
|
84
src/lib/shipDux/weaponry/weapons.js
Normal file
84
src/lib/shipDux/weaponry/weapons.js
Normal file
@ -0,0 +1,84 @@
|
||||
import { Updux } from "updux";
|
||||
import u from "updeep";
|
||||
|
||||
const reqs = { cost: 0, mass: 0 };
|
||||
|
||||
export const weaponTypes = [
|
||||
{ name: 'beam', type: 'beam', reqs: beam_cost_mass },
|
||||
{ name: 'submunition pack', type: 'submunition', reqs: { mass:1, cost:3 }},
|
||||
{ name: 'point defence system', type: 'pds', reqs: {mass:1,cost:3}},
|
||||
{ name: 'scattergun', type: 'scattergun', reqs: { mass:1,cost:4 }},
|
||||
{ name: 'needle weapon', type: 'needle', reqs: { mass: 2, cost: 6 }},
|
||||
];
|
||||
|
||||
const dux = new Updux({
|
||||
initial: [],
|
||||
actions: {
|
||||
addWeapon: null
|
||||
},
|
||||
});
|
||||
|
||||
dux.setMutation('addWeapon', type => state => {
|
||||
return [
|
||||
...state,
|
||||
{
|
||||
id: state.length +1,
|
||||
type: weaponTypes[0].type,
|
||||
reqs: weaponReqs(weaponTypes[0].type),
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
function weaponReqs(weapon) {
|
||||
|
||||
const {reqs} = weaponTypes.find( wt => wt.type === weapon.type ) ||{};
|
||||
|
||||
if(!reqs) return {};
|
||||
|
||||
if( typeof reqs === 'function' ) return reqs(weapon);
|
||||
|
||||
return reqs;
|
||||
}
|
||||
|
||||
function beam_cost_mass({weapon_class, arcs}) {
|
||||
let mass;
|
||||
if( weapon_class === 1 ) {
|
||||
mass = 1;
|
||||
}
|
||||
|
||||
if( weapon_class == 2 ) {
|
||||
mass = 2 + (arcs.length > 3 ? 1 : 0);
|
||||
}
|
||||
|
||||
|
||||
if( weapon_class == 3 ) {
|
||||
mass = 4;
|
||||
|
||||
if( is_broadside(arcs) ) {
|
||||
mass += 2;
|
||||
}
|
||||
else {
|
||||
mass += arcs.length - 1;
|
||||
}
|
||||
}
|
||||
|
||||
if( weapon_class == 4 ) {
|
||||
mass = 8;
|
||||
|
||||
if( is_broadside(arcs) ) {
|
||||
mass += 4;
|
||||
}
|
||||
else {
|
||||
mass += 2*(arcs.length - 1);
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
mass, cost: 3 * mass
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
export default dux;
|
Loading…
Reference in New Issue
Block a user