aotds-docks/src/components/Weapon/index.svelte

124 lines
2.2 KiB
Svelte
Raw Normal View History

2020-07-19 20:21:28 +00:00
<ShipItem {cost} {mass}>
2020-07-28 18:55:08 +00:00
<div class="weapon_row">
2020-07-28 19:42:20 +00:00
<input type="button" class="button small red remove" value="remove"
on:click={remove} />
2020-07-19 20:21:28 +00:00
2020-07-28 18:55:08 +00:00
<svelte:component this={weapon_component[weapon_type]} {...weapon}
2020-07-27 20:19:08 +00:00
on:change={update}/>
2020-07-28 18:55:08 +00:00
</div>
2020-07-19 20:21:28 +00:00
</ShipItem>
<script>
2020-07-27 19:26:07 +00:00
import {getContext } from 'svelte';
2020-07-19 20:21:28 +00:00
import Arc from '../Weapons/Arc.svelte';
import { weapon_cost_mass } from '../../dux/weapons/rules.js';
import fp from 'lodash/fp';
import _ from 'lodash';
import { createEventDispatcher } from 'svelte';
import ShipItem from '~C/ShipItem';
import Field from '~C/Field';
2020-07-27 20:19:08 +00:00
import Beam from './Beam';
2020-07-27 22:17:55 +00:00
import Submunition from './Submunition';
import PointDefenceSystem from './PointDefenceSystem';
import Scattergun from './Scattergun';
import Needle from './Needle';
2020-07-27 19:26:07 +00:00
import dux from '~/dux';
2020-07-27 20:19:08 +00:00
const weapon_component = {
beam: Beam,
2020-07-27 22:17:55 +00:00
'submunition': Submunition,
'pds': PointDefenceSystem,
scattergun: Scattergun,
needle: Needle,
2020-07-27 20:19:08 +00:00
};
2020-07-19 20:21:28 +00:00
2020-07-27 20:19:08 +00:00
export let weapon = {};
2020-07-19 20:21:28 +00:00
export let id;
export let cost;
export let mass;
2020-07-27 19:26:07 +00:00
export let ship_change = getContext('ship_change') || ( () => {} );
2020-07-19 20:21:28 +00:00
2020-07-27 22:17:55 +00:00
let weapon_type = weapon.weapon_type;
2020-07-19 20:21:28 +00:00
2020-07-27 19:26:07 +00:00
const remove = () => ship_change( dux.actions.remove_weapon(id) );
2020-07-19 20:21:28 +00:00
2020-07-27 22:17:55 +00:00
2020-07-27 20:19:08 +00:00
const update = ({detail}) => {
ship_change( dux.actions.set_weapon({
id, weapon_type, ...detail
}) );
}
2020-07-19 20:21:28 +00:00
</script>
<style>
.weapon {
display: flex;
align-items: center;
}
.weapon > * {
margin-right: 2em;
}
.arcs {
display: grid;
grid-template-rows: 1fr 1fr 1fr 1fr;
grid-template-columns: 1fr 1fr 1fr 1fr;
align-items: center;
justify-items: center;
width: 6em;
}
.arc input {
margin: 0px;
}
.arc.F {
grid-column: 2 / span 2;
grid-row: 1;
}
.arc.FS {
grid-column: 1;
grid-row: 1 / span 2;
}
.arc.FP {
grid-column: 4;
grid-row: 1 / span 2;
}
.arc.AS {
grid-column: 1;
grid-row: 3 / span 2;
}
.arc.AP {
grid-column: 4;
grid-row: 3 / span 2;
}
.arc.A {
grid-column: 2 / span 2;
grid-row: 4;
}
.add-weapon {
display: block;
}
2020-07-28 18:55:08 +00:00
.weapon_row {
display: flex;
gap: 2em;
align-items: center;
}
2020-07-19 20:21:28 +00:00
</style>