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

#include <basis/seadTypes.h>
#include <container/seadBuffer.h>
#include <prim/seadRuntimeTypeInfo.h>
#include <prim/seadSafeString.h>
#include <utility/aglParameter.h>
#include <utility/aglParameterIO.h>
#include <utility/aglParameterList.h>
#include <utility/aglParameterObj.h>
#include <utility/aglResParameter.h>
#include "KingSystem/Resource/Actor/resResourceASResourceExtension.h"
#include "KingSystem/Resource/resResource.h"

namespace ksys::res {

class ASSetting : public agl::utl::IParameterIO, public Resource {
    SEAD_RTTI_OVERRIDE(ASSetting, Resource)

public:
    struct BoneParam {
        agl::utl::ParameterObj mObj;
        agl::utl::Parameter<sead::SafeString> mBone;
        agl::utl::Parameter<float> mWeight;
    };
    KSYS_CHECK_SIZE_NX150(BoneParam, 0x78);

    class BoneParams : public ASParamParser {
        SEAD_RTTI_OVERRIDE(BoneParams, ASParamParser)
    public:
        BoneParams() : ASParamParser(Type::BlenderBone) {}
        ~BoneParams() override;
        bool parse(const ParseArgs& args) override;
        f32 getBoneWeight(const sead::SafeString& name) const;

        sead::Buffer<BoneParam> mBuffer;
    };

    struct BlenderBone {
        agl::utl::ParameterList mList;
        agl::utl::ParameterObj mNameParamObj;
        agl::utl::Parameter<sead::SafeString> mKeyName;
        BoneParams mBoneParams;
    };
    KSYS_CHECK_SIZE_NX150(BlenderBone, 0x108);

    ASSetting();
    ~ASSetting() override;

    void doCreate_(u8* buffer, u32 buffer_size, sead::Heap* heap) override;
    bool needsParse() const override { return true; }
    bool parse_(u8* data, size_t size, sead::Heap* heap) override;

    sead::Buffer<BlenderBone>& getBlenderBones() { return mBlenderBones; }
    const sead::Buffer<BlenderBone>& getBlenderBones() const { return mBlenderBones; }

private:
    sead::Buffer<BlenderBone> mBlenderBones;
    agl::utl::ParameterList mBlenderBoneList;
};
KSYS_CHECK_SIZE_NX150(ASSetting, 0x260);

}  // namespace ksys::res