summaryrefslogtreecommitdiff
path: root/include/JSystem/JMessage/control.h
blob: f2c95d233bc87e3703014e3e6cb87c1996bcb7f7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#ifndef JMESSAGE_CONTROL_H
#define JMESSAGE_CONTROL_H

#include "JSystem/JMessage/processor.h"

namespace JMessage {

/**
 * @ingroup jsystem-jmessage
 * 
 */
struct TControl {
    /* 802A7548 */ TControl();
    /* 802A758C */ virtual ~TControl();

    /* 802A75D4 */ void reset();
    /* 802A7634 */ int update();
    /* 802A76BC */ void render();
    /* 802A77E8 */ int setMessageCode(u16, u16);
    /* 802A78F4 */ int setMessageID(u32, u32, bool*);
    /* 802A7A20 */ bool setMessageCode_inSequence_(JMessage::TProcessor const*, u16, u16);

    bool isReady_update_() const { return pMessageText_begin_ != 0 && pSequenceProcessor_ != NULL; }
    bool isReady_render_() const { return field_0x20 != 0 && pRenderingProcessor_ != NULL; }

    TProcessor* getProcessor() const {
        return pSequenceProcessor_ != NULL ? (TProcessor*)pSequenceProcessor_ :
                                             (TProcessor*)pRenderingProcessor_;
    }

    int setMessageCode(u32 code) {
        return setMessageCode(code >> 16, code);
    }

    int setMessageCode_inReset_(TProcessor* pProcessor, u16 param_1, u16 param_2) {
        if (!setMessageCode_inSequence_(pProcessor, param_1, param_2)) {
            return 0;
        }

        if (isReady_update_()) {
            pSequenceProcessor_->setBegin_messageEntryText(pResourceCache_, pEntry_,
                                                           pMessageText_begin_);
        }

        return 1;
    }

    const char* getMessageText_begin() const { return pMessageText_begin_; }
    void* getMessageEntry() const { return pEntry_; }
    void setSequenceProcessor(TSequenceProcessor* processor) { pSequenceProcessor_ = processor; }
    void setRenderingProcessor(TRenderingProcessor* processor) { pRenderingProcessor_ = processor; }
    void resetResourceCache() { 
        if (pSequenceProcessor_ != NULL) {
            pSequenceProcessor_->resetResourceCache();
        }

        if (pRenderingProcessor_ != NULL) {
            pRenderingProcessor_->resetResourceCache();
        }

        pResourceCache_ = NULL;
    }

    void render_synchronize() {
        if (isReady_render_()) {
            field_0x20 = pszText_update_current_;
            oStack_renderingProcessor_ = pRenderingProcessor_->oStack_;
        }
    }

    /* 0x04 */ TSequenceProcessor* pSequenceProcessor_;
    /* 0x08 */ TRenderingProcessor* pRenderingProcessor_;
    /* 0x0C */ u16 messageCode_;
    /* 0x0E */ u16 field_0xe;
    /* 0x10 */ const TResource* pResourceCache_;
    /* 0x14 */ void* pEntry_;
    /* 0x18 */ const char* pMessageText_begin_;
    /* 0x1C */ const char* pszText_update_current_;
    /* 0x20 */ const char* field_0x20;
    /* 0x24 */ TProcessor::TStack_ oStack_renderingProcessor_;
};
};  // namespace JMessage

/**
 * @ingroup jsystem-jmessage
 * 
 */
struct jmessage_tControl : public JMessage::TControl {
    /* 802299EC */ jmessage_tControl();

    /* 80039B0C */ virtual ~jmessage_tControl();
};

#endif /* JMESSAGE_CONTROL_H */