Add player acceptance state to game store and update interaction logic. Implemented playerAccepted flag to control game actions based on acceptance of terms. Enhanced App component to set player acceptance on terms agreement and adjusted global click handlers to check for player acceptance before triggering actions.
This commit is contained in:
parent
f000fecba2
commit
d2e4ee550b
@ -36,6 +36,7 @@ function App() {
|
|||||||
getAvailableBuildings,
|
getAvailableBuildings,
|
||||||
tick,
|
tick,
|
||||||
click,
|
click,
|
||||||
|
setPlayerAccepted,
|
||||||
} = useGameStore()
|
} = useGameStore()
|
||||||
|
|
||||||
const [agreedToTerms, setAgreedToTerms] = useState(false)
|
const [agreedToTerms, setAgreedToTerms] = useState(false)
|
||||||
@ -72,8 +73,9 @@ function App() {
|
|||||||
if (agreedToTerms) {
|
if (agreedToTerms) {
|
||||||
// Initialize audio on first user interaction
|
// Initialize audio on first user interaction
|
||||||
initAudio();
|
initAudio();
|
||||||
setHasStarted(true)
|
setHasStarted(true);
|
||||||
onClose()
|
setPlayerAccepted(true); // Set player as accepted in game store
|
||||||
|
onClose();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
10
src/main.tsx
10
src/main.tsx
@ -29,18 +29,20 @@ function AppWithGlobalHandlers() {
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const handleGlobalClick = () => {
|
const handleGlobalClick = () => {
|
||||||
// Only trigger if game has started
|
// Only trigger if game has started or the game is in a fresh state
|
||||||
const gameState = useGameStore.getState();
|
const gameState = useGameStore.getState();
|
||||||
if ((gameStarted || gameState.points > 0) && gameState.playerLevel >= 1) {
|
// Also check if player has accepted employment
|
||||||
|
if ((gameStarted || gameState.points >= 0) && gameState.playerAccepted) {
|
||||||
playClickSound();
|
playClickSound();
|
||||||
gameState.click();
|
gameState.click();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleGlobalKeyPress = () => {
|
const handleGlobalKeyPress = () => {
|
||||||
// Only trigger if game has started
|
// Only trigger if game has started or the game is in a fresh state
|
||||||
const gameState = useGameStore.getState();
|
const gameState = useGameStore.getState();
|
||||||
if ((gameStarted || gameState.points > 0) && gameState.playerLevel >= 1) {
|
// Also check if player has accepted employment
|
||||||
|
if ((gameStarted || gameState.points >= 0) && gameState.playerAccepted) {
|
||||||
playClickSound();
|
playClickSound();
|
||||||
gameState.click();
|
gameState.click();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -63,6 +63,9 @@ interface GameState {
|
|||||||
// Player level
|
// Player level
|
||||||
playerLevel: number
|
playerLevel: number
|
||||||
|
|
||||||
|
// Player state
|
||||||
|
playerAccepted: boolean
|
||||||
|
|
||||||
// Actions
|
// Actions
|
||||||
click: () => void
|
click: () => void
|
||||||
buyBuilding: (buildingType: BuildingType) => void
|
buyBuilding: (buildingType: BuildingType) => void
|
||||||
@ -73,6 +76,7 @@ interface GameState {
|
|||||||
getClickPowerUpgradeCost: () => number
|
getClickPowerUpgradeCost: () => number
|
||||||
canUpgradeBuilding: (buildingType: BuildingType) => boolean
|
canUpgradeBuilding: (buildingType: BuildingType) => boolean
|
||||||
getBuildingUpgradeCost: (buildingType: BuildingType) => number
|
getBuildingUpgradeCost: (buildingType: BuildingType) => number
|
||||||
|
setPlayerAccepted: (accepted: boolean) => void
|
||||||
|
|
||||||
// New getter for available buildings
|
// New getter for available buildings
|
||||||
getAvailableBuildings: () => BuildingInfo[]
|
getAvailableBuildings: () => BuildingInfo[]
|
||||||
@ -220,6 +224,7 @@ const initialState = {
|
|||||||
clickPowerUpgrades: 0,
|
clickPowerUpgrades: 0,
|
||||||
pointsPerSecond: 0,
|
pointsPerSecond: 0,
|
||||||
playerLevel: 1,
|
playerLevel: 1,
|
||||||
|
playerAccepted: false,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Production rates per building
|
// Production rates per building
|
||||||
@ -363,7 +368,11 @@ export const useGameStore = create<GameState>()(
|
|||||||
...initialState,
|
...initialState,
|
||||||
|
|
||||||
click: () => {
|
click: () => {
|
||||||
const { clickPower, autoClickers } = get()
|
const { clickPower, autoClickers, playerAccepted } = get()
|
||||||
|
|
||||||
|
// Only allow clicks if player has accepted the employment agreement
|
||||||
|
if (!playerAccepted) return
|
||||||
|
|
||||||
const pointsPerClick = clickPower * (1 + autoClickers * 0.1)
|
const pointsPerClick = clickPower * (1 + autoClickers * 0.1)
|
||||||
set((state) => ({
|
set((state) => ({
|
||||||
points: state.points + pointsPerClick,
|
points: state.points + pointsPerClick,
|
||||||
@ -495,11 +504,15 @@ export const useGameStore = create<GameState>()(
|
|||||||
|
|
||||||
resetGame: () => {
|
resetGame: () => {
|
||||||
set(initialState)
|
set(initialState)
|
||||||
|
window.location.reload()
|
||||||
},
|
},
|
||||||
|
|
||||||
tick: () => {
|
tick: () => {
|
||||||
const state = get()
|
const state = get()
|
||||||
|
|
||||||
|
// Don't add production if player hasn't accepted employment
|
||||||
|
if (!state.playerAccepted) return
|
||||||
|
|
||||||
// Add production from buildings
|
// Add production from buildings
|
||||||
if (state.pointsPerSecond > 0) {
|
if (state.pointsPerSecond > 0) {
|
||||||
set((state) => ({
|
set((state) => ({
|
||||||
@ -525,6 +538,10 @@ export const useGameStore = create<GameState>()(
|
|||||||
const { playerLevel } = get()
|
const { playerLevel } = get()
|
||||||
return getAvailableBuildings(playerLevel)
|
return getAvailableBuildings(playerLevel)
|
||||||
},
|
},
|
||||||
|
|
||||||
|
setPlayerAccepted: (accepted: boolean) => {
|
||||||
|
set({ playerAccepted: accepted })
|
||||||
|
},
|
||||||
}),
|
}),
|
||||||
{
|
{
|
||||||
name: 'clicker-game',
|
name: 'clicker-game',
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user