Skip to content

Commit a54e3d7

Browse files
Harsh-H-Shahclaude
andcommitted
fix: commit refilled energy back to player state
Greptile caught this on review: the refill-tick loop computed incremented energy/lastLogin into local variables but never wrote them back to playerState, so the displayed energy counter stayed stale between real account-change notifications. The previous BN-based version got away with mutating playerState.energy in place and relying on the same effects setTimePassed/setEnergyNextIn calls to force a re-render - that trick got dropped when the local let variables were introduced. Now commits the computed values via setPlayerState explicitly, only when something changed. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
1 parent 3b78467 commit a54e3d7

1 file changed

Lines changed: 6 additions & 0 deletions

File tree

tokens/token-2022/nft-meta-data-pointer/app/contexts/GameStateProvider.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,15 +108,21 @@ export const GameStateProvider = ({ children }: { children: React.ReactNode }) =
108108
let timePassed = (currentTime - lastLoginTime) / 1000;
109109

110110
let energy = playerState.energy;
111+
let lastLogin = playerState.lastLogin;
111112
while (timePassed >= Number(TIME_TO_REFILL_ENERGY) && energy < MAX_ENERGY) {
112113
energy += 1n;
114+
lastLogin += TIME_TO_REFILL_ENERGY;
113115
timePassed -= Number(TIME_TO_REFILL_ENERGY);
114116
}
115117

116118
setTimePassed(timePassed);
117119

118120
const nextEnergyIn = Math.floor(Number(TIME_TO_REFILL_ENERGY) - timePassed);
119121
setEnergyNextIn(nextEnergyIn > 0 ? nextEnergyIn : 0);
122+
123+
if (energy !== playerState.energy || lastLogin !== playerState.lastLogin) {
124+
setPlayerState({ ...playerState, energy, lastLogin });
125+
}
120126
}, 1000);
121127

122128
return () => clearInterval(interval);

0 commit comments

Comments
 (0)