根據(jù)現(xiàn)有C++的屬性樹lib庫(kù),編譯UE4所用藍(lán)圖庫(kù)。版本是4.19和4.25。
Lib庫(kù)文件目錄如下:
代碼調(diào)用示例如下:
#include <iostream>
#include <Main/globals.hxx>
#include <Scripting/NasalSys.hxx>
#include <LuaScripting/LuaSys.hxx>
#include <simgear/lua/lua.hpp>
//分系統(tǒng)模塊
class MgrTest : public SGSubsystem
{
public:
MgrTest() {};
virtual ~MgrTest() {};
void init() {};
void bind() {};
void unbind() {};
void update(double dt) {
std::cout << "分系統(tǒng)模塊更新函數(shù)" << std::endl;
};
private:
};
//屬性樹簡(jiǎn)監(jiān)聽器
class TestListener : public SGPropertyChangeListener {
public:
virtual void valueChanged(SGPropertyNode* node) {
std::cout << "屬性值被改變:"<< node->getFloatValue() << std::endl;
}
};
int main()
{
//初始化全局控制系統(tǒng)
globals = new FGGlobals;
//寫入屬性樹值
const char* treeTest ="fdm/oops/test";
globals->get_props()->setFloatValue(treeTest, 200);
//獲取屬性樹值
float ret=globals->get_props()->getFloatValue(treeTest);
//往屬性樹添加監(jiān)聽器,無節(jié)點(diǎn)時(shí)候創(chuàng)建該節(jié)點(diǎn)
globals->get_props()->getNode(treeTest, true)->addChangeListener(new TestListener);
//寫入值,觸發(fā)監(jiān)聽器運(yùn)行
globals->get_props()->setFloatValue(treeTest, 402);
//分系統(tǒng)注冊(cè)和運(yùn)算更新
globals->get_subsystem_mgr()->add("MgrTest", new MgrTest);
//運(yùn)行LUA系統(tǒng)模塊
globals->get_subsystem_mgr()->add("MGLuaSys", new MGLuaSys);
globals->get_subsystem_mgr()->bind(); //優(yōu)先運(yùn)行
globals->get_subsystem_mgr()->init();//優(yōu)先運(yùn)行
globals->get_subsystem_mgr()->update(0.0);//每幀運(yùn)行
std::cout << ret << std::endl;
}
需要將屬性樹讀取、寫入、初始化、創(chuàng)建、監(jiān)聽等函數(shù)制作為藍(lán)圖節(jié)點(diǎn),方便藍(lán)圖程序調(diào)用。