Skip to content

Commit 4481c7e

Browse files
committed
Add log level and upgrade level with XP and multipliers
1 parent 76a145e commit 4481c7e

File tree

1 file changed

+164
-6
lines changed

1 file changed

+164
-6
lines changed

src/App.js

Lines changed: 164 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,19 @@ function App() {
2626
const [clickMultiplierBonus, setClickMultiplierBonus] = useState(0); //set initial click multiplier bonus to 0
2727
const [clickerBonus, setClickerBonus] = useState(0); //set initial clicker bonus to 0
2828
const [clickers, setClickers] = useState(1); //set initial clickers to 1
29-
const [clicksMultiplier, setClicksMultiplier] = useState(1); //set clicks multiplier to 1
29+
const [clicksMultiplier, setClicksMultiplier] = useState(1); //set initial clicks multiplier to 1
3030
const [seconds, setSeconds] = useState(0); //set initial seconds played to 0
31-
const [secondsMultiplier, setSecondsMultiplier] = useState(1); //set clicks multiplier to 1
32-
const [totalUpgrades, setTotalUpgrades] = useState(0); //set total upgrades to 0
33-
const [totalUpgradesMultiplier, setTotalUpgradesMultiplier] = useState(0); //set total upgrades multiplier to 0
31+
const [secondsMultiplier, setSecondsMultiplier] = useState(1); //set initial clicks multiplier to 1
32+
const [totalUpgrades, setTotalUpgrades] = useState(0); //set initial total upgrades to 0
33+
const [totalUpgradesMultiplier, setTotalUpgradesMultiplier] = useState(0); //set initial total upgrades multiplier to 0
34+
const [upgradeLevel, setUpgradeLevel] = useState(1); //set initial upgrade level to 1
35+
const [upgradeLevelXp, setUpgradeLevelXp] = useState(0); //set initial upgrade level XP to 1
36+
const [upgradeLevelXpRequired, setUpgradeLevelXpRequired] = useState(1); //set initial upgrade level XP required to 1
37+
const [upgradeLevelMultiplier, setUpgradeLevelMultiplier] = useState(0); //set initial upgrade level multiplier to 0
38+
const [logLevel, setLogLevel] = useState(1); //set initial log level to 1
39+
const [logLevelXp, setLogLevelXp] = useState(0); //set initial log level XP to 0
40+
const [logLevelXpRequired, setLogLevelXpRequired] = useState(1); //set initial log level XP required to 1
41+
const [logLevelMultiplier, setLogLevelMultiplier] = useState(0); //set initial log level multiplier to 0
3442
const updateClickers = useCallback(() => {
3543
//update click multiplier for clickers
3644
setClickMultiplier(
@@ -69,6 +77,8 @@ function App() {
6977
(1 + (timeMultiplierBonus * seconds) / 10000) *
7078
(1 + (clickMultiplierBonus * clicks) / 10000) *
7179
(1 + (totalUpgradesMultiplier * totalUpgrades) / 1000) *
80+
(1 + (upgradeLevelMultiplier * upgradeLevel) / 100) *
81+
(1 + (logLevelMultiplier * logLevel) / 100) *
7282
clicker.level,
7383
0,
7484
),
@@ -81,10 +91,14 @@ function App() {
8191
autoClickersMultiplier,
8292
clickMultiplierBonus,
8393
clicks,
94+
logLevel,
95+
logLevelMultiplier,
8496
seconds,
8597
timeMultiplierBonus,
8698
totalUpgrades,
8799
totalUpgradesMultiplier,
100+
upgradeLevel,
101+
upgradeLevelMultiplier,
88102
]);
89103
useEffect(() => {
90104
const interval = setInterval(() => {
@@ -103,6 +117,11 @@ function App() {
103117
//check if user has enough points to upgrade
104118
if (pointsRequired !== 0 && points >= pointsRequired) {
105119
//make sure points required is not 0 and user has enough points to upgrade
120+
setLogLevelXp(
121+
(prevLogLevelXp) =>
122+
prevLogLevelXp + Math.log(Math.max(pointsRequired + 1, 1)),
123+
); //increase log level XP
124+
checkLogLevel(); //check if log level has enough XP to level up
106125
return true;
107126
} else {
108127
//not enough points required to upgrade
@@ -120,6 +139,8 @@ function App() {
120139
function upgradeClicker() {
121140
//upgrade clicker (points per click)
122141
if (checkPointsForUpgrade(points, 10 * Math.pow(2, clickers - 1))) {
142+
setUpgradeLevelXp((prevUpgradeLevelXp) => prevUpgradeLevelXp + clickers); //increase upgrade level XP by clickers
143+
checkUpgradeLevel(); //check if upgrade level has enough XP to level up
123144
setPoints((prevPoints) => prevPoints - 10 * Math.pow(2, clickers - 1)); //spend points
124145
setClickers((prevClickers) => prevClickers + 1); //increase clickers by 1
125146
updateClickers(); //update clickers value
@@ -131,6 +152,10 @@ function App() {
131152
if (
132153
checkPointsForUpgrade(points, 100 * Math.pow(2, clickersMultiplier - 1))
133154
) {
155+
setUpgradeLevelXp(
156+
(prevUpgradeLevelXp) => prevUpgradeLevelXp + clickersMultiplier,
157+
); //increase upgrade level XP by clickers multiplier
158+
checkUpgradeLevel(); //check if upgrade level has enough XP to level up
134159
setPoints(
135160
(prevPoints) => prevPoints - 100 * Math.pow(2, clickersMultiplier - 1),
136161
); //spend points
@@ -151,6 +176,11 @@ function App() {
151176
Math.pow(10, level - 1),
152177
)
153178
) {
179+
setUpgradeLevelXp(
180+
(prevUpgradeLevelXp) =>
181+
prevUpgradeLevelXp + autoClickers[level - 1].value * level,
182+
); //increase upgrade level XP by autoclickers times level
183+
checkUpgradeLevel(); //check if upgrade level has enough XP to level up
154184
setPoints(
155185
(prevPoints) =>
156186
prevPoints -
@@ -181,6 +211,11 @@ function App() {
181211
Math.pow(10, level - 1),
182212
)
183213
) {
214+
setUpgradeLevelXp(
215+
(prevUpgradeLevelXp) =>
216+
prevUpgradeLevelXp + autoClickersMultiplier[level - 1].value * level,
217+
); //increase upgrade level XP by autoclickers multiplier times level
218+
checkUpgradeLevel(); //check if upgrade level has enough XP to level up
184219
setPoints(
185220
(prevPoints) =>
186221
prevPoints -
@@ -211,6 +246,11 @@ function App() {
211246
Math.pow(10, level - 1),
212247
)
213248
) {
249+
setUpgradeLevelXp(
250+
(prevUpgradeLevelXp) =>
251+
prevUpgradeLevelXp + autoClickersLevelBonus[level - 1].value * level,
252+
); //increase upgrade level XP by autoclickers level bonus times level
253+
checkUpgradeLevel(); //check if upgrade level has enough XP to level up
214254
setPoints(
215255
(prevPoints) =>
216256
prevPoints -
@@ -241,6 +281,11 @@ function App() {
241281
Math.pow(10, level - 1),
242282
)
243283
) {
284+
setUpgradeLevelXp(
285+
(prevUpgradeLevelXp) =>
286+
prevUpgradeLevelXp + autoClickersBonus[level - 1].value * level,
287+
); //increase upgrade level XP by autoclickers bonus times level
288+
checkUpgradeLevel(); //check if upgrade level has enough XP to level up
244289
setPoints(
245290
(prevPoints) =>
246291
prevPoints -
@@ -271,6 +316,12 @@ function App() {
271316
Math.pow(10, level - 1),
272317
)
273318
) {
319+
setUpgradeLevelXp(
320+
(prevUpgradeLevelXp) =>
321+
prevUpgradeLevelXp +
322+
autoClickersBonusMultiplier[level - 1].value * level,
323+
); //increase upgrade level XP by autoclickers bonus multiplier times level
324+
checkUpgradeLevel(); //check if upgrade level has enough XP to level up
274325
setPoints(
275326
(prevPoints) =>
276327
prevPoints -
@@ -296,6 +347,11 @@ function App() {
296347
if (
297348
checkPointsForUpgrade(points, 2.5e3 * Math.pow(10, timeMultiplierBonus))
298349
) {
350+
setUpgradeLevelXp(
351+
(prevUpgradeLevelXp) =>
352+
prevUpgradeLevelXp + (timeMultiplierBonus + 1) * 3,
353+
); //increase upgrade level XP by time multiplier bonus
354+
checkUpgradeLevel(); //check if upgrade level has enough XP to level up
299355
setPoints(
300356
(prevPoints) => prevPoints - 2.5e3 * Math.pow(10, timeMultiplierBonus),
301357
);
@@ -311,6 +367,11 @@ function App() {
311367
if (
312368
checkPointsForUpgrade(points, 5e3 * Math.pow(10, clickMultiplierBonus))
313369
) {
370+
setUpgradeLevelXp(
371+
(prevUpgradeLevelXp) =>
372+
prevUpgradeLevelXp + (clickMultiplierBonus + 1) * 5,
373+
); //increase upgrade level XP by click multiplier bonus
374+
checkUpgradeLevel(); //check if upgrade level has enough XP to level up
314375
setPoints(
315376
(prevPoints) => prevPoints - 5e3 * Math.pow(10, clickMultiplierBonus),
316377
);
@@ -324,6 +385,10 @@ function App() {
324385
function upgradeClickerBonus() {
325386
//upgrade clicker bonus based on points per second
326387
if (checkPointsForUpgrade(points, 1e3 * Math.pow(10, clickerBonus))) {
388+
setUpgradeLevelXp(
389+
(prevUpgradeLevelXp) => prevUpgradeLevelXp + (clickerBonus + 1) * 3,
390+
); //increase upgrade level XP by clicker bonus
391+
checkUpgradeLevel(); //check if upgrade level has enough XP to level up
327392
setPoints((prevPoints) => prevPoints - 1e3 * Math.pow(10, clickerBonus));
328393
setClickerBonus((prevClickerBonus) => prevClickerBonus + 1); //increase clicker bonus by 1
329394
updateAutoClickers(); //update auto clickers value
@@ -333,7 +398,6 @@ function App() {
333398
function upgradeMaxLevel() {
334399
//upgrade max level
335400
if (checkPointsForUpgrade(points, 100 * Math.pow(10, maxLevel - 1))) {
336-
setPoints((prevPoints) => prevPoints - 100 * Math.pow(10, maxLevel - 1));
337401
setAutoClickers((prevAutoClickers) => [
338402
...prevAutoClickers,
339403
{ value: 0, level: maxLevel + 1 },
@@ -355,14 +419,17 @@ function App() {
355419
{ value: 0, level: maxLevel + 1 },
356420
]);
357421
setMaxLevel((prevMaxLevel) => prevMaxLevel + 1); //increase max level by 1
358-
setTotalUpgrades((prevTotalUpgrades) => prevTotalUpgrades + 1); //increase total upgrades by 1
359422
}
360423
}
361424
function upgradeSecondsMultiplier() {
362425
//upgrade seconds multiplier
363426
if (
364427
checkPointsForUpgrade(points, 1e5 * Math.pow(10, secondsMultiplier - 1))
365428
) {
429+
setUpgradeLevelXp(
430+
(prevUpgradeLevelXp) => prevUpgradeLevelXp + secondsMultiplier * 5,
431+
); //increase upgrade level XP by seconds multiplier
432+
checkUpgradeLevel(); //check if upgrade level has enough XP to level up
366433
setPoints(
367434
(prevPoints) => prevPoints - 1e5 * Math.pow(10, secondsMultiplier - 1),
368435
);
@@ -377,6 +444,10 @@ function App() {
377444
if (
378445
checkPointsForUpgrade(points, 1e6 * Math.pow(10, clicksMultiplier - 1))
379446
) {
447+
setUpgradeLevelXp(
448+
(prevUpgradeLevelXp) => prevUpgradeLevelXp + clicksMultiplier * 6,
449+
); //increase upgrade level XP by clicks multiplier
450+
checkUpgradeLevel(); //check if upgrade level has enough XP to level up
380451
setPoints(
381452
(prevPoints) => prevPoints - 1e6 * Math.pow(10, clicksMultiplier - 1),
382453
);
@@ -389,6 +460,11 @@ function App() {
389460
if (
390461
checkPointsForUpgrade(points, 5e4 * Math.pow(10, totalUpgradesMultiplier))
391462
) {
463+
setUpgradeLevelXp(
464+
(prevUpgradeLevelXp) =>
465+
prevUpgradeLevelXp + (totalUpgradesMultiplier + 1) * 5,
466+
); //increase upgrade level XP by total upgrades multiplier
467+
checkUpgradeLevel(); //check if upgrade level has enough XP to level up
392468
setPoints(
393469
(prevPoints) =>
394470
prevPoints - 5e4 * Math.pow(10, totalUpgradesMultiplier),
@@ -399,6 +475,64 @@ function App() {
399475
setTotalUpgrades((prevTotalUpgrades) => prevTotalUpgrades + 1); //increase total upgrades by 1
400476
}
401477
}
478+
function upgradeLevelUpgradeMultiplier() {
479+
if (checkPointsForUpgrade(2.5e4 * Math.pow(10, upgradeLevelMultiplier))) {
480+
setUpgradeLevelXp(
481+
(prevUpgradeLevelXp) =>
482+
prevUpgradeLevelXp + (upgradeLevelMultiplier + 1) * 4,
483+
); //increase upgrade level XP by upgrade level multiplier
484+
checkUpgradeLevel(); //check if upgrade level has enough XP to level up
485+
setPoints(
486+
(prevPoints) =>
487+
prevPoints - 2.5e4 * Math.pow(10, upgradeLevelMultiplier),
488+
);
489+
setTotalUpgrades((prevTotalUpgrades) => prevTotalUpgrades + 1); //increase total upgrades by 1
490+
setUpgradeLevelMultiplier(
491+
(prevUpgradeLevelMultiplier) => prevUpgradeLevelMultiplier + 1,
492+
); //increase upgrade level multiplier by 1
493+
}
494+
}
495+
function upgradeLogLevelMultiplier() {
496+
if (checkPointsForUpgrade(5e5 * Math.pow(10, logLevelMultiplier))) {
497+
setUpgradeLevelXp(
498+
(prevUpgradeLevelXp) =>
499+
prevUpgradeLevelXp + (logLevelMultiplier + 1) * 5,
500+
); //increase upgrade level XP by log level multiplier
501+
checkUpgradeLevel(); //check if upgrade level has enough XP to level up
502+
setPoints(
503+
(prevPoints) => prevPoints - 2.5e4 * Math.pow(10, logLevelMultiplier),
504+
);
505+
setTotalUpgrades((prevTotalUpgrades) => prevTotalUpgrades + 1); //increase total upgrades by 1
506+
setLogLevelMultiplier(
507+
(prevLogLevelMultiplier) => prevLogLevelMultiplier + 1,
508+
); //increase log level multiplier by 1
509+
}
510+
}
511+
function checkUpgradeLevel() {
512+
//check if upgrade level XP is higher than or equal to XP required
513+
if (upgradeLevelXp >= upgradeLevelXpRequired) {
514+
setUpgradeLevelXp(
515+
(prevUpgradeLevelXp) => prevUpgradeLevelXp - upgradeLevelXpRequired,
516+
); //decrease upgrade level XP by XP required
517+
checkUpgradeLevel(); //check if upgrade level has enough XP to level up
518+
setUpgradeLevelXpRequired(
519+
(prevUpgradeLevelXpRequired) =>
520+
prevUpgradeLevelXpRequired + upgradeLevel + 1,
521+
); //increase XP required to level up by upgrade level
522+
setUpgradeLevel((prevUpgradeLevel) => prevUpgradeLevel + 1); //increase upgrade level by 1
523+
}
524+
}
525+
function checkLogLevel() {
526+
//check if log level XP is higher than or equal to XP required
527+
if (logLevelXp >= logLevelXpRequired) {
528+
setLogLevelXp((prevLogLevelXp) => prevLogLevelXp - logLevelXpRequired); //decrease log level XP by XP required
529+
setLogLevelXpRequired(
530+
(prevLogLevelXpRequired) => prevLogLevelXpRequired + logLevel + 1,
531+
); //increase XP required to level up by log level
532+
setLogLevel((prevLogLevel) => prevLogLevel + 1); //increase log level by 1
533+
}
534+
}
535+
402536
return (
403537
//dynamic app HTML output
404538
<div className="App">
@@ -504,6 +638,30 @@ function App() {
504638
<CostDisplay cost={5e4 * Math.pow(10, totalUpgradesMultiplier)} />
505639
</td>
506640
</tr>
641+
<tr>
642+
<td>
643+
Level Upgrade Multiplier:{' '}
644+
<NumericDisplay value={upgradeLevelMultiplier} shortForm={false} />
645+
<br />
646+
{/*upgrade level upgrades multiplier*/}
647+
<button onClick={() => upgradeLevelUpgradeMultiplier()}>
648+
Upgrade Level Upgrade Multiplier
649+
</button>
650+
<CostDisplay cost={2.5e4 * Math.pow(10, upgradeLevelMultiplier)} />
651+
</td>
652+
</tr>
653+
<tr>
654+
<td>
655+
Log Level Multiplier:{' '}
656+
<NumericDisplay value={logLevelMultiplier} shortForm={false} />
657+
<br />
658+
{/*upgrade log level multiplier*/}
659+
<button onClick={() => upgradeLogLevelMultiplier()}>
660+
Upgrade Log Level Multiplier
661+
</button>
662+
<CostDisplay cost={5e5 * Math.pow(10, logLevelMultiplier)} />
663+
</td>
664+
</tr>
507665
<table>
508666
<thead>
509667
<tr>

0 commit comments

Comments
 (0)