slanted-gamedev-toolz
Version:
A slanted mix of tools for your brilliant ideas in game design.
80 lines (79 loc) • 3.07 kB
JavaScript
import { useCallback, useState } from "react";
import { deadBoxerCount, isDevMode, localSaveRosterId, } from "../../constants/HBC_CONSTANTS";
import { Boxer } from "../../constants/VANILLA_FIGHTERS";
import { rollDeadRedBoxer } from "../../constants/VANILLA_FIGHTERS_GEN";
import { boxerBackgroundTypes, boxerCreatorBackgrounds, } from "../../constants/boxerBackgrounds";
import { legendaryFighters } from "../../constants/legendaryyBoxers/LEGENDARY_BOXERS";
import { useGlobalContext } from "../../contexts/globalContext/GlobalContext";
import { compressObjectWithPako, decompressStringWithPako, } from "../../ui/components/smartComponents/ImportExportLocalStorage/saveStringUtil";
export const getRosterFromLocalStorage = () => {
const savedRosterString = localStorage.getItem(localSaveRosterId);
const savedRoster = savedRosterString
? decompressStringWithPako(savedRosterString)
: { roster: [] };
return savedRoster;
};
export const saveRosterToLocalStorage = (newRoster) => {
localStorage.setItem(localSaveRosterId, compressObjectWithPako({ roster: newRoster }));
};
export const deleteRosterFromLocalStorage = () => {
localStorage.removeItem(localSaveRosterId);
};
export const useLocalSaveRoster = () => {
const loadedRosterSaveData = getRosterFromLocalStorage();
const { isLoadingGameRef } = useGlobalContext();
const [localStorageRoster, _setRosterSaveGameData] = useState(loadedRosterSaveData?.roster);
const saveLocalStorageRoster = useCallback((newRoster) => {
if (isLoadingGameRef.current)
return;
saveRosterToLocalStorage(newRoster);
_setRosterSaveGameData([...newRoster]);
}, [isLoadingGameRef]);
if (!loadedRosterSaveData || loadedRosterSaveData.roster.length <= 1) {
if (isDevMode) {
console.log("created new roster save file");
}
saveLocalStorageRoster(generateRosterData());
}
const clearLocalStorageRoster = useCallback(() => {
if (!localSaveRosterId) {
console.error("!localSaveRosterId");
return;
}
deleteRosterFromLocalStorage();
_setRosterSaveGameData([]);
}, []);
return {
saveLocalStorageRoster,
clearLocalStorageRoster,
localStorageRoster,
};
};
export function generateRosterData() {
const roster = [];
boxerBackgroundTypes.forEach((bg) => {
const b = new Boxer({
isCleanRecord: false,
...boxerCreatorBackgrounds[bg],
isNoEquipment: true,
isDead: false,
code: "rb",
});
const b2 = new Boxer({
isCleanRecord: false,
...boxerCreatorBackgrounds[bg],
isNoEquipment: true,
isDead: false,
code: "rb",
});
roster.push(b);
roster.push(b2);
});
for (let i = 0; i < deadBoxerCount; i++) {
roster.push(rollDeadRedBoxer());
}
for (const leg of legendaryFighters) {
roster.push(leg);
}
return roster;
}