Skip to content

Commit 4af9010

Browse files
committed
Adds on-tick files for Channel-Safely to use instead of OnUpdate
1 parent be270d6 commit 4af9010

File tree

2 files changed

+67
-0
lines changed

2 files changed

+67
-0
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#pragma once
2+
#include "DFHackVersion.h"
3+
4+
namespace DFHack {
5+
class Plugin;
6+
}
7+
8+
struct OnTick {
9+
bool cancel_queued = false;
10+
bool dig_queued = false;
11+
bool resurrect_queued = false;
12+
};

plugins/channel-safely/on-tick.cpp

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
#include <inlines.h>
2+
#include <on-tick.h>
3+
#include <plugin.h>
4+
#include <modules/EventManager.h>
5+
6+
extern DFHack::Plugin* plugin_self;
7+
8+
namespace CSP {
9+
extern OnTick tick_it_master;
10+
extern void UnpauseEvent(bool full_scan);
11+
}
12+
13+
void cancel(DFHack::color_ostream&, void*);
14+
void dig(DFHack::color_ostream&, void*);
15+
void resurrect(DFHack::color_ostream&, void*);
16+
void refresh(DFHack::color_ostream&, void*);
17+
18+
EventManager::EventHandler cancelHandler(plugin_self, cancel, 0);
19+
EventManager::EventHandler digHandler(plugin_self, dig, 0);
20+
EventManager::EventHandler resurrectHandler(plugin_self, resurrect, 0);
21+
EventManager::EventHandler refreshHandler(plugin_self, refresh, 0);
22+
23+
void cancel(DFHack::color_ostream&, void*) {
24+
CSP::tick_it_master.cancel_queued = false;
25+
CSP::active_job_manager.handle_cancellation();
26+
}
27+
28+
void resurrect(DFHack::color_ostream &out, void*) {
29+
CSP::tick_it_master.resurrect_queued = false;
30+
CSP::active_job_manager.handle_resurrect(out);
31+
if (CSP::active_job_manager.needs_resurrect_queued()) {
32+
EventManager::registerTick(resurrectHandler, 1);
33+
CSP::tick_it_master.resurrect_queued = true;
34+
}
35+
}
36+
37+
void dig(DFHack::color_ostream &out, void*) {
38+
CSP::tick_it_master.dig_queued = false;
39+
if (!config.insta_dig) {
40+
CSP::dignow_queue.clear();
41+
return;
42+
}
43+
TRACE(monitor).print(" -> evaluate dignow queue\n");
44+
for (auto pos : CSP::dignow_queue) {
45+
dig_now(out, pos);
46+
ChannelManager::Get().erase(pos);
47+
CSP::active_job_manager.cancel(pos);
48+
}
49+
CSP::dignow_queue.clear();
50+
}
51+
52+
void refresh(DFHack::color_ostream&, void*) {
53+
CSP::UnpauseEvent(true);
54+
EventManager::registerTick(refreshHandler, config.refresh_freq);
55+
}

0 commit comments

Comments
 (0)