summaryrefslogtreecommitdiff
path: root/include/d/flag/itemflag_manager.h
blob: 1059dcd3a8eddce48c285d1c9493efa2ad2abb38 (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

#ifndef D_FLAG_ITEMFLAG_MANAGER_H
#define D_FLAG_ITEMFLAG_MANAGER_H

#include "d/flag/baseflag_manager.h"
#include "toBeSorted/file_manager.h"

class ItemflagManager : public ItemStoryManagerBase {
private:
    FlagSpace mItemFlags;

    static const u32 MASK = 0x4000;

public:
    ItemflagManager();
    virtual ~ItemflagManager() {}

    bool commit();

    /** 0x0C */ virtual void initFlagSpace() override {
        mpFlagSpace = &mItemFlags;
    }
    /** 0x10 */ virtual void onDirty() override;
    /** 0x14 */ virtual void copyFlagsFromSaveFirstTime() override;
    /** 0x18 */ virtual void setupFlagIndex() override;
    /** 0x1C */ virtual void doCommit() override {
        u16 sz = mFlagCount;
        u16 *flags = mpFlagSpace->getFlagPtrUnchecked();
        FileManager::GetInstance()->setItemFlags(flags, 0, sz);
    }
    /** 0x20 */ virtual void setFlag(u16 flag) override {
        ItemStoryManagerBase::setFlag(flag & ~MASK);
    }
    /** 0x24 */ virtual void unsetFlag(u16 flag) override {
        ItemStoryManagerBase::unsetFlag(flag & ~MASK);
    }
    /** 0x28 */ virtual void setFlagOrCounterToValue(u16 flag, u16 value) override {
        ItemStoryManagerBase::setFlagOrCounterToValue(flag & ~MASK, value);
    }
    /** 0x2C */ virtual u16 getCounterOrFlag(u16 flag) const override {
        return ItemStoryManagerBase::getCounterOrFlag(flag & ~MASK);
    }
    /** 0x30 */ virtual u16 getUncommittedValue(u16 flag) const override {
        return ItemStoryManagerBase::getUncommittedValue(flag & ~MASK);
    }
    /** 0x34 */ virtual u16 unk3(u16 arg) override {
        return ItemStoryManagerBase::unk3(arg & ~MASK);
    }
    /** 0x38 */ virtual const u16 *getSaveFlagSpace() const override {
        return FileManager::GetInstance()->getItemFlagsConst();
    };

    u16 getFlagDirect(u16 flag) {
        return ItemStoryManagerBase::getCounterOrFlag(flag);
    }

    static ItemflagManager *sInstance;

    void setItemflag(u16 flag) {
        setFlag(flag | MASK);
    }

    u16 getItemCounterOrFlag(u16 flag) const {
        return getCounterOrFlag(flag | MASK);
    }

    void setItemFlag(u16 flag) {
        setFlag(flag | MASK);
    }

    void setItemFlagOrCounterToValue(u16 flag, u16 value) {
        setFlagOrCounterToValue(flag | MASK, value);
    }

    u16 getUncommittedItemValue(u16 flag) const {
        return getUncommittedValue(flag | MASK);
    }

private:
    static u16 sFlags[0x40];
};

#endif