slanted-gamedev-toolz
Version:
A slanted mix of tools for your brilliant ideas in game design.
48 lines (47 loc) • 1.96 kB
JavaScript
import { useCallback, useState } from "react";
import { getNewUser } from "../../api/users/UserType";
import { isDevMode, localUserSaveId } from "../../constants/HBC_CONSTANTS";
import { useGlobalContext } from "../../contexts/globalContext/GlobalContext";
import { compressObjectWithPako, decompressStringWithPako, } from "../../ui/components/smartComponents/ImportExportLocalStorage/saveStringUtil";
export const getUserFromLocalStorage = () => {
const localUserSaveJson = localStorage.getItem(localUserSaveId);
if (!localUserSaveJson)
return {};
const savedUser = decompressStringWithPako(localUserSaveJson);
return savedUser;
};
export const saveUserToLocalStorage = (updatedUser) => {
localStorage.setItem(localUserSaveId, compressObjectWithPako(updatedUser));
};
export const deleteUserFromLocalStorage = () => {
localStorage.removeItem(localUserSaveId);
};
export const useLocalSaveUser = () => {
const loadedSaveUser = getUserFromLocalStorage();
const { isLoadingGameRef } = useGlobalContext();
const [userSaveGameData, _setSaveGameData] = useState(loadedSaveUser || getNewUser());
const saveUserSaveGameData = useCallback((updatedUser) => {
if (isLoadingGameRef.current)
return;
saveUserToLocalStorage(updatedUser);
_setSaveGameData(() => {
return updatedUser;
});
}, [isLoadingGameRef]);
if (!loadedSaveUser || !loadedSaveUser._id) {
if (isDevMode) {
console.log("created new user save file");
}
// NO SAVE DATA EXISTS
saveUserSaveGameData(getNewUser());
}
const clearUserSaveGameData = useCallback(() => {
if (!localUserSaveId) {
console.error("!localUserSaveId");
return;
}
deleteUserFromLocalStorage();
_setSaveGameData(getNewUser());
}, []);
return { userSaveGameData, saveUserSaveGameData, clearUserSaveGameData };
};