Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/gameengine/Converter/KX_IpoConvert.cpp')
-rw-r--r--source/gameengine/Converter/KX_IpoConvert.cpp194
1 files changed, 194 insertions, 0 deletions
diff --git a/source/gameengine/Converter/KX_IpoConvert.cpp b/source/gameengine/Converter/KX_IpoConvert.cpp
index 56eda51384b..defcdffb6fc 100644
--- a/source/gameengine/Converter/KX_IpoConvert.cpp
+++ b/source/gameengine/Converter/KX_IpoConvert.cpp
@@ -59,6 +59,7 @@
#include "DNA_lamp_types.h"
#include "DNA_world_types.h"
#include "DNA_camera_types.h"
+#include "DNA_material_types.h"
/* end of blender include block */
#include "KX_IPO_SGController.h"
@@ -66,6 +67,7 @@
#include "KX_CameraIpoSGController.h"
#include "KX_WorldIpoController.h"
#include "KX_ObColorIpoSGController.h"
+#include "KX_MaterialIpoController.h"
#include "SG_Node.h"
@@ -561,3 +563,195 @@ void BL_ConvertWorldIpos(struct World* blenderworld,KX_BlenderSceneConverter *co
}
}
+
+void BL_ConvertMaterialIpos(
+ Material* blendermaterial,
+ KX_GameObject* gameobj,
+ KX_BlenderSceneConverter *converter
+ )
+{
+ if (blendermaterial->ipo) {
+
+ KX_MaterialIpoController* ipocontr = new KX_MaterialIpoController();
+ gameobj->GetSGNode()->AddSGController(ipocontr);
+ ipocontr->SetObject(gameobj->GetSGNode());
+
+ BL_InterpolatorList *ipoList= GetIpoList(blendermaterial->ipo, converter);
+
+
+ ipocontr->m_rgba[0] = blendermaterial->r;
+ ipocontr->m_rgba[1] = blendermaterial->g;
+ ipocontr->m_rgba[2] = blendermaterial->b;
+ ipocontr->m_rgba[3] = blendermaterial->alpha;
+
+ ipocontr->m_specrgb[0] = blendermaterial->specr;
+ ipocontr->m_specrgb[1] = blendermaterial->specg;
+ ipocontr->m_specrgb[2] = blendermaterial->specb;
+
+ ipocontr->m_hard = blendermaterial->har;
+ ipocontr->m_spec = blendermaterial->spec;
+ ipocontr->m_ref = blendermaterial->ref;
+ ipocontr->m_emit = blendermaterial->emit;
+ ipocontr->m_alpha = blendermaterial->alpha;
+ KX_IScalarInterpolator *ipo;
+
+ // --
+ ipo = ipoList->GetScalarInterpolator(MA_COL_R);
+ if (ipo) {
+ if (!ipocontr) {
+ ipocontr = new KX_MaterialIpoController();
+ gameobj->GetSGNode()->AddSGController(ipocontr);
+ ipocontr->SetObject(gameobj->GetSGNode());
+ }
+ KX_IInterpolator *interpolator =
+ new KX_ScalarInterpolator(
+ &ipocontr->m_rgba[0],
+ ipo);
+ ipocontr->AddInterpolator(interpolator);
+ }
+
+ ipo = ipoList->GetScalarInterpolator(MA_COL_G);
+ if (ipo) {
+ if (!ipocontr) {
+ ipocontr = new KX_MaterialIpoController();
+ gameobj->GetSGNode()->AddSGController(ipocontr);
+ ipocontr->SetObject(gameobj->GetSGNode());
+ }
+ KX_IInterpolator *interpolator =
+ new KX_ScalarInterpolator(
+ &ipocontr->m_rgba[1],
+ ipo);
+ ipocontr->AddInterpolator(interpolator);
+ }
+
+ ipo = ipoList->GetScalarInterpolator(MA_COL_B);
+ if (ipo) {
+ if (!ipocontr) {
+ ipocontr = new KX_MaterialIpoController();
+ gameobj->GetSGNode()->AddSGController(ipocontr);
+ ipocontr->SetObject(gameobj->GetSGNode());
+ }
+ KX_IInterpolator *interpolator =
+ new KX_ScalarInterpolator(
+ &ipocontr->m_rgba[2],
+ ipo);
+ ipocontr->AddInterpolator(interpolator);
+ }
+
+ ipo = ipoList->GetScalarInterpolator(MA_ALPHA);
+ if (ipo) {
+ if (!ipocontr) {
+ ipocontr = new KX_MaterialIpoController();
+ gameobj->GetSGNode()->AddSGController(ipocontr);
+ ipocontr->SetObject(gameobj->GetSGNode());
+ }
+ KX_IInterpolator *interpolator =
+ new KX_ScalarInterpolator(
+ &ipocontr->m_rgba[3],
+ ipo);
+ ipocontr->AddInterpolator(interpolator);
+ }
+ // --
+
+ ipo = ipoList->GetScalarInterpolator(MA_SPEC_R );
+ if (ipo) {
+ if (!ipocontr) {
+ ipocontr = new KX_MaterialIpoController();
+ gameobj->GetSGNode()->AddSGController(ipocontr);
+ ipocontr->SetObject(gameobj->GetSGNode());
+ }
+ KX_IInterpolator *interpolator =
+ new KX_ScalarInterpolator(
+ &ipocontr->m_specrgb[0],
+ ipo);
+ ipocontr->AddInterpolator(interpolator);
+ }
+
+ ipo = ipoList->GetScalarInterpolator(MA_SPEC_G);
+ if (ipo) {
+ if (!ipocontr) {
+ ipocontr = new KX_MaterialIpoController();
+ gameobj->GetSGNode()->AddSGController(ipocontr);
+ ipocontr->SetObject(gameobj->GetSGNode());
+ }
+ KX_IInterpolator *interpolator =
+ new KX_ScalarInterpolator(
+ &ipocontr->m_specrgb[1],
+ ipo);
+ ipocontr->AddInterpolator(interpolator);
+ }
+
+ ipo = ipoList->GetScalarInterpolator(MA_SPEC_B);
+ if (ipo) {
+ if (!ipocontr) {
+ ipocontr = new KX_MaterialIpoController();
+ gameobj->GetSGNode()->AddSGController(ipocontr);
+ ipocontr->SetObject(gameobj->GetSGNode());
+ }
+ KX_IInterpolator *interpolator =
+ new KX_ScalarInterpolator(
+ &ipocontr->m_specrgb[2],
+ ipo);
+ ipocontr->AddInterpolator(interpolator);
+ }
+
+ // --
+ ipo = ipoList->GetScalarInterpolator(MA_HARD);
+ if (ipo) {
+ if (!ipocontr) {
+ ipocontr = new KX_MaterialIpoController();
+ gameobj->GetSGNode()->AddSGController(ipocontr);
+ ipocontr->SetObject(gameobj->GetSGNode());
+ }
+ KX_IInterpolator *interpolator =
+ new KX_ScalarInterpolator(
+ &ipocontr->m_hard,
+ ipo);
+ ipocontr->AddInterpolator(interpolator);
+ }
+
+ ipo = ipoList->GetScalarInterpolator(MA_SPEC);
+ if (ipo) {
+ if (!ipocontr) {
+ ipocontr = new KX_MaterialIpoController();
+ gameobj->GetSGNode()->AddSGController(ipocontr);
+ ipocontr->SetObject(gameobj->GetSGNode());
+ }
+ KX_IInterpolator *interpolator =
+ new KX_ScalarInterpolator(
+ &ipocontr->m_spec,
+ ipo);
+ ipocontr->AddInterpolator(interpolator);
+ }
+
+
+ ipo = ipoList->GetScalarInterpolator(MA_REF);
+ if (ipo) {
+ if (!ipocontr) {
+ ipocontr = new KX_MaterialIpoController();
+ gameobj->GetSGNode()->AddSGController(ipocontr);
+ ipocontr->SetObject(gameobj->GetSGNode());
+ }
+ KX_IInterpolator *interpolator =
+ new KX_ScalarInterpolator(
+ &ipocontr->m_ref,
+ ipo);
+ ipocontr->AddInterpolator(interpolator);
+ }
+
+ ipo = ipoList->GetScalarInterpolator(MA_EMIT);
+ if (ipo) {
+ if (!ipocontr) {
+ ipocontr = new KX_MaterialIpoController();
+ gameobj->GetSGNode()->AddSGController(ipocontr);
+ ipocontr->SetObject(gameobj->GetSGNode());
+ }
+ KX_IInterpolator *interpolator =
+ new KX_ScalarInterpolator(
+ &ipocontr->m_emit,
+ ipo);
+ ipocontr->AddInterpolator(interpolator);
+ }
+ }
+}
+