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;
}
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_layer_mask = layer_mask;

View File

@@ -52,6 +52,7 @@ class KRCollider : public KRNode
public:
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);
virtual ~KRCollider();

View File

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

View File

@@ -49,7 +49,35 @@ void KRModel::InitNodeInfo(KrNodeInfo* nodeInfo)
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_pLightMap = NULL;

View File

@@ -49,6 +49,7 @@ class KRModel : public KRNode
public:
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);
virtual ~KRModel();

View File

@@ -63,6 +63,11 @@ void KRNode::InitNodeInfo(KrNodeInfo* nodeInfo)
nodeInfo->scale_pivot = Vector3::Zero();
}
void KRNode::update(const KrNodeInfo* nodeInfo)
{
// TODO - Implement
}
KRNode::KRNode(KRScene& scene, std::string name) : KRContextObject(scene.getContext())
{
m_name = name;
@@ -217,10 +222,57 @@ tinyxml2::XMLElement* KRNode::saveXML(tinyxml2::XMLNode* parent)
return e;
}
KrResult KRNode::createNode(const KrCreateNodeInfo* pCreateNodeInfo, KRNode** node)
KrResult KRNode::createNode(const KrCreateNodeInfo* pCreateNodeInfo, KRScene* scene, KRNode** node)
{
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)
{

View File

@@ -108,6 +108,7 @@ public:
};
static void InitNodeInfo(KrNodeInfo* nodeInfo);
virtual void update(const KrNodeInfo* nodeInfo);
KRNode(KRScene& scene, std::string name);
virtual ~KRNode();
@@ -115,7 +116,7 @@ public:
virtual tinyxml2::XMLElement* saveXML(tinyxml2::XMLNode* parent);
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 std::string getElementName();