Added standard constructor with just scene and name for KRModel and KRCollider.

Implemented KRNode::createNode, to create nodes declared in KrCreateNodeInfo structs.
Added stub function, KRNode::update to update node attributes from a KrNodeInfo struct.
This commit is contained in:
2022-09-22 23:02:42 -07:00
parent ec65e788e0
commit ad81d58ea8
7 changed files with 99 additions and 6 deletions

View File

@@ -43,7 +43,17 @@ void KRCollider::InitNodeInfo(KrNodeInfo* nodeInfo)
nodeInfo->collider.mesh = -1; 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) KRCollider::KRCollider(KRScene& scene, std::string name)
: KRNode(scene, name)
, m_model(nullptr)
, m_layer_mask(0xffff)
, m_audio_occlusion(1.0f)
{
}
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; m_model_name = model_name;
m_layer_mask = layer_mask; m_layer_mask = layer_mask;

View File

@@ -52,6 +52,7 @@ class KRCollider : public KRNode
public: public:
static void InitNodeInfo(KrNodeInfo* nodeInfo); static void InitNodeInfo(KrNodeInfo* nodeInfo);
KRCollider(KRScene& scene, std::string name);
KRCollider(KRScene& scene, std::string collider_name, std::string model_name, unsigned int layer_mask, float audio_occlusion); KRCollider(KRScene& scene, std::string collider_name, std::string model_name, unsigned int layer_mask, float audio_occlusion);
virtual ~KRCollider(); virtual ~KRCollider();

View File

@@ -793,7 +793,7 @@ KrResult KRContext::createNode(const KrCreateNodeInfo* pCreateNodeInfo)
} }
KRNode* newNode = nullptr; KRNode* newNode = nullptr;
KrResult res = KRNode::createNode(pCreateNodeInfo, &newNode); KrResult res = KRNode::createNode(pCreateNodeInfo, scene, &newNode);
if (res != KR_SUCCESS) { if (res != KR_SUCCESS) {
return res; return res;
} }

View File

@@ -49,7 +49,35 @@ void KRModel::InitNodeInfo(KrNodeInfo* nodeInfo)
nodeInfo->model.rim_power = 0.0f; 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) KRModel::KRModel(KRScene& scene, std::string name)
: KRNode(scene, name)
, m_pLightMap(nullptr)
, m_min_lod_coverage(0.0f)
, m_receivesShadow(true)
, m_faces_camera(false)
, m_rim_color(Vector3::Zero())
, m_rim_power(0.0f)
{
m_boundsCachedMat.c[0] = -1.0f;
m_boundsCachedMat.c[1] = -1.0f;
m_boundsCachedMat.c[2] = -1.0f;
m_boundsCachedMat.c[3] = -1.0f;
m_boundsCachedMat.c[4] = -1.0f;
m_boundsCachedMat.c[5] = -1.0f;
m_boundsCachedMat.c[6] = -1.0f;
m_boundsCachedMat.c[7] = -1.0f;
m_boundsCachedMat.c[8] = -1.0f;
m_boundsCachedMat.c[9] = -1.0f;
m_boundsCachedMat.c[10] = -1.0f;
m_boundsCachedMat.c[11] = -1.0f;
m_boundsCachedMat.c[12] = -1.0f;
m_boundsCachedMat.c[13] = -1.0f;
m_boundsCachedMat.c[14] = -1.0f;
m_boundsCachedMat.c[15] = -1.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_lightMap = light_map;
m_pLightMap = NULL; m_pLightMap = NULL;

View File

@@ -49,6 +49,7 @@ class KRModel : public KRNode
public: public:
static void InitNodeInfo(KrNodeInfo* nodeInfo); static void InitNodeInfo(KrNodeInfo* nodeInfo);
KRModel(KRScene& scene, std::string name);
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); 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(); virtual ~KRModel();

View File

@@ -63,6 +63,11 @@ void KRNode::InitNodeInfo(KrNodeInfo* nodeInfo)
nodeInfo->scale_pivot = Vector3::Zero(); nodeInfo->scale_pivot = Vector3::Zero();
} }
void KRNode::update(const KrNodeInfo* nodeInfo)
{
// TODO - Implement
}
KRNode::KRNode(KRScene& scene, std::string name) : KRContextObject(scene.getContext()) KRNode::KRNode(KRScene& scene, std::string name) : KRContextObject(scene.getContext())
{ {
m_name = name; m_name = name;
@@ -217,9 +222,56 @@ tinyxml2::XMLElement* KRNode::saveXML(tinyxml2::XMLNode* parent)
return e; return e;
} }
KrResult KRNode::createNode(const KrCreateNodeInfo* pCreateNodeInfo, KRNode** node) KrResult KRNode::createNode(const KrCreateNodeInfo* pCreateNodeInfo, KRScene* scene, KRNode** node)
{ {
return KR_ERROR_NOT_IMPLEMENTED; switch (pCreateNodeInfo->node.sType) {
case KR_STRUCTURE_TYPE_NODE_CAMERA:
*node = new KRCamera(*scene, pCreateNodeInfo->node.pName);
break;
case KR_STRUCTURE_TYPE_NODE_LOD_SET:
*node = new KRLODSet(*scene, pCreateNodeInfo->node.pName);
break;
case KR_STRUCTURE_TYPE_NODE_LOD_GROUP:
*node = new KRLODGroup(*scene, pCreateNodeInfo->node.pName);
break;
case KR_STRUCTURE_TYPE_NODE_POINT_LIGHT:
*node = new KRPointLight(*scene, pCreateNodeInfo->node.pName);
break;
case KR_STRUCTURE_TYPE_NODE_DIRECTIONAL_LIGHT:
*node = new KRDirectionalLight(*scene, pCreateNodeInfo->node.pName);
break;
case KR_STRUCTURE_TYPE_NODE_SPOT_LIGHT:
*node = new KRSpotLight(*scene, pCreateNodeInfo->node.pName);
break;
case KR_STRUCTURE_TYPE_NODE_SPRITE:
*node = new KRSprite(*scene, pCreateNodeInfo->node.pName);
break;
case KR_STRUCTURE_TYPE_NODE_MODEL:
*node = new KRModel(*scene, pCreateNodeInfo->node.pName);
break;
case KR_STRUCTURE_TYPE_NODE_COLLIDER:
*node = new KRCollider(*scene, pCreateNodeInfo->node.pName);
break;
case KR_STRUCTURE_TYPE_NODE_BONE:
*node = new KRBone(*scene, pCreateNodeInfo->node.pName);
break;
case KR_STRUCTURE_TYPE_NODE_LOCATOR:
*node = new KRLocator(*scene, pCreateNodeInfo->node.pName);
break;
case KR_STRUCTURE_TYPE_NODE_AUDIO_SOURCE:
*node = new KRAudioSource(*scene, pCreateNodeInfo->node.pName);
break;
case KR_STRUCTURE_TYPE_NODE_AMBIENT_ZONE:
*node = new KRAmbientZone(*scene, pCreateNodeInfo->node.pName);
break;
case KR_STRUCTURE_TYPE_NODE_REVERB_ZONE:
*node = new KRReverbZone(*scene, pCreateNodeInfo->node.pName);
break;
default:
return KR_ERROR_NOT_IMPLEMENTED;
}
(*node)->update(&pCreateNodeInfo->node);
return KR_SUCCESS;
} }
void KRNode::loadXML(tinyxml2::XMLElement* e) void KRNode::loadXML(tinyxml2::XMLElement* e)

View File

@@ -108,6 +108,7 @@ public:
}; };
static void InitNodeInfo(KrNodeInfo* nodeInfo); static void InitNodeInfo(KrNodeInfo* nodeInfo);
virtual void update(const KrNodeInfo* nodeInfo);
KRNode(KRScene& scene, std::string name); KRNode(KRScene& scene, std::string name);
virtual ~KRNode(); virtual ~KRNode();
@@ -115,7 +116,7 @@ public:
virtual tinyxml2::XMLElement* saveXML(tinyxml2::XMLNode* parent); virtual tinyxml2::XMLElement* saveXML(tinyxml2::XMLNode* parent);
static KRNode* LoadXML(KRScene& scene, tinyxml2::XMLElement* e); static KRNode* LoadXML(KRScene& scene, tinyxml2::XMLElement* e);
static KrResult createNode(const KrCreateNodeInfo* pCreateNodeInfo, KRNode** node); static KrResult createNode(const KrCreateNodeInfo* pCreateNodeInfo, KRScene* scene, KRNode** node);
virtual void loadXML(tinyxml2::XMLElement* e); virtual void loadXML(tinyxml2::XMLElement* e);
virtual std::string getElementName(); virtual std::string getElementName();