diff --git a/kraken/KRAmbientZone.cpp b/kraken/KRAmbientZone.cpp index 3119206..e1dacee 100755 --- a/kraken/KRAmbientZone.cpp +++ b/kraken/KRAmbientZone.cpp @@ -9,6 +9,16 @@ #include "KRAmbientZone.h" #include "KRContext.h" +/* static */ +void KRAmbientZone::InitNodeInfo(KrNodeInfo* nodeInfo) +{ + KRNode::InitNodeInfo(nodeInfo); + nodeInfo->ambient_zone.gain = 1.0f; + nodeInfo->ambient_zone.gradient = 0.25f; + nodeInfo->ambient_zone.pZoneName = nullptr; + nodeInfo->ambient_zone.sample = -1; +} + KRAmbientZone::KRAmbientZone(KRScene &scene, std::string name) : KRNode(scene, name) { m_ambient = ""; diff --git a/kraken/KRAmbientZone.h b/kraken/KRAmbientZone.h index 0834557..10b6549 100755 --- a/kraken/KRAmbientZone.h +++ b/kraken/KRAmbientZone.h @@ -15,6 +15,8 @@ class KRAmbientZone : public KRNode { public: + static void InitNodeInfo(KrNodeInfo* nodeInfo); + KRAmbientZone(KRScene &scene, std::string name); virtual ~KRAmbientZone(); virtual std::string getElementName(); diff --git a/kraken/KRAudioSource.cpp b/kraken/KRAudioSource.cpp index ea427b5..3273f6a 100755 --- a/kraken/KRAudioSource.cpp +++ b/kraken/KRAudioSource.cpp @@ -35,6 +35,22 @@ #include "KRAudioSample.h" #include "KRAudioBuffer.h" +/* static */ +void KRAudioSource::InitNodeInfo(KrNodeInfo* nodeInfo) +{ + KRNode::InitNodeInfo(nodeInfo); + nodeInfo->audio_source.enable_obstruction = true; + nodeInfo->audio_source.enable_occlusion = true; + nodeInfo->audio_source.gain = 1.0f; + nodeInfo->audio_source.is_3d = true; + nodeInfo->audio_source.looping = false; + nodeInfo->audio_source.pitch = 1.0f; + nodeInfo->audio_source.reference_distance = 1.0f; + nodeInfo->audio_source.reverb = 0.0f; + nodeInfo->audio_source.rolloff_factor = 2.0f; + nodeInfo->audio_source.sample = -1; +} + KRAudioSource::KRAudioSource(KRScene &scene, std::string name) : KRNode(scene, name) { m_currentBufferFrame = 0; diff --git a/kraken/KRAudioSource.h b/kraken/KRAudioSource.h index e234a58..2edb255 100755 --- a/kraken/KRAudioSource.h +++ b/kraken/KRAudioSource.h @@ -42,6 +42,8 @@ class KRAudioBuffer; class KRAudioSource : public KRNode { public: + static void InitNodeInfo(KrNodeInfo* nodeInfo); + KRAudioSource(KRScene &scene, std::string name); virtual ~KRAudioSource(); virtual std::string getElementName(); diff --git a/kraken/KRBone.cpp b/kraken/KRBone.cpp index e613a93..ae757cb 100755 --- a/kraken/KRBone.cpp +++ b/kraken/KRBone.cpp @@ -9,6 +9,13 @@ #include "KRBone.h" #include "KRContext.h" +/* static */ +void KRBone::InitNodeInfo(KrNodeInfo* nodeInfo) +{ + KRNode::InitNodeInfo(nodeInfo); + // No additional members +} + KRBone::KRBone(KRScene &scene, std::string name) : KRNode(scene, name) { setScaleCompensation(true); diff --git a/kraken/KRBone.h b/kraken/KRBone.h index d38afbf..1d36672 100755 --- a/kraken/KRBone.h +++ b/kraken/KRBone.h @@ -15,6 +15,8 @@ class KRBone : public KRNode { public: + static void InitNodeInfo(KrNodeInfo* nodeInfo); + KRBone(KRScene &scene, std::string name); virtual ~KRBone(); virtual std::string getElementName(); diff --git a/kraken/KRCamera.cpp b/kraken/KRCamera.cpp index 020d50f..c5f53aa 100755 --- a/kraken/KRCamera.cpp +++ b/kraken/KRCamera.cpp @@ -34,6 +34,13 @@ #include "KRStockGeometry.h" #include "KRDirectionalLight.h" +/* static */ +void KRCamera::InitNodeInfo(KrNodeInfo* nodeInfo) +{ + KRNode::InitNodeInfo(nodeInfo); + nodeInfo->camera.skybox_texture = -1; +} + KRCamera::KRCamera(KRScene &scene, std::string name) : KRNode(scene, name) { m_last_frame_start = 0; diff --git a/kraken/KRCamera.h b/kraken/KRCamera.h index dfd4e71..6c7881d 100755 --- a/kraken/KRCamera.h +++ b/kraken/KRCamera.h @@ -49,6 +49,7 @@ class KRViewport; class KRCamera : public KRNode { public: + static void InitNodeInfo(KrNodeInfo* nodeInfo); KRCamera(KRScene &scene, std::string name); virtual ~KRCamera(); diff --git a/kraken/KRCollider.cpp b/kraken/KRCollider.cpp index e716928..28d27af 100755 --- a/kraken/KRCollider.cpp +++ b/kraken/KRCollider.cpp @@ -34,6 +34,14 @@ #include "KRContext.h" #include "KRMesh.h" +/* static */ +void KRCollider::InitNodeInfo(KrNodeInfo* nodeInfo) +{ + KRNode::InitNodeInfo(nodeInfo); + nodeInfo->collider.audio_occlusion = 1.0f; + nodeInfo->collider.layer_mask = 65535; + nodeInfo->collider.mesh = -1; +} KRCollider::KRCollider(KRScene &scene, std::string collider_name, std::string model_name, unsigned int layer_mask, float audio_occlusion) : KRNode(scene, collider_name) { m_model_name = model_name; diff --git a/kraken/KRCollider.h b/kraken/KRCollider.h index 0292ff1..af68573 100755 --- a/kraken/KRCollider.h +++ b/kraken/KRCollider.h @@ -49,6 +49,8 @@ class KRCollider : public KRNode { public: + static void InitNodeInfo(KrNodeInfo* nodeInfo); + KRCollider(KRScene &scene, std::string collider_name, std::string model_name, unsigned int layer_mask, float audio_occlusion); virtual ~KRCollider(); diff --git a/kraken/KRDirectionalLight.cpp b/kraken/KRDirectionalLight.cpp index 5be0f9b..692afa3 100755 --- a/kraken/KRDirectionalLight.cpp +++ b/kraken/KRDirectionalLight.cpp @@ -14,6 +14,13 @@ #include "assert.h" #include "KRStockGeometry.h" +/* static */ +void KRDirectionalLight::InitNodeInfo(KrNodeInfo* nodeInfo) +{ + KRLight::InitNodeInfo(nodeInfo); + // No additional members +} + KRDirectionalLight::KRDirectionalLight(KRScene &scene, std::string name) : KRLight(scene, name) { diff --git a/kraken/KRDirectionalLight.h b/kraken/KRDirectionalLight.h index cae4a56..038ebc4 100755 --- a/kraken/KRDirectionalLight.h +++ b/kraken/KRDirectionalLight.h @@ -14,6 +14,7 @@ class KRDirectionalLight : public KRLight { public: + static void InitNodeInfo(KrNodeInfo* nodeInfo); KRDirectionalLight(KRScene &scene, std::string name); virtual ~KRDirectionalLight(); diff --git a/kraken/KRLODGroup.cpp b/kraken/KRLODGroup.cpp index c275b9a..8eb34e8 100755 --- a/kraken/KRLODGroup.cpp +++ b/kraken/KRLODGroup.cpp @@ -10,6 +10,17 @@ #include "KRLODSet.h" #include "KRContext.h" +/* static */ +void KRLODGroup::InitNodeInfo(KrNodeInfo* nodeInfo) +{ + KRNode::InitNodeInfo(nodeInfo); + nodeInfo->lod_group.min_distance = 0.0f; + nodeInfo->lod_group.max_distance = 0.0f; + nodeInfo->lod_group.reference_min = Vector3::Zero(); + nodeInfo->lod_group.reference_max = Vector3::Zero(); + nodeInfo->lod_group.use_world_units = true; +} + KRLODGroup::KRLODGroup(KRScene &scene, std::string name) : KRNode(scene, name) { m_min_distance = 0.0f; diff --git a/kraken/KRLODGroup.h b/kraken/KRLODGroup.h index 61870da..1be21f6 100755 --- a/kraken/KRLODGroup.h +++ b/kraken/KRLODGroup.h @@ -14,6 +14,7 @@ class KRLODGroup : public KRNode { public: + static void InitNodeInfo(KrNodeInfo* nodeInfo); KRLODGroup(KRScene &scene, std::string name); virtual ~KRLODGroup(); virtual std::string getElementName(); diff --git a/kraken/KRLODSet.cpp b/kraken/KRLODSet.cpp index d9dda66..b99c80c 100755 --- a/kraken/KRLODSet.cpp +++ b/kraken/KRLODSet.cpp @@ -10,6 +10,13 @@ #include "KRLODGroup.h" #include "KRContext.h" +/* static */ +void KRLODSet::InitNodeInfo(KrNodeInfo* nodeInfo) +{ + KRNode::InitNodeInfo(nodeInfo); + // No additional members +} + KRLODSet::KRLODSet(KRScene &scene, std::string name) : KRNode(scene, name) { diff --git a/kraken/KRLODSet.h b/kraken/KRLODSet.h index 2e8034b..5e51c4f 100755 --- a/kraken/KRLODSet.h +++ b/kraken/KRLODSet.h @@ -16,6 +16,7 @@ class KRLODGroup; class KRLODSet : public KRNode { public: + static void InitNodeInfo(KrNodeInfo* nodeInfo); KRLODSet(KRScene &scene, std::string name); virtual ~KRLODSet(); virtual std::string getElementName(); diff --git a/kraken/KRLight.cpp b/kraken/KRLight.cpp index d9f126e..e69b9b6 100755 --- a/kraken/KRLight.cpp +++ b/kraken/KRLight.cpp @@ -21,6 +21,22 @@ #include "KRSpotLight.h" #include "KRPointLight.h" +/* static */ +void KRLight::InitNodeInfo(KrNodeInfo* nodeInfo) +{ + KRNode::InitNodeInfo(nodeInfo); + nodeInfo->light.casts_shadow = true; + nodeInfo->light.color = Vector3::One(); + nodeInfo->light.decay_start = 0.0f; + nodeInfo->light.dust_particle_density = 0.1f; + nodeInfo->light.dust_particle_intensity = 1.0f; + nodeInfo->light.dust_particle_size = 1.0f; + nodeInfo->light.flare_occlusion_size = 0.05f; + nodeInfo->light.flare_size = 0.0f; + nodeInfo->light.flare_texture = -1; + nodeInfo->light.intensity = 1.0f; + nodeInfo->light.light_shafts = true; +} KRLight::KRLight(KRScene &scene, std::string name) : KRNode(scene, name) { @@ -35,7 +51,9 @@ KRLight::KRLight(KRScene &scene, std::string name) : KRNode(scene, name) m_light_shafts = true; m_dust_particle_density = 0.1f; m_dust_particle_size = 1.0f; + m_dust_particle_intensity = 1.0f; m_occlusionQuery = 0; + m_decayStart = 0; // Initialize shadow buffers m_cShadowBuffers = 0; diff --git a/kraken/KRLight.h b/kraken/KRLight.h index 65e3d2e..8408d45 100755 --- a/kraken/KRLight.h +++ b/kraken/KRLight.h @@ -23,7 +23,7 @@ static const float KRLIGHT_MIN_INFLUENCE = 0.15f; // 0.05f class KRLight : public KRNode { public: - + static void InitNodeInfo(KrNodeInfo* nodeInfo); virtual ~KRLight(); virtual std::string getElementName() = 0; diff --git a/kraken/KRLocator.cpp b/kraken/KRLocator.cpp index 8c54b1a..181f1bf 100755 --- a/kraken/KRLocator.cpp +++ b/kraken/KRLocator.cpp @@ -9,6 +9,13 @@ #include "KRLocator.h" #include "KRContext.h" +/* static */ +void KRLocator::InitNodeInfo(KrNodeInfo* nodeInfo) +{ + KRNode::InitNodeInfo(nodeInfo); + // No additional members +} + KRLocator::KRLocator(KRScene &scene, std::string name) : KRNode(scene, name) { diff --git a/kraken/KRLocator.h b/kraken/KRLocator.h index c2eab4a..a640537 100755 --- a/kraken/KRLocator.h +++ b/kraken/KRLocator.h @@ -15,6 +15,8 @@ class KRLocator : public KRNode { public: + static void InitNodeInfo(KrNodeInfo* nodeInfo); + KRLocator(KRScene &scene, std::string name); virtual ~KRLocator(); virtual std::string getElementName(); diff --git a/kraken/KRModel.cpp b/kraken/KRModel.cpp index e85e907..94954fb 100755 --- a/kraken/KRModel.cpp +++ b/kraken/KRModel.cpp @@ -35,6 +35,19 @@ #include "KRContext.h" #include "KRMesh.h" +/* static */ +void KRModel::InitNodeInfo(KrNodeInfo* nodeInfo) +{ + KRNode::InitNodeInfo(nodeInfo); + nodeInfo->model.faces_camera = false; + nodeInfo->model.light_map_texture = -1; + nodeInfo->model.lod_min_coverage = 0.0f; + nodeInfo->model.mesh = -1; + nodeInfo->model.receives_shadow = true; + nodeInfo->model.rim_color = Vector3::Zero(); + nodeInfo->model.rim_power = 0.0f; +} + KRModel::KRModel(KRScene &scene, std::string instance_name, std::string model_name, std::string light_map, float lod_min_coverage, bool receives_shadow, bool faces_camera, Vector3 rim_color, float rim_power) : KRNode(scene, instance_name) { m_lightMap = light_map; m_pLightMap = NULL; diff --git a/kraken/KRModel.h b/kraken/KRModel.h index bab4341..b4e3647 100755 --- a/kraken/KRModel.h +++ b/kraken/KRModel.h @@ -47,6 +47,8 @@ class KRModel : public KRNode { public: + static void InitNodeInfo(KrNodeInfo* nodeInfo); + KRModel(KRScene &scene, std::string instance_name, std::string model_name, std::string light_map, float lod_min_coverage, bool receives_shadow, bool faces_camera, Vector3 rim_color = Vector3::Zero(), float rim_power = 0.0f); virtual ~KRModel(); diff --git a/kraken/KRNode.cpp b/kraken/KRNode.cpp index 94f2320..341b4dd 100755 --- a/kraken/KRNode.cpp +++ b/kraken/KRNode.cpp @@ -25,6 +25,21 @@ #include "KRReverbZone.h" #include "KRSprite.h" +/* static */ +void KRNode::InitNodeInfo(KrNodeInfo* nodeInfo) +{ + nodeInfo->pName = nullptr; + nodeInfo->translate = Vector3::Zero(); + nodeInfo->scale = Vector3::One(); + nodeInfo->rotate = Vector3::Zero(); + nodeInfo->pre_rotate = Vector3::Zero(); + nodeInfo->post_rotate = Vector3::Zero(); + nodeInfo->rotate_offset = Vector3::Zero(); + nodeInfo->scale_offset = Vector3::Zero(); + nodeInfo->rotate_pivot = Vector3::Zero(); + nodeInfo->scale_pivot = Vector3::Zero(); +} + KRNode::KRNode(KRScene &scene, std::string name) : KRContextObject(scene.getContext()) { m_name = name; diff --git a/kraken/KRNode.h b/kraken/KRNode.h index 9faf45a..90a360b 100755 --- a/kraken/KRNode.h +++ b/kraken/KRNode.h @@ -59,11 +59,14 @@ public: LOD_VISIBILITY_PRESTREAM, LOD_VISIBILITY_VISIBLE }; + + static void InitNodeInfo(KrNodeInfo* nodeInfo); KRNode(KRScene &scene, std::string name); virtual ~KRNode(); virtual tinyxml2::XMLElement *saveXML( tinyxml2::XMLNode *parent); + static KRNode *LoadXML(KRScene &scene, tinyxml2::XMLElement *e); virtual void loadXML(tinyxml2::XMLElement *e); diff --git a/kraken/KRPointLight.cpp b/kraken/KRPointLight.cpp index e692099..b5a0d49 100755 --- a/kraken/KRPointLight.cpp +++ b/kraken/KRPointLight.cpp @@ -13,6 +13,13 @@ #include "KRContext.h" #include "KRStockGeometry.h" +/* static */ +void KRPointLight::InitNodeInfo(KrNodeInfo* nodeInfo) +{ + KRLight::InitNodeInfo(nodeInfo); + // No additional members +} + KRPointLight::KRPointLight(KRScene &scene, std::string name) : KRLight(scene, name) { m_sphereVertices = NULL; diff --git a/kraken/KRPointLight.h b/kraken/KRPointLight.h index 3a30185..ef69c3c 100755 --- a/kraken/KRPointLight.h +++ b/kraken/KRPointLight.h @@ -14,7 +14,7 @@ class KRPointLight : public KRLight { public: - + static void InitNodeInfo(KrNodeInfo* nodeInfo); KRPointLight(KRScene &scene, std::string name); virtual ~KRPointLight(); diff --git a/kraken/KRReverbZone.cpp b/kraken/KRReverbZone.cpp index 7ed19b7..6bca54b 100755 --- a/kraken/KRReverbZone.cpp +++ b/kraken/KRReverbZone.cpp @@ -9,6 +9,16 @@ #include "KRReverbZone.h" #include "KRContext.h" +/* static */ +void KRReverbZone::InitNodeInfo(KrNodeInfo* nodeInfo) +{ + KRNode::InitNodeInfo(nodeInfo); + nodeInfo->reverb_zone.gain = 1.0f; + nodeInfo->reverb_zone.gradient = 0.25f; + nodeInfo->reverb_zone.sample = -1; + nodeInfo->reverb_zone.pZoneName = nullptr; +} + KRReverbZone::KRReverbZone(KRScene &scene, std::string name) : KRNode(scene, name) { m_reverb = ""; diff --git a/kraken/KRReverbZone.h b/kraken/KRReverbZone.h index 0e7ce02..2c58019 100755 --- a/kraken/KRReverbZone.h +++ b/kraken/KRReverbZone.h @@ -15,6 +15,8 @@ class KRReverbZone : public KRNode { public: + static void InitNodeInfo(KrNodeInfo* nodeInfo); + KRReverbZone(KRScene &scene, std::string name); virtual ~KRReverbZone(); virtual std::string getElementName(); diff --git a/kraken/KRSpotLight.cpp b/kraken/KRSpotLight.cpp index e54040b..8119a8d 100755 --- a/kraken/KRSpotLight.cpp +++ b/kraken/KRSpotLight.cpp @@ -9,8 +9,18 @@ #include "KREngine-common.h" #include "KRSpotLight.h" +/* static */ +void KRSpotLight::InitNodeInfo(KrNodeInfo* nodeInfo) +{ + KRLight::InitNodeInfo(nodeInfo); + nodeInfo->light.spot.inner_angle = M_PI_4; + nodeInfo->light.spot.outer_angle = M_PI_2; +} + KRSpotLight::KRSpotLight(KRScene &scene, std::string name) : KRLight(scene, name) { + m_innerAngle = M_PI_4; + m_outerAngle = M_PI_2; } KRSpotLight::~KRSpotLight() diff --git a/kraken/KRSpotLight.h b/kraken/KRSpotLight.h index 198c8e9..dea2767 100755 --- a/kraken/KRSpotLight.h +++ b/kraken/KRSpotLight.h @@ -13,6 +13,8 @@ class KRSpotLight : public KRLight { public: + static void InitNodeInfo(KrNodeInfo* nodeInfo); + KRSpotLight(KRScene &scene, std::string name); virtual ~KRSpotLight(); diff --git a/kraken/KRSprite.cpp b/kraken/KRSprite.cpp index 7500e54..ff069f1 100755 --- a/kraken/KRSprite.cpp +++ b/kraken/KRSprite.cpp @@ -21,6 +21,13 @@ #include "KRSpotLight.h" #include "KRPointLight.h" +/* static */ +void KRSprite::InitNodeInfo(KrNodeInfo* nodeInfo) +{ + KRNode::InitNodeInfo(nodeInfo); + nodeInfo->sprite.alpha = 1.0f; + nodeInfo->sprite.texture = -1; +} KRSprite::KRSprite(KRScene &scene, std::string name) : KRNode(scene, name) { diff --git a/kraken/KRSprite.h b/kraken/KRSprite.h index 7727a0f..12e3f43 100755 --- a/kraken/KRSprite.h +++ b/kraken/KRSprite.h @@ -15,6 +15,8 @@ class KRSprite : public KRNode { public: + static void InitNodeInfo(KrNodeInfo* nodeInfo); + KRSprite(KRScene &scene, std::string name); virtual ~KRSprite(); diff --git a/kraken/kraken.cpp b/kraken/kraken.cpp index 6f097cb..7128eff 100644 --- a/kraken/kraken.cpp +++ b/kraken/kraken.cpp @@ -2,6 +2,22 @@ #include "KRContext.h" #include "KRBundle.h" +#include "hydra.h" +#include "KRLODSet.h" +#include "KRLODGroup.h" +#include "KRPointLight.h" +#include "KRDirectionalLight.h" +#include "KRSpotLight.h" +#include "KRSprite.h" +#include "KRModel.h" +#include "KRCollider.h" +#include "KRBone.h" +#include "KRLocator.h" +#include "KRAudioSource.h" +#include "KRAmbientZone.h" +#include "KRReverbZone.h" + +using namespace kraken; namespace { @@ -86,3 +102,58 @@ KrResult KrCreateScene(const KrCreateSceneInfo* pCreateSceneInfo) } return sContext->createScene(pCreateSceneInfo); } + +KrResult KrInitNodeInfo(KrNodeInfo* pNodeInfo, KrStructureType nodeType) +{ + pNodeInfo->sType = nodeType; + switch (nodeType) { + case KR_STRUCTURE_TYPE_NODE: + KRNode::InitNodeInfo(pNodeInfo); + break; + case KR_STRUCTURE_TYPE_NODE_CAMERA: + KRCamera::InitNodeInfo(pNodeInfo); + break; + case KR_STRUCTURE_TYPE_NODE_LOD_SET: + KRLODSet::InitNodeInfo(pNodeInfo); + break; + case KR_STRUCTURE_TYPE_NODE_LOD_GROUP: + KRLODGroup::InitNodeInfo(pNodeInfo); + break; + case KR_STRUCTURE_TYPE_NODE_POINT_LIGHT: + KRPointLight::InitNodeInfo(pNodeInfo); + break; + case KR_STRUCTURE_TYPE_NODE_DIRECTIONAL_LIGHT: + KRDirectionalLight::InitNodeInfo(pNodeInfo); + break; + case KR_STRUCTURE_TYPE_NODE_SPOT_LIGHT: + KRSpotLight::InitNodeInfo(pNodeInfo); + break; + case KR_STRUCTURE_TYPE_NODE_SPRITE: + KRSprite::InitNodeInfo(pNodeInfo); + break; + case KR_STRUCTURE_TYPE_NODE_MODEL: + KRModel::InitNodeInfo(pNodeInfo); + break; + case KR_STRUCTURE_TYPE_NODE_COLLIDER: + KRCollider::InitNodeInfo(pNodeInfo); + break; + case KR_STRUCTURE_TYPE_NODE_BONE: + KRBone::InitNodeInfo(pNodeInfo); + break; + case KR_STRUCTURE_TYPE_NODE_LOCATOR: + KRLocator::InitNodeInfo(pNodeInfo); + break; + case KR_STRUCTURE_TYPE_NODE_AUDIO_SOURCE: + KRAudioSource::InitNodeInfo(pNodeInfo); + break; + case KR_STRUCTURE_TYPE_NODE_AMBIENT_ZONE: + KRAmbientZone::InitNodeInfo(pNodeInfo); + break; + case KR_STRUCTURE_TYPE_NODE_REVERB_ZONE: + KRReverbZone::InitNodeInfo(pNodeInfo); + break; + default: + return KR_ERROR_INCORRECT_TYPE; + } + return KR_SUCCESS; +} \ No newline at end of file diff --git a/kraken/public/kraken.h b/kraken/public/kraken.h index ec36f0f..28a6edd 100644 --- a/kraken/public/kraken.h +++ b/kraken/public/kraken.h @@ -76,6 +76,7 @@ typedef enum { KR_STRUCTURE_TYPE_NODE_AUDIO_SOURCE, KR_STRUCTURE_TYPE_NODE_AMBIENT_ZONE, KR_STRUCTURE_TYPE_NODE_REVERB_ZONE, + KR_STRUCTURE_TYPE_NODE_MAX_ENUM, KR_STRUCTURE_TYPE_MAX_ENUM = 0x7FFFFFFF } KrStructureType; @@ -146,58 +147,58 @@ typedef struct { kraken::Vector3 rotate_pivot; kraken::Vector3 scale_pivot; union { - struct node { + struct { // KR_STRUCTURE_TYPE_NODE // No additional members - }; - struct camera { + } node; + struct { // KR_STRUCTURE_TYPE_NODE_CAMERA KrResourceMapIndex skybox_texture; - }; - struct lod_set { + } camera; + struct { // KR_STRUCTURE_TYPE_NODE_LOD_SET // No additional members - }; - struct lod_group { + } lod_set; + struct { // KR_STRUCTURE_TYPE_NODE_LOD_GROUP float min_distance; float max_distance; kraken::Vector3 reference_min; kraken::Vector3 reference_max; bool use_world_units; - }; - struct light { + } lod_group; + struct { kraken::Vector3 color; float intensity; float decay_start; float flare_size; float flare_occlusion_size; - KrResourceMapIndex flate_texture; + KrResourceMapIndex flare_texture; bool casts_shadow; bool light_shafts; float dust_particle_density; float dust_particle_size; float dust_particle_intensity; - struct point { + struct { // KR_STRUCTURE_TYPE_NODE_POINT_LIGHT // No additional members - }; - struct directional { + } point; + struct { // KR_STRUCTURE_TYPE_NODE_DIRECTIONAL_LIGHT // No additional members - }; - struct spot { + } directional; + struct { // KR_STRUCTURE_TYPE_NODE_SPOT_LIGHT float inner_angle; float outer_angle; - }; - }; - struct sprite { + } spot; + } light; + struct { // KR_STRUCTURE_TYPE_NODE_SPRITE KrResourceMapIndex texture; float alpha; - }; - struct model { + } sprite; + struct { // KR_STRUCTURE_TYPE_NODE_MODEL float lod_min_coverage; bool receives_shadow; @@ -206,22 +207,22 @@ typedef struct { kraken::Vector3 rim_color; KrResourceMapIndex mesh; KrResourceMapIndex light_map_texture; - }; - struct collider { + } model; + struct { // KR_STRUCTURE_TYPE_NODE_COLLIDER KrResourceMapIndex mesh; uint64_t layer_mask; float audio_occlusion; - }; - struct bone { + } collider; + struct { // KR_STRUCTURE_TYPE_NODE_BONE // No additional members - }; - struct locator { + } bone; + struct { // KR_STRUCTURE_TYPE_NODE_LOCATOR // No additional members - }; - struct audio_source { + } locator; + struct { // KR_STRUCTURE_TYPE_NODE_AUDIO_SOURCE KrResourceMapIndex sample; float gain; @@ -233,21 +234,21 @@ typedef struct { float rolloff_factor; bool enable_obstruction; bool enable_occlusion; - }; - struct ambient_zone { + } audio_source; + struct { // KR_STRUCTURE_TYPE_NODE_AMBIENT_ZONE char* pZoneName; float gradient; float gain; KrResourceMapIndex sample; - }; - struct reverb_zone { + } ambient_zone; + struct { // KR_STRUCTURE_TYPE_NODE_REVERB_ZONE char* pZoneName; float gradient; float gain; KrResourceMapIndex sample; - }; + } reverb_zone; }; } KrNodeInfo; @@ -260,6 +261,7 @@ KrResult KrMapResource(const KrMapResourceInfo* pMapResourceInfo); KrResult KrUnmapResource(const KrUnmapResourceInfo* pUnmapResourceInfo); KrResult KrCreateBundle(const KrCreateBundleInfo* pCreateBundleInfo); KrResult KrMoveToBundle(const KrMoveToBundleInfo* pMoveToBundleInfo); +KrResult KrInitNodeInfo(KrNodeInfo* pNodeInfo, KrStructureType nodeType); KrResult KrCreateScene(const KrCreateSceneInfo* pCreateSceneInfo);