🎨 store evolution in ui slice

This commit is contained in:
Chase Manning 2023-11-28 12:29:56 +00:00
commit 0e85caa35e
3 changed files with 32 additions and 57 deletions

View file

@ -6,7 +6,7 @@ import useEvent from "../app/use-event";
import { Event } from "../app/emitter";
import PixelImage from "../styles/PixelImage";
import { useDispatch, useSelector } from "react-redux";
import { selectEvolution } from "../state/uiSlice";
import { hideEvolution, selectEvolution } from "../state/uiSlice";
import { selectPokemon, updateSpecificPokemon } from "../state/gameSlice";
const StyledEvolution = styled.div`
@ -244,15 +244,13 @@ const TextContainer = styled.div`
const Evolution = () => {
const dispatch = useDispatch();
const pokemonIndex = useSelector(selectEvolution);
const evolution = useSelector(selectEvolution);
const allPokemon = useSelector(selectPokemon);
const evolvingPokemon = allPokemon[pokemonIndex || 0];
const evolvingPokemon = allPokemon[evolution?.index || 0];
const evolvingId = evolvingPokemon ? evolvingPokemon.id : null;
const metadata = usePokemonMetadata(evolvingId);
const evolvesMetadata = usePokemonMetadata(
metadata?.evolution?.pokemon || null
);
const show = pokemonIndex !== null;
const evolvesMetadata = usePokemonMetadata(evolution?.evolveToId || null);
const show = evolution !== null;
const [evolved, setEvolved] = useState(false);
@ -260,18 +258,18 @@ const Evolution = () => {
if (!show) return;
if (!evolved) return;
if (!metadata) throw new Error("No metadata for evolution");
if (!metadata.evolution) throw new Error("No evolving pokemon");
setEvolved(false);
dispatch(
updateSpecificPokemon({
index: pokemonIndex,
index: evolution.index,
pokemon: {
...evolvingPokemon,
id: metadata.evolution.pokemon,
id: evolution.evolveToId,
},
})
);
dispatch(hideEvolution());
});
if (!show) return null;

View file

@ -621,7 +621,23 @@ const PokemonEncounter = () => {
const isTrainer = !!trainer;
const isThrowingEnemyPokeball = stage >= 34 && stage <= 38 && isTrainer;
const handleEvolution = () => {
if (!processingMetadata) return;
if (!processingMetadata.evolution) return;
if (processingPokemon.level < processingMetadata.evolution.level) return;
dispatch(
showEvolution({
index: involvedPokemon[processingInvolvedPokemon],
evolveToId: processingMetadata.evolution.pokemon,
})
);
};
const endEncounter_ = (exitBattle = false) => {
// Handle evolutions
handleEvolution();
// Handling switching to the next processing pokemon
if (processingInvolvedPokemon < involvedPokemon.length - 1) {
const nextIndex = processingInvolvedPokemon + 1;
if (enemy) {
@ -914,11 +930,6 @@ const PokemonEncounter = () => {
}
}
const isEvolving =
processingMetadata &&
processingMetadata.evolution &&
processingPokemon.level >= processingMetadata.evolution.level;
if (stage === 22) {
const move = getLearnedMove(processingPokemon);
const hasFourMoves = active.moves.length === 4;
@ -927,9 +938,6 @@ const PokemonEncounter = () => {
} else if (move && hasFourMoves) {
setStage(30);
} else {
if (isEvolving) {
dispatch(showEvolution(involvedPokemon[processingInvolvedPokemon]));
}
endEncounter_();
}
}
@ -970,9 +978,6 @@ const PokemonEncounter = () => {
})
);
if (isEvolving) {
dispatch(showEvolution(involvedPokemon[processingInvolvedPokemon]));
}
endEncounter_();
}
@ -1463,18 +1468,6 @@ const PokemonEncounter = () => {
const item: MenuItemType = {
label: m.id,
action: () => {
const isEvolving =
processingMetadata &&
processingMetadata.evolution &&
processingPokemon.level >=
processingMetadata.evolution.level;
if (isEvolving) {
dispatch(
showEvolution(
involvedPokemon[processingInvolvedPokemon]
)
);
}
endEncounter_();
dispatch(
updateSpecificPokemon({
@ -1497,32 +1490,11 @@ const PokemonEncounter = () => {
{
label: getLearnedMove(processingPokemon)?.id || "Error",
action: () => {
const isEvolving =
processingMetadata &&
processingMetadata.evolution &&
processingPokemon.level >=
processingMetadata.evolution.level;
if (isEvolving) {
dispatch(
showEvolution(involvedPokemon[processingInvolvedPokemon])
);
}
endEncounter_();
},
},
]}
close={() => {
const isEvolving =
processingMetadata &&
processingMetadata.evolution &&
processingPokemon.level >= processingMetadata.evolution.level;
if (isEvolving) {
dispatch(
showEvolution(involvedPokemon[processingInvolvedPokemon])
);
}
endEncounter_();
}}
close={() => endEncounter_()}
bottom="0"
right="0"
/>

View file

@ -22,6 +22,11 @@ interface ConfimationMenuType {
cancel?: () => void;
}
interface EvolutionType {
index: number;
evolveToId: number;
}
interface UiState {
text: string[] | null;
startMenu: boolean;
@ -40,7 +45,7 @@ interface UiState {
learningMove: LearningMoveType | null;
blackScreen: boolean;
confirmationMenu: ConfimationMenuType | null;
evolution: number | null;
evolution: EvolutionType | null;
}
const initialState: UiState = {
@ -167,7 +172,7 @@ export const uiSlice = createSlice({
hideConfirmationMenu: (state) => {
state.confirmationMenu = null;
},
showEvolution: (state, action: PayloadAction<number>) => {
showEvolution: (state, action: PayloadAction<EvolutionType>) => {
state.evolution = action.payload;
},
hideEvolution: (state) => {