mirror of
https://github.com/godotengine/godot.git
synced 2024-11-10 22:23:07 +00:00
Add a way to store additional data in GLTFState and GLTFNode
This commit is contained in:
parent
dc4b616596
commit
a70dce893f
@ -9,6 +9,25 @@
|
||||
<tutorials>
|
||||
<link title="GLTF scene and node spec">https://github.com/KhronosGroup/glTF-Tutorials/blob/master/gltfTutorial/gltfTutorial_004_ScenesNodes.md"</link>
|
||||
</tutorials>
|
||||
<methods>
|
||||
<method name="get_additional_data">
|
||||
<return type="Variant" />
|
||||
<param index="0" name="extension_name" type="StringName" />
|
||||
<description>
|
||||
Gets additional arbitrary data in this [GLTFNode] instance. This can be used to keep per-node state data in [GLTFDocumentExtension] classes, which is important because they are stateless.
|
||||
The argument should be the [GLTFDocumentExtension] name (does not have to match the extension name in the GLTF file), and the return value can be anything you set. If nothing was set, the return value is null.
|
||||
</description>
|
||||
</method>
|
||||
<method name="set_additional_data">
|
||||
<return type="void" />
|
||||
<param index="0" name="extension_name" type="StringName" />
|
||||
<param index="1" name="additional_data" type="Variant" />
|
||||
<description>
|
||||
Sets additional arbitrary data in this [GLTFNode] instance. This can be used to keep per-node state data in [GLTFDocumentExtension] classes, which is important because they are stateless.
|
||||
The first argument should be the [GLTFDocumentExtension] name (does not have to match the extension name in the GLTF file), and the second argument can be anything you want.
|
||||
</description>
|
||||
</method>
|
||||
</methods>
|
||||
<members>
|
||||
<member name="camera" type="int" setter="set_camera" getter="get_camera" default="-1">
|
||||
</member>
|
||||
|
@ -20,6 +20,14 @@
|
||||
<description>
|
||||
</description>
|
||||
</method>
|
||||
<method name="get_additional_data">
|
||||
<return type="Variant" />
|
||||
<param index="0" name="extension_name" type="StringName" />
|
||||
<description>
|
||||
Gets additional arbitrary data in this [GLTFState] instance. This can be used to keep per-file state data in [GLTFDocumentExtension] classes, which is important because they are stateless.
|
||||
The argument should be the [GLTFDocumentExtension] name (does not have to match the extension name in the GLTF file), and the return value can be anything you set. If nothing was set, the return value is null.
|
||||
</description>
|
||||
</method>
|
||||
<method name="get_animation_player">
|
||||
<return type="AnimationPlayer" />
|
||||
<param index="0" name="idx" type="int" />
|
||||
@ -120,6 +128,15 @@
|
||||
<description>
|
||||
</description>
|
||||
</method>
|
||||
<method name="set_additional_data">
|
||||
<return type="void" />
|
||||
<param index="0" name="extension_name" type="StringName" />
|
||||
<param index="1" name="additional_data" type="Variant" />
|
||||
<description>
|
||||
Sets additional arbitrary data in this [GLTFState] instance. This can be used to keep per-file state data in [GLTFDocumentExtension] classes, which is important because they are stateless.
|
||||
The first argument should be the [GLTFDocumentExtension] name (does not have to match the extension name in the GLTF file), and the second argument can be anything you want.
|
||||
</description>
|
||||
</method>
|
||||
<method name="set_animations">
|
||||
<return type="void" />
|
||||
<param index="0" name="animations" type="GLTFAnimation[]" />
|
||||
|
@ -87,6 +87,8 @@ void GLTFState::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("get_animations"), &GLTFState::get_animations);
|
||||
ClassDB::bind_method(D_METHOD("set_animations", "animations"), &GLTFState::set_animations);
|
||||
ClassDB::bind_method(D_METHOD("get_scene_node", "idx"), &GLTFState::get_scene_node);
|
||||
ClassDB::bind_method(D_METHOD("get_additional_data", "extension_name"), &GLTFState::get_additional_data);
|
||||
ClassDB::bind_method(D_METHOD("set_additional_data", "extension_name", "additional_data"), &GLTFState::set_additional_data);
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::DICTIONARY, "json"), "set_json", "get_json"); // Dictionary
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "major_version"), "set_major_version", "get_major_version"); // int
|
||||
@ -358,3 +360,11 @@ String GLTFState::get_base_path() {
|
||||
void GLTFState::set_base_path(String p_base_path) {
|
||||
base_path = p_base_path;
|
||||
}
|
||||
|
||||
Variant GLTFState::get_additional_data(const StringName &p_extension_name) {
|
||||
return additional_data[p_extension_name];
|
||||
}
|
||||
|
||||
void GLTFState::set_additional_data(const StringName &p_extension_name, Variant p_additional_data) {
|
||||
additional_data[p_extension_name] = p_additional_data;
|
||||
}
|
||||
|
@ -97,6 +97,7 @@ class GLTFState : public Resource {
|
||||
|
||||
HashMap<ObjectID, GLTFSkeletonIndex> skeleton3d_to_gltf_skeleton;
|
||||
HashMap<ObjectID, HashMap<ObjectID, GLTFSkinIndex>> skin_and_skeleton3d_to_gltf_skin;
|
||||
Dictionary additional_data;
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
@ -191,6 +192,9 @@ public:
|
||||
|
||||
AnimationPlayer *get_animation_player(int idx);
|
||||
|
||||
Variant get_additional_data(const StringName &p_extension_name);
|
||||
void set_additional_data(const StringName &p_extension_name, Variant p_additional_data);
|
||||
|
||||
//void set_scene_nodes(RBMap<GLTFNodeIndex, Node *> p_scene_nodes) {
|
||||
// this->scene_nodes = p_scene_nodes;
|
||||
//}
|
||||
|
@ -57,6 +57,8 @@ void GLTFNode::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("set_children", "children"), &GLTFNode::set_children);
|
||||
ClassDB::bind_method(D_METHOD("get_light"), &GLTFNode::get_light);
|
||||
ClassDB::bind_method(D_METHOD("set_light", "light"), &GLTFNode::set_light);
|
||||
ClassDB::bind_method(D_METHOD("get_additional_data", "extension_name"), &GLTFNode::get_additional_data);
|
||||
ClassDB::bind_method(D_METHOD("set_additional_data", "extension_name", "additional_data"), &GLTFNode::set_additional_data);
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "parent"), "set_parent", "get_parent"); // GLTFNodeIndex
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "height"), "set_height", "get_height"); // int
|
||||
@ -176,3 +178,11 @@ GLTFLightIndex GLTFNode::get_light() {
|
||||
void GLTFNode::set_light(GLTFLightIndex p_light) {
|
||||
light = p_light;
|
||||
}
|
||||
|
||||
Variant GLTFNode::get_additional_data(const StringName &p_extension_name) {
|
||||
return additional_data[p_extension_name];
|
||||
}
|
||||
|
||||
void GLTFNode::set_additional_data(const StringName &p_extension_name, Variant p_additional_data) {
|
||||
additional_data[p_extension_name] = p_additional_data;
|
||||
}
|
||||
|
@ -53,6 +53,7 @@ private:
|
||||
Vector3 scale = Vector3(1, 1, 1);
|
||||
Vector<int> children;
|
||||
GLTFLightIndex light = -1;
|
||||
Dictionary additional_data;
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
@ -96,6 +97,9 @@ public:
|
||||
|
||||
GLTFLightIndex get_light();
|
||||
void set_light(GLTFLightIndex p_light);
|
||||
|
||||
Variant get_additional_data(const StringName &p_extension_name);
|
||||
void set_additional_data(const StringName &p_extension_name, Variant p_additional_data);
|
||||
};
|
||||
|
||||
#endif // GLTF_NODE_H
|
||||
|
Loading…
Reference in New Issue
Block a user