Skip to content

Commit 6c3462e

Browse files
committed
refactor: move main loop task into separate function
1 parent 854e597 commit 6c3462e

File tree

2 files changed

+46
-35
lines changed

2 files changed

+46
-35
lines changed
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import { loopingEvent } from '@engine/plugins';
2+
import { WorldItem } from '@engine/world';
3+
import { Player } from '@engine/world/actor';
4+
import { animationIds, soundIds } from '@engine/world/config';
5+
import { canLight } from './chance';
6+
import { lightFire } from './light-fire';
7+
import { Burnable } from './types';
8+
9+
export function runFiremakingTask(player: Player, worldItemLog: WorldItem, skillInfo: Burnable) {
10+
let canLightFire = false;
11+
let elapsedTicks = 0;
12+
const loop = loopingEvent({ player });
13+
loop.event.subscribe(() => {
14+
if (worldItemLog.removed) {
15+
loop.cancel();
16+
return;
17+
}
18+
19+
if (canLightFire) {
20+
loop.cancel();
21+
player.metadata.busy = true;
22+
setTimeout(() => lightFire(player, player.position, worldItemLog, skillInfo.experienceGained), 1200);
23+
return;
24+
}
25+
26+
// @TODO check for existing location objects again (in-case one spawned here during this loop)
27+
// @TODO check for tinderbox in-case it was removed
28+
29+
if (elapsedTicks === 0 || elapsedTicks % 12 === 0) {
30+
player.playAnimation(animationIds.lightingFire);
31+
}
32+
33+
canLightFire = elapsedTicks > 10 && canLight(skillInfo.requiredLevel, player.skills.firemaking.level);
34+
35+
if (!canLightFire && (elapsedTicks === 0 || elapsedTicks % 4 === 0)) {
36+
player.playSound(soundIds.lightingFire, 10, 0);
37+
} else if (canLightFire) {
38+
player.playSound(soundIds.fireLit, 7);
39+
}
40+
41+
elapsedTicks++;
42+
});
43+
}

src/plugins/skills/firemaking/index.ts

Lines changed: 3 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { loopingEvent } from '@engine/plugins';
44
import { FIREMAKING_LOGS } from './data';
55
import { canChain, canLight } from './chance';
66
import { lightFire } from './light-fire';
7+
import { runFiremakingTask } from './firemaking-task';
78

89
const action: itemOnItemActionHandler = (details) => {
910
const { player, usedItem, usedWithItem, usedSlot, usedWithSlot } = details;
@@ -15,7 +16,6 @@ const action: itemOnItemActionHandler = (details) => {
1516
const log = usedItem.itemId !== itemIds.tinderbox ? usedItem : usedWithItem;
1617
const removeFromSlot = usedItem.itemId !== itemIds.tinderbox ? usedSlot : usedWithSlot;
1718
const skillInfo = FIREMAKING_LOGS.find(l => l.logItem.gameId === log.itemId);
18-
const position = player.position;
1919

2020
if(!skillInfo) {
2121
player.sendMessage(`Mishandled firemaking log ${log.itemId}.`);
@@ -30,43 +30,11 @@ const action: itemOnItemActionHandler = (details) => {
3030

3131
if(player.metadata.lastFire && Date.now() - player.metadata.lastFire < 1200 &&
3232
canChain(skillInfo.requiredLevel, player.skills.firemaking.level)) {
33-
lightFire(player, position, worldItemLog, skillInfo.experienceGained);
33+
lightFire(player, player.position, worldItemLog, skillInfo.experienceGained);
3434
} else {
3535
player.sendMessage(`You attempt to light the logs.`);
3636

37-
let canLightFire = false;
38-
let elapsedTicks = 0;
39-
const loop = loopingEvent({ player });
40-
loop.event.subscribe(() => {
41-
if(worldItemLog.removed) {
42-
loop.cancel();
43-
return;
44-
}
45-
46-
if(canLightFire) {
47-
loop.cancel();
48-
player.busy = true;
49-
setTimeout(() => lightFire(player, position, worldItemLog, skillInfo.experienceGained), 1200);
50-
return;
51-
}
52-
53-
// @TODO check for existing location objects again (in-case one spawned here during this loop)
54-
// @TODO check for tinderbox in-case it was removed
55-
56-
if(elapsedTicks === 0 || elapsedTicks % 12 === 0) {
57-
player.playAnimation(animationIds.lightingFire);
58-
}
59-
60-
canLightFire = elapsedTicks > 10 && canLight(skillInfo.requiredLevel, player.skills.firemaking.level);
61-
62-
if(!canLightFire && (elapsedTicks === 0 || elapsedTicks % 4 === 0)) {
63-
player.playSound(soundIds.lightingFire, 10, 0);
64-
} else if(canLightFire) {
65-
player.playSound(soundIds.fireLit, 7);
66-
}
67-
68-
elapsedTicks++;
69-
});
37+
runFiremakingTask(player, worldItemLog, skillInfo);
7038
}
7139
};
7240

0 commit comments

Comments
 (0)