AotDS, captain log 7
January 29th, 2021

If you are curious, the binding of the Updux store to the svelte reactive store and the enabling of Redux devtools goodness look like:
import { writable } from "svelte/store";
import dux from "./battle/dux";
import { compose, applyMiddleware } from "redux";
const composeEnhancers =
(typeof window !== "undefined" &&
window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__) ||
compose;
const duxStore = dux.createStore({}, (mw) =>
composeEnhancers(applyMiddleware(mw))
);
const store = writable(duxStore.getState());
duxStore.subscribe(() => {
store.set(duxStore.getState());
});
As for the duxStore
, where all the logic will reside, it
currently looks something like this:
import Updux from "updux";
import u from "@yanick/updeep";
import { action as actionTS, payload } from "ts-action";
import { plot_movement } from "@aotds/aotds-battle";
const action = (name) => actionTS(name, payload());
const dux = new Updux({ initial: {} });
dux.addMutation(action("initBattle"), battle => () => battle);
dux.addMutation(
action("setFireconTarget"),
({ bogey_id, firecon_id, target_id }) =>
u({
bogeys: u.mapWhen(
{ id: bogey_id },
{
weaponry: {
firecons: u.mapWhen(
{ id: firecon_id },
{
target_id,
}
),
},
orders: {
firecons: u.mapWhenElse(
{ firecon_id },
{ target_id },
{ target_id, firecon_id }
),
},
}
),
})
);
dux.addMutation(action("setNavigationOrder"), ({ bogey_id: id, order }) =>
u({
bogeys: u.mapWhen({ id }, (bogey) => {
const course = plot_movement(
u.updateIn("orders.navigation", order, bogey)
);
return u(
{
navigation: { course },
orders: { navigation: course.orders },
},
bogey
);
}),
})
);
dux.addMutation(
action("assignWeaponToFirecon"),
({ bogey_id, firecon_id, weapon_id }) =>
u({
bogeys: u.mapWhen(
{ id: bogey_id },
{
weaponry: {
weapons: u.mapWhen({ id: weapon_id }, { firecon_id }),
},
orders: {
weapons: u.mapWhenElse(
{ weapon_id },
{ firecon_id },
{
weapon_id,
firecon_id,
}
),
},
}
),
})
);
export default dux.asDux;