Files
sunrise/src/controls/rainGear.ts
T

35 lines
1.3 KiB
TypeScript

export type RainGearItem = 'umbrella' | 'raincoat' | 'hood';
/** Equipment is independent of movement and emotes. */
export function createRainGearState() {
const worn = { umbrella: false, raincoat: false, hood: false };
let available = false;
let awaitingArrivalWeather = true;
return {
get available() { return available; },
get umbrella() { return worn.umbrella; },
get raincoat() { return worn.raincoat; },
get hood() { return worn.hood; },
apply(state: { umbrella: boolean; raincoat: boolean; hood: boolean }) {
worn.umbrella = state.umbrella;
worn.raincoat = state.raincoat;
worn.hood = state.raincoat && state.hood;
},
updateWeather(rain: number | null, snowfall: number | null) {
available = (rain ?? 0) > 0 || (snowfall ?? 0) > 0;
if (awaitingArrivalWeather && rain !== null) {
if (rain > 0) { worn.raincoat = true; worn.hood = true; }
awaitingArrivalWeather = false;
}
if (!available) { worn.umbrella = false; worn.raincoat = false; worn.hood = false; }
},
toggle(item: RainGearItem) {
if (!available) return false;
if (item === 'hood' && !worn.raincoat) return false;
worn[item] = !worn[item];
if (!worn.raincoat) worn.hood = false;
return true;
},
};
}