slanted-gamedev-toolz
Version:
A slanted mix of tools for your brilliant ideas in game design.
75 lines (74 loc) • 2.71 kB
JavaScript
import { useCallback, useEffect, useState } from "react";
import { isDevMode, localSaveFightId } from "../../constants/HBC_CONSTANTS";
import { useGlobalContext } from "../../contexts/globalContext/GlobalContext";
import { compressObjectWithPako, decompressStringWithPako, } from "../../ui/components/smartComponents/ImportExportLocalStorage/saveStringUtil";
export const getFightFromLocalStorage = () => {
const savedFightString = localStorage.getItem(localSaveFightId);
const savedFight = savedFightString
? decompressStringWithPako(savedFightString)
: null;
return savedFight;
};
export const saveFightToLocalStorage = (savedFight) => {
localStorage.setItem(localSaveFightId, compressObjectWithPako(savedFight));
};
export const deleteFightFromLocalStorage = () => {
localStorage.removeItem(localSaveFightId);
};
export const useLocalSaveFight = () => {
const { isLoadingGameRef } = useGlobalContext();
const saveLocalStorageFight = useCallback(async (savedFight, note) => {
if (isLoadingGameRef.current)
return;
if (!localSaveFightId) {
console.error("!localSaveFightId");
return;
}
if (isDevMode) {
console.log(`saveLocalStorageFight / ${note}:`, savedFight);
}
saveFightToLocalStorage(savedFight);
_setFightSaveGameData(savedFight);
}, [isLoadingGameRef]);
const clearLocalStorageFight = useCallback(() => {
if (!localSaveFightId) {
console.error("!localSaveFightId");
return;
}
deleteFightFromLocalStorage();
_setFightSaveGameData(null);
}, []);
let loadedSaveData = getFightFromLocalStorage();
const isSaveOk = checkSaveIsValid(loadedSaveData);
if (!isSaveOk) {
loadedSaveData = null;
}
const [fightSaveGameData, _setFightSaveGameData] = useState(loadedSaveData);
useEffect(() => {
if (!localSaveFightId) {
console.error("!localSaveFightId");
return;
}
const save = getFightFromLocalStorage();
const isSaveValid = checkSaveIsValid(save);
if (save && isSaveValid) {
_setFightSaveGameData(save);
}
return function cleanup() {
const save = getFightFromLocalStorage();
if (!save) {
_setFightSaveGameData(null);
}
};
}, []);
return { saveLocalStorageFight, clearLocalStorageFight, fightSaveGameData };
};
const checkSaveIsValid = (save) => {
if (!save)
return false;
if (!save?.challengee)
return false;
if (!save?.challenger)
return false;
return true;
};