RedCore
Loading...
Searching...
No Matches
TaskPrepareEvent.h
Go to the documentation of this file.
1#pragma once
2
3#include <red/event_sys/EventBase.h>
4#include <red/event_sys/EventDelegator.h>
5#include <framework/seadTaskBase.h>
6
7namespace red {
8
9 /**
10 * @brief Event fired when a task is being prepared.
11 * @warning This event may be fired on other threads.
12 */
14 public:
15 enum class Stage {
18 };
19
20 template <Stage S>
21 class Listener {
22 public:
23 Listener(ListenerFunc f, s32 priority = 0)
25 {
26 TaskPrepareEvent::subscribe<S>(mListener);
27 }
28
29 private:
30 EventDelegator<TaskPrepareEvent>::Listener mListener;
31 };
32
33 public:
34 [[nodiscard]]
35 sead::TaskBase* getTask() const { return mTask; }
36
37 private:
38 explicit TaskPrepareEvent(sead::TaskBase* task)
39 : mTask(task)
40 { }
41
42 template <Stage S>
43 [[nodiscard]]
44 static Delegator& getDelegator();
45
46 private:
47 template <Stage S>
48 static void subscribe(EventDelegator<TaskPrepareEvent>::Listener& listener) {
49 getDelegator<S>().connect(listener);
50 }
51
52 // Off-thread: 0x02A01AA0, On-thread: 0x02A01194
53 template <Stage S>
54 static void emit(sead::TaskBase* task) {
55 TaskPrepareEvent event(task);
56 getDelegator<S>().fire(event);
57 }
58
59 public: //! TODO: Make private
60 static void hook(sead::TaskBase* task);
61
62 private:
63 sead::TaskBase* mTask;
64 };
65
66}
Definition TaskPrepareEvent.h:21
Listener(ListenerFunc f, s32 priority=0)
Definition TaskPrepareEvent.h:23
Event fired when a task is being prepared.
Definition TaskPrepareEvent.h:13
static void hook(sead::TaskBase *task)
TODO: Make private.
sead::TaskBase * getTask() const
Definition TaskPrepareEvent.h:35
Stage
Definition TaskPrepareEvent.h:15
@ After
Definition TaskPrepareEvent.h:17
@ Before
Definition TaskPrepareEvent.h:16
Definition ActorDonutBlock.h:5