From 10ef3d2294fd6e0b7be34ad9dd104de6d4d7e3a6 Mon Sep 17 00:00:00 2001 From: EpicYoshiMaster Date: Tue, 14 Feb 2023 20:40:46 -0600 Subject: [PATCH] Implement level split type --- README.md | 14 ++++++++++++++ timer/eventManager.js | 15 +++++++++++++++ timer/hooks.js | 10 ++++++++++ 3 files changed, 39 insertions(+) diff --git a/README.md b/README.md index 14aa583..f00ff83 100644 --- a/README.md +++ b/README.md @@ -145,6 +145,20 @@ The `"start"` split may include a condition that causes the run to start. } ``` +### Level + +`"level"` checks for the start of a level up animation for a particular level. Levels can be bounded with `"above"`, `"below"`, and/or `"equal"`. + +#### Example +```json +{ + "splits": [{ + "type": "level", + "equal": 15 + }] +} +``` + ### Preset `"preset"` checks if a specific preset was loaded (see [CCPresetRevival](https://github.com/CCDirectLink/CCPresetRevival)). `"name"` will be checked against the `"title"` property of the loaded preset. diff --git a/timer/eventManager.js b/timer/eventManager.js index 264f6b9..073c4cb 100644 --- a/timer/eventManager.js +++ b/timer/eventManager.js @@ -22,6 +22,7 @@ export class EventManager { Hook.startPresetButton((preset, slotIndex) => this._onStartPresetButton(preset, slotIndex)); Hook.update(() => this._update()); Hook.enemyHP((name, hp) => { this._check({ type: 'damage', name, hp }) }); + Hook.levelUp((level) => { this._check({ type: 'level', level })}); Hook.teleport((mapName) => { this._check({ type: 'teleport', mapName }) }); Hook.varChanged(() => { this._check({ type: 'vars' }) }); window.addEventListener('unload', () => this.onunload()); @@ -182,6 +183,20 @@ export class EventManager { } break; } + case 'level': { + if(action && action.type === 'level') { + if(typeof event.below === 'number' && action.level > event.below) { + break; + } + if(typeof event.above === 'number' && action.level < event.above) { + break; + } + if(typeof event.equal === 'number' && action.level !== event.equal) { + break; + } + return [true, event.once]; + } + } case 'preset': { if(action && action.type === 'preset' && action.presetName === event.name) { return [true, event.once]; diff --git a/timer/hooks.js b/timer/hooks.js index 48e72a2..171c0ae 100644 --- a/timer/hooks.js +++ b/timer/hooks.js @@ -85,4 +85,14 @@ export class Hook { } }); } + + static levelUp(callback) { + ig.GUI.LevelUpHud.inject({ + init: function(...args) { + const result = this.parent(...args); + callback(sc.model.player.level); + return result; + } + }); + } } \ No newline at end of file