Implement dynamic click power upgrade cost in App and gameStore. Refactor upgrade logic to calculate cost based on current upgrades, enhancing user experience and game mechanics. Update UI to reflect variable upgrade cost in button display.
This commit is contained in:
parent
4e8209d25d
commit
1d763b7737
12
src/App.tsx
12
src/App.tsx
@ -41,13 +41,15 @@ function App() {
|
|||||||
getAvailableBuildings,
|
getAvailableBuildings,
|
||||||
tick,
|
tick,
|
||||||
clickPower,
|
clickPower,
|
||||||
click
|
click,
|
||||||
|
getClickPowerUpgradeCost
|
||||||
} = useGameStore()
|
} = useGameStore()
|
||||||
|
|
||||||
const [agreedToTerms, setAgreedToTerms] = useState(false)
|
const [agreedToTerms, setAgreedToTerms] = useState(false)
|
||||||
const [hasStarted, setHasStarted] = useState(false)
|
const [hasStarted, setHasStarted] = useState(false)
|
||||||
const { isOpen, onClose } = useDisclosure({ defaultIsOpen: true })
|
const { isOpen, onClose } = useDisclosure({ defaultIsOpen: true })
|
||||||
const availableBuildings = getAvailableBuildings()
|
const availableBuildings = getAvailableBuildings()
|
||||||
|
const clickPowerUpgradeCost = getClickPowerUpgradeCost()
|
||||||
|
|
||||||
// Set up game tick interval
|
// Set up game tick interval
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@ -140,12 +142,12 @@ function App() {
|
|||||||
</Text>
|
</Text>
|
||||||
<Button
|
<Button
|
||||||
onClick={() => useGameStore.getState().buyUpgrade('clickPower')}
|
onClick={() => useGameStore.getState().buyUpgrade('clickPower')}
|
||||||
opacity={points < 20 ? 0.4 : 1}
|
opacity={points < clickPowerUpgradeCost ? 0.4 : 1}
|
||||||
_hover={{ bg: 'gray.500', opacity: points < 20 ? 0.4 : 1 }}
|
_hover={{ bg: 'gray.500', opacity: points < clickPowerUpgradeCost ? 0.4 : 1 }}
|
||||||
bg="gray.600"
|
bg="gray.600"
|
||||||
cursor={points < 20 ? 'not-allowed' : 'pointer'}
|
cursor={points < clickPowerUpgradeCost ? 'not-allowed' : 'pointer'}
|
||||||
>
|
>
|
||||||
Upgrade (20 points)
|
Upgrade ({clickPowerUpgradeCost} points)
|
||||||
</Button>
|
</Button>
|
||||||
</VStack>
|
</VStack>
|
||||||
</Box>
|
</Box>
|
||||||
|
|||||||
@ -55,6 +55,7 @@ interface GameState {
|
|||||||
// Upgrades
|
// Upgrades
|
||||||
autoClickers: number
|
autoClickers: number
|
||||||
clickPower: number
|
clickPower: number
|
||||||
|
clickPowerUpgrades: number
|
||||||
|
|
||||||
// Production rates
|
// Production rates
|
||||||
pointsPerSecond: number
|
pointsPerSecond: number
|
||||||
@ -69,6 +70,7 @@ interface GameState {
|
|||||||
resetGame: () => void
|
resetGame: () => void
|
||||||
tick: () => void
|
tick: () => void
|
||||||
upgradeBuilding: (buildingType: BuildingType) => void
|
upgradeBuilding: (buildingType: BuildingType) => void
|
||||||
|
getClickPowerUpgradeCost: () => number
|
||||||
|
|
||||||
// New getter for available buildings
|
// New getter for available buildings
|
||||||
getAvailableBuildings: () => BuildingInfo[]
|
getAvailableBuildings: () => BuildingInfo[]
|
||||||
@ -210,6 +212,7 @@ const initialState = {
|
|||||||
dataGodsLevel: 1,
|
dataGodsLevel: 1,
|
||||||
autoClickers: 0,
|
autoClickers: 0,
|
||||||
clickPower: 1,
|
clickPower: 1,
|
||||||
|
clickPowerUpgrades: 0,
|
||||||
pointsPerSecond: 0,
|
pointsPerSecond: 0,
|
||||||
playerLevel: 1,
|
playerLevel: 1,
|
||||||
}
|
}
|
||||||
@ -277,6 +280,11 @@ const calculateUpgradeCost = (buildingType: BuildingType, currentLevel: number):
|
|||||||
return Math.floor(baseCost * Math.pow(1.5, currentLevel - 1))
|
return Math.floor(baseCost * Math.pow(1.5, currentLevel - 1))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Helper function to calculate click power upgrade cost
|
||||||
|
const calculateClickPowerUpgradeCost = (upgrades: number): number => {
|
||||||
|
return Math.floor(20 * Math.pow(1.5, upgrades));
|
||||||
|
}
|
||||||
|
|
||||||
type BuildingType = keyof typeof BUILDING_COSTS
|
type BuildingType = keyof typeof BUILDING_COSTS
|
||||||
type UpgradeType = 'autoClickers' | 'clickPower'
|
type UpgradeType = 'autoClickers' | 'clickPower'
|
||||||
|
|
||||||
@ -326,14 +334,24 @@ export const useGameStore = create<GameState>()(
|
|||||||
const state = get()
|
const state = get()
|
||||||
|
|
||||||
// Handle upgrade purchase
|
// Handle upgrade purchase
|
||||||
if (upgradeType === 'clickPower' && state.points >= 20) {
|
if (upgradeType === 'clickPower') {
|
||||||
set((state) => ({
|
const cost = calculateClickPowerUpgradeCost(state.clickPowerUpgrades)
|
||||||
points: state.points - 20,
|
|
||||||
clickPower: state.clickPower + 1
|
if (state.points >= cost) {
|
||||||
}))
|
set((state) => ({
|
||||||
|
points: state.points - cost,
|
||||||
|
clickPower: state.clickPower + 1,
|
||||||
|
clickPowerUpgrades: state.clickPowerUpgrades + 1
|
||||||
|
}))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
getClickPowerUpgradeCost: () => {
|
||||||
|
const { clickPowerUpgrades } = get()
|
||||||
|
return calculateClickPowerUpgradeCost(clickPowerUpgrades)
|
||||||
|
},
|
||||||
|
|
||||||
upgradeBuilding: (buildingType: BuildingType) => {
|
upgradeBuilding: (buildingType: BuildingType) => {
|
||||||
const state = get()
|
const state = get()
|
||||||
const currentLevel = state[`${buildingType}Level` as keyof GameState] as number
|
const currentLevel = state[`${buildingType}Level` as keyof GameState] as number
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user