summaryrefslogtreecommitdiff
path: root/src/KingSystem/Resource/resResource.h
blob: 675fe7395d6d93a66badddf45ef2c2a0ac366267 (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
#pragma once

#include <resource/seadResource.h>
#include "KingSystem/Utils/Types.h"

namespace ksys::res {

class IResource {
public:
    virtual ~IResource() = default;
};

class Context {
public:
    virtual ~Context() = default;
};

class Resource : public sead::DirectResource, public IResource {
    SEAD_RTTI_OVERRIDE(Resource, sead::DirectResource)
public:
    Resource();
    ~Resource() override;

    void doCreate_(u8* buffer, u32 buffer_size, sead::Heap* heap) override;

    virtual bool needsParse() const { return false; }
    virtual bool m2_() { return true; }

    Context* getContext() const;
    void setContext(Context* context);

    void onDestroy();
    bool parse(Context*, sead::Heap* heap);
    bool finalize();
    bool finishParsing(Context* context);
    bool m7();

    static constexpr size_t cLoadDataAlignment = 4;

protected:
    virtual void onDestroy_() {}
    virtual bool parse_(u8* data, size_t size, sead::Heap* heap);
    virtual void finalize_() {}
    virtual bool finishParsing_() { return true; }
    virtual bool m7_() { return true; }
    virtual void m8_() {}

    u32 mAllocSize = 0;
    Context* mContext = nullptr;
};
KSYS_CHECK_SIZE_NX150(Resource, 0x38);

inline void Resource::doCreate_(u8*, u32, sead::Heap*) {}

inline bool Resource::parse_(u8*, size_t, sead::Heap*) {
    return true;
}

}  // namespace ksys::res