mirror of
https://github.com/zeldaret/botw
synced 2026-07-27 06:45:02 -04:00
ksys/chm: Add Root
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
target_sources(uking PRIVATE
|
||||
chmShape.cpp
|
||||
chmShape.h
|
||||
chmRigid.cpp
|
||||
chmRigid.h
|
||||
chmRoot.cpp
|
||||
chmRoot.h
|
||||
chmShape.cpp
|
||||
chmShape.h
|
||||
)
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
#include "KingSystem/Chemical/chmRoot.h"
|
||||
|
||||
namespace ksys::chm {
|
||||
|
||||
Root::Root() : res_shape_num(0, "res_shape_num", "シェイプ", "Min=0 ,Max=10", &chemical_header) {
|
||||
addObj(&chemical_header, "chemical_header");
|
||||
addList(&chemical_body, "chemical_body");
|
||||
}
|
||||
|
||||
Root::~Root() {
|
||||
shapes.freeBuffer();
|
||||
rigids.freeBuffer();
|
||||
}
|
||||
|
||||
void Root::parse(const agl::utl::ResParameterList& res_list, sead::Heap* heap) {
|
||||
const auto header_obj = agl::utl::getResParameterObj(res_list, "chemical_header");
|
||||
chemical_header.applyResParameterObj(header_obj, nullptr);
|
||||
|
||||
if (res_shape_num.ref() != 0) {
|
||||
shapes.allocBufferAssert(res_shape_num.ref(), heap);
|
||||
rigids.allocBufferAssert(res_shape_num.ref(), heap);
|
||||
}
|
||||
|
||||
const auto body_list = agl::utl::getResParameterList(res_list, "chemical_body");
|
||||
for (auto it = shapes.begin(), end = shapes.end(); it != end; ++it) {
|
||||
chemical_body.addObj(std::addressof(*it),
|
||||
sead::FormatFixedSafeString<16>("shape_%02d", it.getIndex()));
|
||||
chemical_body.addObj(&rigids[it.getIndex()],
|
||||
sead::FormatFixedSafeString<16>("rigid_c_%02d", it.getIndex()));
|
||||
}
|
||||
chemical_body.applyResParameterList(body_list);
|
||||
}
|
||||
|
||||
} // namespace ksys::chm
|
||||
@@ -0,0 +1,116 @@
|
||||
#pragma once
|
||||
|
||||
#include <agl/Utils/aglParameter.h>
|
||||
#include <agl/Utils/aglParameterIO.h>
|
||||
#include <agl/Utils/aglParameterList.h>
|
||||
#include <agl/Utils/aglParameterObj.h>
|
||||
#include <container/seadBuffer.h>
|
||||
#include <hostio/seadHostIONode.h>
|
||||
#include "KingSystem/Chemical/chmRigid.h"
|
||||
#include "KingSystem/Chemical/chmShape.h"
|
||||
#include "KingSystem/Utils/Types.h"
|
||||
|
||||
namespace ksys::chm {
|
||||
|
||||
class IRoot {
|
||||
public:
|
||||
virtual int getNumShapes() const = 0;
|
||||
virtual const IShape& getShape(int idx) const = 0;
|
||||
|
||||
virtual bool isRigidAttribute0Set(int idx) const = 0;
|
||||
virtual bool isRigidAttribute1Set(int idx) const = 0;
|
||||
virtual const sead::SafeString& getRigidSetName(int idx) const = 0;
|
||||
virtual bool isRigidAttribute2Set(int idx) const = 0;
|
||||
virtual const sead::SafeString& getRigidName(int idx) const = 0;
|
||||
virtual bool rigidHasBurnOutTime(int idx) const = 0;
|
||||
virtual float getRigidBurnOutTime(int idx) const = 0;
|
||||
virtual bool isRigidAttribute3Set(int idx) const = 0;
|
||||
virtual bool isRigidAttribute15Set(int idx) const = 0;
|
||||
virtual float getRigidVolume(int idx) const = 0;
|
||||
virtual bool isRigidAttribute9Set(int idx) const = 0;
|
||||
virtual bool isRigidAttribute10Set(int idx) const = 0;
|
||||
virtual float getRigidMass(int idx) const = 0;
|
||||
virtual bool isRigidAttribute6Or14Set(int idx) const = 0;
|
||||
virtual bool isRigidAttribute5Set(int idx) const = 0;
|
||||
virtual bool isRigidAttribute4Set(int idx) const = 0;
|
||||
virtual bool isRigidAttribute11Set(int idx) const = 0;
|
||||
virtual bool isRigidAttribute12Set(int idx) const = 0;
|
||||
virtual bool isRigidAttribute13Set(int idx) const = 0;
|
||||
virtual bool isRigidAttribute14Set(int idx) const = 0;
|
||||
virtual bool isRigidAttribute16Set(int idx) const = 0;
|
||||
};
|
||||
|
||||
class Root : public agl::utl::ParameterList, public sead::hostio::Node, public IRoot {
|
||||
public:
|
||||
Root();
|
||||
~Root() override;
|
||||
|
||||
void parse(const agl::utl::ResParameterList& res_list, sead::Heap* heap);
|
||||
|
||||
int getNumShapes() const override { return shapes.size(); }
|
||||
const IShape& getShape(int idx) const override { return shapes[idx]; }
|
||||
bool isRigidAttribute0Set(int idx) const override {
|
||||
return rigids[idx].getAttribute() & (1 << 0);
|
||||
}
|
||||
bool isRigidAttribute1Set(int idx) const override {
|
||||
return rigids[idx].getAttribute() & (1 << 1);
|
||||
}
|
||||
const sead::SafeString& getRigidSetName(int idx) const override {
|
||||
return rigids[idx].getRigidSetName();
|
||||
}
|
||||
bool isRigidAttribute2Set(int idx) const override {
|
||||
return rigids[idx].getAttribute() & (1 << 2);
|
||||
}
|
||||
const sead::SafeString& getRigidName(int idx) const override {
|
||||
return rigids[idx].getRigidName();
|
||||
}
|
||||
bool rigidHasBurnOutTime(int idx) const override { return rigids[idx].getBurnOutTime() > 0.0; }
|
||||
float getRigidBurnOutTime(int idx) const override { return rigids[idx].getBurnOutTime(); }
|
||||
bool isRigidAttribute3Set(int idx) const override {
|
||||
return rigids[idx].getAttribute() & (1 << 3);
|
||||
}
|
||||
bool isRigidAttribute15Set(int idx) const override {
|
||||
return rigids[idx].getAttribute() & (1 << 15);
|
||||
}
|
||||
float getRigidVolume(int idx) const override { return rigids[idx].getVolume(); }
|
||||
bool isRigidAttribute9Set(int idx) const override {
|
||||
return rigids[idx].getAttribute() & (1 << 9);
|
||||
}
|
||||
bool isRigidAttribute10Set(int idx) const override {
|
||||
return rigids[idx].getAttribute() & (1 << 10);
|
||||
}
|
||||
float getRigidMass(int idx) const override { return rigids[idx].getMass(); }
|
||||
bool isRigidAttribute6Or14Set(int idx) const override {
|
||||
return rigids[idx].getAttribute() & (1 << 6) || isRigidAttribute14Set(idx);
|
||||
}
|
||||
bool isRigidAttribute5Set(int idx) const override {
|
||||
return rigids[idx].getAttribute() & (1 << 5);
|
||||
}
|
||||
bool isRigidAttribute4Set(int idx) const override {
|
||||
return rigids[idx].getAttribute() & (1 << 4);
|
||||
}
|
||||
bool isRigidAttribute11Set(int idx) const override {
|
||||
return rigids[idx].getAttribute() & (1 << 11);
|
||||
}
|
||||
bool isRigidAttribute12Set(int idx) const override {
|
||||
return rigids[idx].getAttribute() & (1 << 12);
|
||||
}
|
||||
bool isRigidAttribute13Set(int idx) const override {
|
||||
return rigids[idx].getAttribute() & (1 << 13);
|
||||
}
|
||||
bool isRigidAttribute14Set(int idx) const override {
|
||||
return rigids[idx].getAttribute() & (1 << 14);
|
||||
}
|
||||
bool isRigidAttribute16Set(int idx) const override {
|
||||
return rigids[idx].getAttribute() & (1 << 16);
|
||||
}
|
||||
|
||||
private:
|
||||
agl::utl::ParameterObj chemical_header;
|
||||
agl::utl::Parameter<u32> res_shape_num;
|
||||
agl::utl::ParameterList chemical_body;
|
||||
sead::Buffer<Shape> shapes;
|
||||
sead::Buffer<Rigid> rigids;
|
||||
};
|
||||
|
||||
} // namespace ksys::chm
|
||||
Reference in New Issue
Block a user