forked from bartvdbraak/blender
Game Engine working with the new animation system for Ipos (IpoActuator)
FCurves are used for animation evaluation so FCurve modifiers work :). Tested with object location and object color animation. Armature and Shape Keys next.
This commit is contained in:
parent
e6aa552e25
commit
2773464561
@ -27,35 +27,30 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "KX_BlenderScalarInterpolator.h"
|
#include "KX_BlenderScalarInterpolator.h"
|
||||||
|
#include "stdio.h"
|
||||||
|
#include <cstring>
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#include "DNA_ipo_types.h"
|
#include "DNA_ipo_types.h"
|
||||||
#include "BKE_ipo.h"
|
#include "DNA_action_types.h"
|
||||||
|
#include "DNA_anim_types.h"
|
||||||
|
#include "BKE_fcurve.h"
|
||||||
}
|
}
|
||||||
|
|
||||||
static const int BL_MAX_CHANNELS = 32;
|
|
||||||
|
|
||||||
float BL_ScalarInterpolator::GetValue(float currentTime) const {
|
float BL_ScalarInterpolator::GetValue(float currentTime) const {
|
||||||
return 0; // XXX IPO_GetFloatValue(m_blender_ipo, m_channel, currentTime);
|
// XXX 2.4x IPO_GetFloatValue(m_blender_adt, m_channel, currentTime);
|
||||||
|
return evaluate_fcurve(m_fcu, currentTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BL_InterpolatorList::BL_InterpolatorList(struct AnimData *adt) {
|
||||||
|
for(FCurve *fcu= (FCurve *)adt->action->curves.first; fcu; fcu= (FCurve *)fcu->next) {
|
||||||
BL_InterpolatorList::BL_InterpolatorList(struct Ipo *ipo) {
|
if(fcu->rna_path) {
|
||||||
IPO_Channel channels[BL_MAX_CHANNELS];
|
BL_ScalarInterpolator *new_ipo = new BL_ScalarInterpolator(fcu);
|
||||||
|
|
||||||
int num_channels = 0; // XXX IPO_GetChannels(ipo, channels);
|
|
||||||
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i != num_channels; ++i) {
|
|
||||||
BL_ScalarInterpolator *new_ipo =
|
|
||||||
new BL_ScalarInterpolator(ipo, channels[i]);
|
|
||||||
|
|
||||||
//assert(new_ipo);
|
//assert(new_ipo);
|
||||||
push_back(new_ipo);
|
push_back(new_ipo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
BL_InterpolatorList::~BL_InterpolatorList() {
|
BL_InterpolatorList::~BL_InterpolatorList() {
|
||||||
BL_InterpolatorList::iterator i;
|
BL_InterpolatorList::iterator i;
|
||||||
@ -64,15 +59,13 @@ BL_InterpolatorList::~BL_InterpolatorList() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
KX_IScalarInterpolator *BL_InterpolatorList::GetScalarInterpolator(char *rna_path, int array_index) {
|
||||||
KX_IScalarInterpolator *BL_InterpolatorList::GetScalarInterpolator(BL_IpoChannel channel) {
|
for(BL_InterpolatorList::iterator i = begin(); (i != end()) ; i++ )
|
||||||
BL_InterpolatorList::iterator i = begin();
|
{
|
||||||
while (!(i == end()) &&
|
FCurve *fcu= (static_cast<BL_ScalarInterpolator *>(*i))->GetFCurve();
|
||||||
(static_cast<BL_ScalarInterpolator *>(*i))->GetChannel() !=
|
if(array_index==fcu->array_index && strcmp(rna_path, fcu->rna_path)==0)
|
||||||
channel) {
|
return *i;
|
||||||
++i;
|
}
|
||||||
}
|
return NULL;
|
||||||
|
|
||||||
return (i == end()) ? 0 : *i;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,29 +38,26 @@ typedef unsigned short BL_IpoChannel;
|
|||||||
class BL_ScalarInterpolator : public KX_IScalarInterpolator {
|
class BL_ScalarInterpolator : public KX_IScalarInterpolator {
|
||||||
public:
|
public:
|
||||||
BL_ScalarInterpolator() {} // required for use in STL list
|
BL_ScalarInterpolator() {} // required for use in STL list
|
||||||
BL_ScalarInterpolator(struct Ipo *ipo, BL_IpoChannel channel) :
|
BL_ScalarInterpolator(struct FCurve* fcu) :
|
||||||
m_blender_ipo(ipo),
|
m_fcu(fcu)
|
||||||
m_channel(channel)
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
virtual ~BL_ScalarInterpolator() {}
|
virtual ~BL_ScalarInterpolator() {}
|
||||||
|
|
||||||
virtual float GetValue(float currentTime) const;
|
virtual float GetValue(float currentTime) const;
|
||||||
|
struct FCurve *GetFCurve() { return m_fcu;};
|
||||||
BL_IpoChannel GetChannel() const { return m_channel; }
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
struct Ipo *m_blender_ipo;
|
struct FCurve *m_fcu;
|
||||||
BL_IpoChannel m_channel;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class BL_InterpolatorList : public std::vector<KX_IScalarInterpolator *> {
|
class BL_InterpolatorList : public std::vector<KX_IScalarInterpolator *> {
|
||||||
public:
|
public:
|
||||||
BL_InterpolatorList(struct Ipo *ipo);
|
BL_InterpolatorList(struct AnimData *adt);
|
||||||
~BL_InterpolatorList();
|
~BL_InterpolatorList();
|
||||||
|
|
||||||
KX_IScalarInterpolator *GetScalarInterpolator(BL_IpoChannel channel);
|
KX_IScalarInterpolator *GetScalarInterpolator(char *rna_path, int array_index);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //__KX_SCALARINTERPOLATOR_H
|
#endif //__KX_SCALARINTERPOLATOR_H
|
||||||
|
@ -113,11 +113,11 @@ KX_BlenderSceneConverter::~KX_BlenderSceneConverter()
|
|||||||
// delete sumoshapes
|
// delete sumoshapes
|
||||||
|
|
||||||
|
|
||||||
int numipolists = m_map_blender_to_gameipolist.size();
|
int numAdtLists = m_map_blender_to_gameAdtList.size();
|
||||||
for (i=0; i<numipolists; i++) {
|
for (i=0; i<numAdtLists; i++) {
|
||||||
BL_InterpolatorList *ipoList= *m_map_blender_to_gameipolist.at(i);
|
BL_InterpolatorList *adtList= *m_map_blender_to_gameAdtList.at(i);
|
||||||
|
|
||||||
delete (ipoList);
|
delete (adtList);
|
||||||
}
|
}
|
||||||
|
|
||||||
vector<pair<KX_Scene*,KX_WorldInfo*> >::iterator itw = m_worldinfos.begin();
|
vector<pair<KX_Scene*,KX_WorldInfo*> >::iterator itw = m_worldinfos.begin();
|
||||||
@ -573,18 +573,18 @@ void KX_BlenderSceneConverter::RegisterPolyMaterial(RAS_IPolyMaterial *polymat)
|
|||||||
|
|
||||||
|
|
||||||
void KX_BlenderSceneConverter::RegisterInterpolatorList(
|
void KX_BlenderSceneConverter::RegisterInterpolatorList(
|
||||||
BL_InterpolatorList *ipoList,
|
BL_InterpolatorList *adtList,
|
||||||
struct Ipo *for_ipo)
|
struct AnimData *for_adt)
|
||||||
{
|
{
|
||||||
m_map_blender_to_gameipolist.insert(CHashedPtr(for_ipo), ipoList);
|
m_map_blender_to_gameAdtList.insert(CHashedPtr(for_adt), adtList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
BL_InterpolatorList *KX_BlenderSceneConverter::FindInterpolatorList(
|
BL_InterpolatorList *KX_BlenderSceneConverter::FindInterpolatorList(
|
||||||
struct Ipo *for_ipo)
|
struct AnimData *for_adt)
|
||||||
{
|
{
|
||||||
BL_InterpolatorList **listp = m_map_blender_to_gameipolist[CHashedPtr(for_ipo)];
|
BL_InterpolatorList **listp = m_map_blender_to_gameAdtList[CHashedPtr(for_adt)];
|
||||||
|
|
||||||
return listp?*listp:NULL;
|
return listp?*listp:NULL;
|
||||||
}
|
}
|
||||||
|
@ -65,7 +65,7 @@ class KX_BlenderSceneConverter : public KX_ISceneConverter
|
|||||||
GEN_Map<CHashedPtr,SCA_IActuator*> m_map_blender_to_gameactuator;
|
GEN_Map<CHashedPtr,SCA_IActuator*> m_map_blender_to_gameactuator;
|
||||||
GEN_Map<CHashedPtr,SCA_IController*> m_map_blender_to_gamecontroller;
|
GEN_Map<CHashedPtr,SCA_IController*> m_map_blender_to_gamecontroller;
|
||||||
|
|
||||||
GEN_Map<CHashedPtr,BL_InterpolatorList*> m_map_blender_to_gameipolist;
|
GEN_Map<CHashedPtr,BL_InterpolatorList*> m_map_blender_to_gameAdtList;
|
||||||
|
|
||||||
Main* m_maggie;
|
Main* m_maggie;
|
||||||
|
|
||||||
@ -121,8 +121,8 @@ public:
|
|||||||
|
|
||||||
void RegisterBlenderMaterial(BL_Material *mat);
|
void RegisterBlenderMaterial(BL_Material *mat);
|
||||||
|
|
||||||
void RegisterInterpolatorList(BL_InterpolatorList *ipoList, struct Ipo *for_ipo);
|
void RegisterInterpolatorList(BL_InterpolatorList *adtList, struct AnimData *for_adt);
|
||||||
BL_InterpolatorList *FindInterpolatorList(struct Ipo *for_ipo);
|
BL_InterpolatorList *FindInterpolatorList(struct AnimData *for_adt);
|
||||||
|
|
||||||
void RegisterGameActuator(SCA_IActuator *act, struct bActuator *for_actuator);
|
void RegisterGameActuator(SCA_IActuator *act, struct bActuator *for_actuator);
|
||||||
SCA_IActuator *FindGameActuator(struct bActuator *for_actuator);
|
SCA_IActuator *FindGameActuator(struct bActuator *for_actuator);
|
||||||
|
@ -71,20 +71,20 @@
|
|||||||
|
|
||||||
#include "STR_HashedString.h"
|
#include "STR_HashedString.h"
|
||||||
|
|
||||||
static BL_InterpolatorList *GetIpoList(struct Ipo *for_ipo, KX_BlenderSceneConverter *converter) {
|
static BL_InterpolatorList *GetAdtList(struct AnimData *for_adt, KX_BlenderSceneConverter *converter) {
|
||||||
BL_InterpolatorList *ipoList= converter->FindInterpolatorList(for_ipo);
|
BL_InterpolatorList *adtList= converter->FindInterpolatorList(for_adt);
|
||||||
|
|
||||||
if (!ipoList) {
|
if (!adtList) {
|
||||||
ipoList = new BL_InterpolatorList(for_ipo);
|
adtList = new BL_InterpolatorList(for_adt);
|
||||||
converter->RegisterInterpolatorList(ipoList, for_ipo);
|
converter->RegisterInterpolatorList(adtList, for_adt);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ipoList;
|
return adtList;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BL_ConvertIpos(struct Object* blenderobject,KX_GameObject* gameobj,KX_BlenderSceneConverter *converter)
|
void BL_ConvertIpos(struct Object* blenderobject,KX_GameObject* gameobj,KX_BlenderSceneConverter *converter)
|
||||||
{
|
{
|
||||||
if (blenderobject->ipo) {
|
if (blenderobject->adt) {
|
||||||
|
|
||||||
KX_IpoSGController* ipocontr = new KX_IpoSGController();
|
KX_IpoSGController* ipocontr = new KX_IpoSGController();
|
||||||
gameobj->GetSGNode()->AddSGController(ipocontr);
|
gameobj->GetSGNode()->AddSGController(ipocontr);
|
||||||
@ -120,271 +120,79 @@ void BL_ConvertIpos(struct Object* blenderobject,KX_GameObject* gameobj,KX_Blend
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
BL_InterpolatorList *ipoList= GetIpoList(blenderobject->ipo, converter);
|
BL_InterpolatorList *adtList= GetAdtList(blenderobject->adt, converter);
|
||||||
|
|
||||||
// For each active channel in the ipoList add an
|
// For each active channel in the adtList add an
|
||||||
// interpolator to the game object.
|
// interpolator to the game object.
|
||||||
|
|
||||||
KX_IScalarInterpolator *ipo;
|
KX_IInterpolator *interpolator;
|
||||||
|
KX_IScalarInterpolator *interp;
|
||||||
|
|
||||||
ipo = ipoList->GetScalarInterpolator(OB_LOC_X);
|
for(int i=0; i<3; i++) {
|
||||||
if (ipo) {
|
if ((interp = adtList->GetScalarInterpolator("location", i))) {
|
||||||
KX_IInterpolator *interpolator =
|
interpolator= new KX_ScalarInterpolator(&(ipocontr->GetIPOTransform().GetPosition()[i]), interp);
|
||||||
new KX_ScalarInterpolator(
|
|
||||||
&(ipocontr->GetIPOTransform().GetPosition()[0]),
|
|
||||||
ipo);
|
|
||||||
ipocontr->AddInterpolator(interpolator);
|
ipocontr->AddInterpolator(interpolator);
|
||||||
ipocontr->SetIPOChannelActive(OB_LOC_X, true);
|
ipocontr->SetIPOChannelActive(OB_LOC_X+i, true);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ipo = ipoList->GetScalarInterpolator(OB_LOC_Y);
|
|
||||||
if (ipo) {
|
|
||||||
KX_IInterpolator *interpolator =
|
|
||||||
new KX_ScalarInterpolator(
|
|
||||||
&(ipocontr->GetIPOTransform().GetPosition()[1]),
|
|
||||||
ipo);
|
|
||||||
ipocontr->AddInterpolator(interpolator);
|
|
||||||
ipocontr->SetIPOChannelActive(OB_LOC_Y, true);
|
|
||||||
}
|
}
|
||||||
|
for(int i=0; i<3; i++) {
|
||||||
ipo = ipoList->GetScalarInterpolator(OB_LOC_Z);
|
if ((interp = adtList->GetScalarInterpolator("delta_location", i))) {
|
||||||
if (ipo) {
|
interpolator= new KX_ScalarInterpolator(&(ipocontr->GetIPOTransform().GetDeltaPosition()[i]), interp);
|
||||||
KX_IInterpolator *interpolator =
|
|
||||||
new KX_ScalarInterpolator(
|
|
||||||
&(ipocontr->GetIPOTransform().GetPosition()[2]),
|
|
||||||
ipo);
|
|
||||||
ipocontr->AddInterpolator(interpolator);
|
ipocontr->AddInterpolator(interpolator);
|
||||||
ipocontr->SetIPOChannelActive(OB_LOC_Z, true);
|
ipocontr->SetIPOChannelActive(OB_DLOC_X+i, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Master the art of cut & paste programming...
|
|
||||||
|
|
||||||
ipo = ipoList->GetScalarInterpolator(OB_DLOC_X);
|
|
||||||
if (ipo) {
|
|
||||||
KX_IInterpolator *interpolator =
|
|
||||||
new KX_ScalarInterpolator(
|
|
||||||
&(ipocontr->GetIPOTransform().GetDeltaPosition()[0]),
|
|
||||||
ipo);
|
|
||||||
ipocontr->AddInterpolator(interpolator);
|
|
||||||
ipocontr->SetIPOChannelActive(OB_DLOC_X, true);
|
|
||||||
}
|
}
|
||||||
|
for(int i=0; i<3; i++) {
|
||||||
ipo = ipoList->GetScalarInterpolator(OB_DLOC_Y);
|
if ((interp = adtList->GetScalarInterpolator("rotation", i))) {
|
||||||
if (ipo) {
|
interpolator= new KX_ScalarInterpolator(&(ipocontr->GetIPOTransform().GetEulerAngles()[i]), interp);
|
||||||
KX_IInterpolator *interpolator =
|
|
||||||
new KX_ScalarInterpolator(
|
|
||||||
&(ipocontr->GetIPOTransform().GetDeltaPosition()[1]),
|
|
||||||
ipo);
|
|
||||||
ipocontr->AddInterpolator(interpolator);
|
ipocontr->AddInterpolator(interpolator);
|
||||||
ipocontr->SetIPOChannelActive(OB_DLOC_Y, true);
|
ipocontr->SetIPOChannelActive(OB_ROT_X+i, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
ipo = ipoList->GetScalarInterpolator(OB_DLOC_Z);
|
|
||||||
if (ipo) {
|
|
||||||
KX_IInterpolator *interpolator =
|
|
||||||
new KX_ScalarInterpolator(
|
|
||||||
&(ipocontr->GetIPOTransform().GetDeltaPosition()[2]),
|
|
||||||
ipo);
|
|
||||||
ipocontr->AddInterpolator(interpolator);
|
|
||||||
ipocontr->SetIPOChannelActive(OB_DLOC_Z, true);
|
|
||||||
}
|
}
|
||||||
|
for(int i=0; i<3; i++) {
|
||||||
// Explore the finesse of reuse and slight modification
|
if ((interp = adtList->GetScalarInterpolator("delta_rotation", i))) {
|
||||||
|
interpolator= new KX_ScalarInterpolator(&(ipocontr->GetIPOTransform().GetDeltaEulerAngles()[i]), interp);
|
||||||
ipo = ipoList->GetScalarInterpolator(OB_ROT_X);
|
|
||||||
if (ipo) {
|
|
||||||
KX_IInterpolator *interpolator =
|
|
||||||
new KX_ScalarInterpolator(
|
|
||||||
&(ipocontr->GetIPOTransform().GetEulerAngles()[0]),
|
|
||||||
ipo);
|
|
||||||
ipocontr->AddInterpolator(interpolator);
|
ipocontr->AddInterpolator(interpolator);
|
||||||
ipocontr->SetIPOChannelActive(OB_ROT_X, true);
|
ipocontr->SetIPOChannelActive(OB_DROT_X+i, true);
|
||||||
}
|
}
|
||||||
ipo = ipoList->GetScalarInterpolator(OB_ROT_Y);
|
|
||||||
if (ipo) {
|
|
||||||
KX_IInterpolator *interpolator =
|
|
||||||
new KX_ScalarInterpolator(
|
|
||||||
&(ipocontr->GetIPOTransform().GetEulerAngles()[1]),
|
|
||||||
ipo);
|
|
||||||
ipocontr->AddInterpolator(interpolator);
|
|
||||||
ipocontr->SetIPOChannelActive(OB_ROT_Y, true);
|
|
||||||
}
|
}
|
||||||
ipo = ipoList->GetScalarInterpolator(OB_ROT_Z);
|
for(int i=0; i<3; i++) {
|
||||||
if (ipo) {
|
if ((interp = adtList->GetScalarInterpolator("scale", i))) {
|
||||||
KX_IInterpolator *interpolator =
|
interpolator= new KX_ScalarInterpolator(&(ipocontr->GetIPOTransform().GetScaling()[i]), interp);
|
||||||
new KX_ScalarInterpolator(
|
|
||||||
&(ipocontr->GetIPOTransform().GetEulerAngles()[2]),
|
|
||||||
ipo);
|
|
||||||
ipocontr->AddInterpolator(interpolator);
|
ipocontr->AddInterpolator(interpolator);
|
||||||
ipocontr->SetIPOChannelActive(OB_ROT_Z, true);
|
ipocontr->SetIPOChannelActive(OB_SIZE_X+i, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Hmmm, the need for a macro comes to mind...
|
|
||||||
|
|
||||||
ipo = ipoList->GetScalarInterpolator(OB_DROT_X);
|
|
||||||
if (ipo) {
|
|
||||||
KX_IInterpolator *interpolator =
|
|
||||||
new KX_ScalarInterpolator(
|
|
||||||
&(ipocontr->GetIPOTransform().GetDeltaEulerAngles()[0]),
|
|
||||||
ipo);
|
|
||||||
ipocontr->AddInterpolator(interpolator);
|
|
||||||
ipocontr->SetIPOChannelActive(OB_DROT_X, true);
|
|
||||||
}
|
}
|
||||||
ipo = ipoList->GetScalarInterpolator(OB_DROT_Y);
|
for(int i=0; i<3; i++) {
|
||||||
if (ipo) {
|
if ((interp = adtList->GetScalarInterpolator("delta_scale", i))) {
|
||||||
KX_IInterpolator *interpolator =
|
interpolator= new KX_ScalarInterpolator(&(ipocontr->GetIPOTransform().GetDeltaScaling()[i]), interp);
|
||||||
new KX_ScalarInterpolator(
|
|
||||||
&(ipocontr->GetIPOTransform().GetDeltaEulerAngles()[1]),
|
|
||||||
ipo);
|
|
||||||
ipocontr->AddInterpolator(interpolator);
|
ipocontr->AddInterpolator(interpolator);
|
||||||
ipocontr->SetIPOChannelActive(OB_DROT_Y, true);
|
ipocontr->SetIPOChannelActive(OB_DSIZE_X+i, true);
|
||||||
}
|
}
|
||||||
ipo = ipoList->GetScalarInterpolator(OB_DROT_Z);
|
|
||||||
if (ipo) {
|
|
||||||
KX_IInterpolator *interpolator =
|
|
||||||
new KX_ScalarInterpolator(
|
|
||||||
&(ipocontr->GetIPOTransform().GetDeltaEulerAngles()[2]),
|
|
||||||
ipo);
|
|
||||||
ipocontr->AddInterpolator(interpolator);
|
|
||||||
ipocontr->SetIPOChannelActive(OB_DROT_Z, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Hang on, almost there...
|
|
||||||
|
|
||||||
ipo = ipoList->GetScalarInterpolator(OB_SIZE_X);
|
|
||||||
if (ipo) {
|
|
||||||
KX_IInterpolator *interpolator =
|
|
||||||
new KX_ScalarInterpolator(
|
|
||||||
&(ipocontr->GetIPOTransform().GetScaling()[0]),
|
|
||||||
ipo);
|
|
||||||
ipocontr->AddInterpolator(interpolator);
|
|
||||||
ipocontr->SetIPOChannelActive(OB_SIZE_X, true);
|
|
||||||
}
|
|
||||||
ipo = ipoList->GetScalarInterpolator(OB_SIZE_Y);
|
|
||||||
if (ipo) {
|
|
||||||
KX_IInterpolator *interpolator =
|
|
||||||
new KX_ScalarInterpolator(
|
|
||||||
&(ipocontr->GetIPOTransform().GetScaling()[1]),
|
|
||||||
ipo);
|
|
||||||
ipocontr->AddInterpolator(interpolator);
|
|
||||||
ipocontr->SetIPOChannelActive(OB_SIZE_Y, true);
|
|
||||||
}
|
|
||||||
ipo = ipoList->GetScalarInterpolator(OB_SIZE_Z);
|
|
||||||
if (ipo) {
|
|
||||||
KX_IInterpolator *interpolator =
|
|
||||||
new KX_ScalarInterpolator(
|
|
||||||
&(ipocontr->GetIPOTransform().GetScaling()[2]),
|
|
||||||
ipo);
|
|
||||||
ipocontr->AddInterpolator(interpolator);
|
|
||||||
ipocontr->SetIPOChannelActive(OB_SIZE_Z, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
// The last few...
|
|
||||||
|
|
||||||
ipo = ipoList->GetScalarInterpolator(OB_DSIZE_X);
|
|
||||||
if (ipo) {
|
|
||||||
KX_IInterpolator *interpolator =
|
|
||||||
new KX_ScalarInterpolator(
|
|
||||||
&(ipocontr->GetIPOTransform().GetDeltaScaling()[0]),
|
|
||||||
ipo);
|
|
||||||
ipocontr->AddInterpolator(interpolator);
|
|
||||||
ipocontr->SetIPOChannelActive(OB_DSIZE_X, true);
|
|
||||||
}
|
|
||||||
ipo = ipoList->GetScalarInterpolator(OB_DSIZE_Y);
|
|
||||||
if (ipo) {
|
|
||||||
KX_IInterpolator *interpolator =
|
|
||||||
new KX_ScalarInterpolator(
|
|
||||||
&(ipocontr->GetIPOTransform().GetDeltaScaling()[1]),
|
|
||||||
ipo);
|
|
||||||
ipocontr->AddInterpolator(interpolator);
|
|
||||||
ipocontr->SetIPOChannelActive(OB_DSIZE_Y, true);
|
|
||||||
}
|
|
||||||
ipo = ipoList->GetScalarInterpolator(OB_DSIZE_Z);
|
|
||||||
if (ipo) {
|
|
||||||
KX_IInterpolator *interpolator =
|
|
||||||
new KX_ScalarInterpolator(
|
|
||||||
&(ipocontr->GetIPOTransform().GetDeltaScaling()[2]),
|
|
||||||
ipo);
|
|
||||||
ipocontr->AddInterpolator(interpolator);
|
|
||||||
ipocontr->SetIPOChannelActive(OB_DSIZE_Z, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
KX_ObColorIpoSGController* ipocontr_obcol=NULL;
|
KX_ObColorIpoSGController* ipocontr_obcol=NULL;
|
||||||
|
|
||||||
ipo = ipoList->GetScalarInterpolator(OB_COL_R);
|
for(int i=0; i<4; i++) {
|
||||||
if (ipo)
|
if (interp = adtList->GetScalarInterpolator("color", i)) {
|
||||||
{
|
if (!ipocontr_obcol) {
|
||||||
if (!ipocontr_obcol)
|
|
||||||
{
|
|
||||||
ipocontr_obcol = new KX_ObColorIpoSGController();
|
ipocontr_obcol = new KX_ObColorIpoSGController();
|
||||||
gameobj->GetSGNode()->AddSGController(ipocontr_obcol);
|
gameobj->GetSGNode()->AddSGController(ipocontr_obcol);
|
||||||
ipocontr_obcol->SetObject(gameobj->GetSGNode());
|
ipocontr_obcol->SetObject(gameobj->GetSGNode());
|
||||||
}
|
}
|
||||||
KX_IInterpolator *interpolator =
|
interpolator= new KX_ScalarInterpolator(&ipocontr_obcol->m_rgba[i], interp);
|
||||||
new KX_ScalarInterpolator(
|
|
||||||
&ipocontr_obcol->m_rgba[0],
|
|
||||||
ipo);
|
|
||||||
ipocontr_obcol->AddInterpolator(interpolator);
|
|
||||||
}
|
|
||||||
ipo = ipoList->GetScalarInterpolator(OB_COL_G);
|
|
||||||
if (ipo)
|
|
||||||
{
|
|
||||||
if (!ipocontr_obcol)
|
|
||||||
{
|
|
||||||
ipocontr_obcol = new KX_ObColorIpoSGController();
|
|
||||||
gameobj->GetSGNode()->AddSGController(ipocontr_obcol);
|
|
||||||
ipocontr_obcol->SetObject(gameobj->GetSGNode());
|
|
||||||
}
|
|
||||||
KX_IInterpolator *interpolator =
|
|
||||||
new KX_ScalarInterpolator(
|
|
||||||
&ipocontr_obcol->m_rgba[1],
|
|
||||||
ipo);
|
|
||||||
ipocontr_obcol->AddInterpolator(interpolator);
|
|
||||||
}
|
|
||||||
ipo = ipoList->GetScalarInterpolator(OB_COL_B);
|
|
||||||
if (ipo)
|
|
||||||
{
|
|
||||||
if (!ipocontr_obcol)
|
|
||||||
{
|
|
||||||
ipocontr_obcol = new KX_ObColorIpoSGController();
|
|
||||||
gameobj->GetSGNode()->AddSGController(ipocontr_obcol);
|
|
||||||
ipocontr_obcol->SetObject(gameobj->GetSGNode());
|
|
||||||
}
|
|
||||||
KX_IInterpolator *interpolator =
|
|
||||||
new KX_ScalarInterpolator(
|
|
||||||
&ipocontr_obcol->m_rgba[2],
|
|
||||||
ipo);
|
|
||||||
ipocontr_obcol->AddInterpolator(interpolator);
|
|
||||||
}
|
|
||||||
ipo = ipoList->GetScalarInterpolator(OB_COL_A);
|
|
||||||
if (ipo)
|
|
||||||
{
|
|
||||||
if (!ipocontr_obcol)
|
|
||||||
{
|
|
||||||
ipocontr_obcol = new KX_ObColorIpoSGController();
|
|
||||||
gameobj->GetSGNode()->AddSGController(ipocontr_obcol);
|
|
||||||
ipocontr_obcol->SetObject(gameobj->GetSGNode());
|
|
||||||
}
|
|
||||||
KX_IInterpolator *interpolator =
|
|
||||||
new KX_ScalarInterpolator(
|
|
||||||
&ipocontr_obcol->m_rgba[3],
|
|
||||||
ipo);
|
|
||||||
ipocontr_obcol->AddInterpolator(interpolator);
|
ipocontr_obcol->AddInterpolator(interpolator);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void BL_ConvertLampIpos(struct Lamp* blenderlamp, KX_GameObject *lightobj,KX_BlenderSceneConverter *converter)
|
void BL_ConvertLampIpos(struct Lamp* blenderlamp, KX_GameObject *lightobj,KX_BlenderSceneConverter *converter)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (blenderlamp->ipo) {
|
if (blenderlamp->adt) {
|
||||||
|
|
||||||
KX_LightIpoSGController* ipocontr = new KX_LightIpoSGController();
|
KX_LightIpoSGController* ipocontr = new KX_LightIpoSGController();
|
||||||
lightobj->GetSGNode()->AddSGController(ipocontr);
|
lightobj->GetSGNode()->AddSGController(ipocontr);
|
||||||
@ -396,51 +204,32 @@ void BL_ConvertLampIpos(struct Lamp* blenderlamp, KX_GameObject *lightobj,KX_Ble
|
|||||||
ipocontr->m_col_rgb[2] = blenderlamp->b;
|
ipocontr->m_col_rgb[2] = blenderlamp->b;
|
||||||
ipocontr->m_dist = blenderlamp->dist;
|
ipocontr->m_dist = blenderlamp->dist;
|
||||||
|
|
||||||
BL_InterpolatorList *ipoList= GetIpoList(blenderlamp->ipo, converter);
|
BL_InterpolatorList *adtList= GetAdtList(blenderlamp->adt, converter);
|
||||||
|
|
||||||
// For each active channel in the ipoList add an
|
// For each active channel in the adtList add an
|
||||||
// interpolator to the game object.
|
// interpolator to the game object.
|
||||||
|
|
||||||
KX_IScalarInterpolator *ipo;
|
KX_IInterpolator *interpolator;
|
||||||
|
KX_IScalarInterpolator *interp;
|
||||||
|
|
||||||
ipo = ipoList->GetScalarInterpolator(LA_ENERGY);
|
if ((interp= adtList->GetScalarInterpolator("energy", 0))) {
|
||||||
if (ipo) {
|
interpolator= new KX_ScalarInterpolator(&ipocontr->m_energy, interp);
|
||||||
KX_IInterpolator *interpolator =
|
|
||||||
new KX_ScalarInterpolator(&ipocontr->m_energy, ipo);
|
|
||||||
ipocontr->AddInterpolator(interpolator);
|
ipocontr->AddInterpolator(interpolator);
|
||||||
ipocontr->SetModifyEnergy(true);
|
ipocontr->SetModifyEnergy(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
ipo = ipoList->GetScalarInterpolator(LA_DIST);
|
if ((interp = adtList->GetScalarInterpolator("distance", 0))) {
|
||||||
if (ipo) {
|
interpolator= new KX_ScalarInterpolator(&ipocontr->m_dist, interp);
|
||||||
KX_IInterpolator *interpolator =
|
|
||||||
new KX_ScalarInterpolator(&ipocontr->m_dist, ipo);
|
|
||||||
ipocontr->AddInterpolator(interpolator);
|
ipocontr->AddInterpolator(interpolator);
|
||||||
ipocontr->SetModifyDist(true);
|
ipocontr->SetModifyDist(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
ipo = ipoList->GetScalarInterpolator(LA_COL_R);
|
for(int i=0; i<3; i++) {
|
||||||
if (ipo) {
|
if ((interp = adtList->GetScalarInterpolator("color", i))) {
|
||||||
KX_IInterpolator *interpolator =
|
interpolator= new KX_ScalarInterpolator(&ipocontr->m_col_rgb[i], interp);
|
||||||
new KX_ScalarInterpolator(&ipocontr->m_col_rgb[0], ipo);
|
|
||||||
ipocontr->AddInterpolator(interpolator);
|
ipocontr->AddInterpolator(interpolator);
|
||||||
ipocontr->SetModifyColor(true);
|
ipocontr->SetModifyColor(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
ipo = ipoList->GetScalarInterpolator(LA_COL_G);
|
|
||||||
if (ipo) {
|
|
||||||
KX_IInterpolator *interpolator =
|
|
||||||
new KX_ScalarInterpolator(&ipocontr->m_col_rgb[1], ipo);
|
|
||||||
ipocontr->AddInterpolator(interpolator);
|
|
||||||
ipocontr->SetModifyColor(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
ipo = ipoList->GetScalarInterpolator(LA_COL_B);
|
|
||||||
if (ipo) {
|
|
||||||
KX_IInterpolator *interpolator =
|
|
||||||
new KX_ScalarInterpolator(&ipocontr->m_col_rgb[2], ipo);
|
|
||||||
ipocontr->AddInterpolator(interpolator);
|
|
||||||
ipocontr->SetModifyColor(true);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -451,7 +240,7 @@ void BL_ConvertLampIpos(struct Lamp* blenderlamp, KX_GameObject *lightobj,KX_Ble
|
|||||||
void BL_ConvertCameraIpos(struct Camera* blendercamera, KX_GameObject *cameraobj,KX_BlenderSceneConverter *converter)
|
void BL_ConvertCameraIpos(struct Camera* blendercamera, KX_GameObject *cameraobj,KX_BlenderSceneConverter *converter)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (blendercamera->ipo) {
|
if (blendercamera->adt) {
|
||||||
|
|
||||||
KX_CameraIpoSGController* ipocontr = new KX_CameraIpoSGController();
|
KX_CameraIpoSGController* ipocontr = new KX_CameraIpoSGController();
|
||||||
cameraobj->GetSGNode()->AddSGController(ipocontr);
|
cameraobj->GetSGNode()->AddSGController(ipocontr);
|
||||||
@ -461,33 +250,28 @@ void BL_ConvertCameraIpos(struct Camera* blendercamera, KX_GameObject *cameraobj
|
|||||||
ipocontr->m_clipstart = blendercamera->clipsta;
|
ipocontr->m_clipstart = blendercamera->clipsta;
|
||||||
ipocontr->m_clipend = blendercamera->clipend;
|
ipocontr->m_clipend = blendercamera->clipend;
|
||||||
|
|
||||||
BL_InterpolatorList *ipoList= GetIpoList(blendercamera->ipo, converter);
|
BL_InterpolatorList *adtList= GetAdtList(blendercamera->adt, converter);
|
||||||
|
|
||||||
// For each active channel in the ipoList add an
|
// For each active channel in the adtList add an
|
||||||
// interpolator to the game object.
|
// interpolator to the game object.
|
||||||
|
|
||||||
KX_IScalarInterpolator *ipo;
|
KX_IInterpolator *interpolator;
|
||||||
|
KX_IScalarInterpolator *interp;
|
||||||
|
|
||||||
ipo = ipoList->GetScalarInterpolator(CAM_LENS);
|
if ((interp = adtList->GetScalarInterpolator("lens", 0))) {
|
||||||
if (ipo) {
|
interpolator= new KX_ScalarInterpolator(&ipocontr->m_lens, interp);
|
||||||
KX_IInterpolator *interpolator =
|
|
||||||
new KX_ScalarInterpolator(&ipocontr->m_lens, ipo);
|
|
||||||
ipocontr->AddInterpolator(interpolator);
|
ipocontr->AddInterpolator(interpolator);
|
||||||
ipocontr->SetModifyLens(true);
|
ipocontr->SetModifyLens(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
ipo = ipoList->GetScalarInterpolator(CAM_STA);
|
if ((interp = adtList->GetScalarInterpolator("clip_start", 0))) {
|
||||||
if (ipo) {
|
interpolator= new KX_ScalarInterpolator(&ipocontr->m_clipstart, interp);
|
||||||
KX_IInterpolator *interpolator =
|
|
||||||
new KX_ScalarInterpolator(&ipocontr->m_clipstart, ipo);
|
|
||||||
ipocontr->AddInterpolator(interpolator);
|
ipocontr->AddInterpolator(interpolator);
|
||||||
ipocontr->SetModifyClipStart(true);
|
ipocontr->SetModifyClipStart(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
ipo = ipoList->GetScalarInterpolator(CAM_END);
|
if ((interp = adtList->GetScalarInterpolator("clip_end", 0))) {
|
||||||
if (ipo) {
|
interpolator= new KX_ScalarInterpolator(&ipocontr->m_clipend, interp);
|
||||||
KX_IInterpolator *interpolator =
|
|
||||||
new KX_ScalarInterpolator(&ipocontr->m_clipend, ipo);
|
|
||||||
ipocontr->AddInterpolator(interpolator);
|
ipocontr->AddInterpolator(interpolator);
|
||||||
ipocontr->SetModifyClipEnd(true);
|
ipocontr->SetModifyClipEnd(true);
|
||||||
}
|
}
|
||||||
@ -499,7 +283,7 @@ void BL_ConvertCameraIpos(struct Camera* blendercamera, KX_GameObject *cameraobj
|
|||||||
void BL_ConvertWorldIpos(struct World* blenderworld,KX_BlenderSceneConverter *converter)
|
void BL_ConvertWorldIpos(struct World* blenderworld,KX_BlenderSceneConverter *converter)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (blenderworld->ipo) {
|
if (blenderworld->adt) {
|
||||||
|
|
||||||
KX_WorldIpoController* ipocontr = new KX_WorldIpoController();
|
KX_WorldIpoController* ipocontr = new KX_WorldIpoController();
|
||||||
|
|
||||||
@ -514,49 +298,29 @@ void BL_ConvertWorldIpos(struct World* blenderworld,KX_BlenderSceneConverter *co
|
|||||||
ipocontr->m_mist_rgb[1] = blenderworld->horg;
|
ipocontr->m_mist_rgb[1] = blenderworld->horg;
|
||||||
ipocontr->m_mist_rgb[2] = blenderworld->horb;
|
ipocontr->m_mist_rgb[2] = blenderworld->horb;
|
||||||
|
|
||||||
BL_InterpolatorList *ipoList= GetIpoList(blenderworld->ipo, converter);
|
BL_InterpolatorList *adtList= GetAdtList(blenderworld->adt, converter);
|
||||||
|
|
||||||
// For each active channel in the ipoList add an
|
// For each active channel in the adtList add an
|
||||||
// interpolator to the game object.
|
// interpolator to the game object.
|
||||||
|
|
||||||
KX_IScalarInterpolator *ipo;
|
KX_IScalarInterpolator *interp;
|
||||||
|
|
||||||
ipo = ipoList->GetScalarInterpolator(WO_HOR_R);
|
for(int i=0; i<3; i++) {
|
||||||
if (ipo) {
|
if ((interp = adtList->GetScalarInterpolator("horizon_color", i))) {
|
||||||
KX_IInterpolator *interpolator =
|
interpolator= new KX_ScalarInterpolator(&ipocontr->m_mist_rgb[i], interp);
|
||||||
new KX_ScalarInterpolator(&ipocontr->m_mist_rgb[0], ipo);
|
|
||||||
ipocontr->AddInterpolator(interpolator);
|
ipocontr->AddInterpolator(interpolator);
|
||||||
ipocontr->SetModifyMistColor(true);
|
ipocontr->SetModifyMistColor(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
ipo = ipoList->GetScalarInterpolator(WO_HOR_G);
|
|
||||||
if (ipo) {
|
|
||||||
KX_IInterpolator *interpolator =
|
|
||||||
new KX_ScalarInterpolator(&ipocontr->m_mist_rgb[1], ipo);
|
|
||||||
ipocontr->AddInterpolator(interpolator);
|
|
||||||
ipocontr->SetModifyMistColor(true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ipo = ipoList->GetScalarInterpolator(WO_HOR_B);
|
if ((interp = adtList->GetScalarInterpolator("mist.depth", 0))) {
|
||||||
if (ipo) {
|
interpolator= new KX_ScalarInterpolator(&ipocontr->m_mist_dist, interp);
|
||||||
KX_IInterpolator *interpolator =
|
|
||||||
new KX_ScalarInterpolator(&ipocontr->m_mist_rgb[2], ipo);
|
|
||||||
ipocontr->AddInterpolator(interpolator);
|
|
||||||
ipocontr->SetModifyMistColor(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
ipo = ipoList->GetScalarInterpolator(WO_MISTDI);
|
|
||||||
if (ipo) {
|
|
||||||
KX_IInterpolator *interpolator =
|
|
||||||
new KX_ScalarInterpolator(&ipocontr->m_mist_dist, ipo);
|
|
||||||
ipocontr->AddInterpolator(interpolator);
|
ipocontr->AddInterpolator(interpolator);
|
||||||
ipocontr->SetModifyMistDist(true);
|
ipocontr->SetModifyMistDist(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
ipo = ipoList->GetScalarInterpolator(WO_MISTSTA);
|
if ((interp = adtList->GetScalarInterpolator("mist.start", 0))) {
|
||||||
if (ipo) {
|
interpolator= new KX_ScalarInterpolator(&ipocontr->m_mist_start, interp);
|
||||||
KX_IInterpolator *interpolator =
|
|
||||||
new KX_ScalarInterpolator(&ipocontr->m_mist_start, ipo);
|
|
||||||
ipocontr->AddInterpolator(interpolator);
|
ipocontr->AddInterpolator(interpolator);
|
||||||
ipocontr->SetModifyMistStart(true);
|
ipocontr->SetModifyMistStart(true);
|
||||||
}
|
}
|
||||||
@ -570,12 +334,12 @@ static void ConvertMaterialIpos(
|
|||||||
KX_BlenderSceneConverter *converter
|
KX_BlenderSceneConverter *converter
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
if (blendermaterial->ipo) {
|
if (blendermaterial->adt) {
|
||||||
KX_MaterialIpoController* ipocontr = new KX_MaterialIpoController(matname_hash);
|
KX_MaterialIpoController* ipocontr = new KX_MaterialIpoController(matname_hash);
|
||||||
gameobj->GetSGNode()->AddSGController(ipocontr);
|
gameobj->GetSGNode()->AddSGController(ipocontr);
|
||||||
ipocontr->SetObject(gameobj->GetSGNode());
|
ipocontr->SetObject(gameobj->GetSGNode());
|
||||||
|
|
||||||
BL_InterpolatorList *ipoList= GetIpoList(blendermaterial->ipo, converter);
|
BL_InterpolatorList *adtList= GetAdtList(blendermaterial->adt, converter);
|
||||||
|
|
||||||
|
|
||||||
ipocontr->m_rgba[0] = blendermaterial->r;
|
ipocontr->m_rgba[0] = blendermaterial->r;
|
||||||
@ -592,163 +356,82 @@ static void ConvertMaterialIpos(
|
|||||||
ipocontr->m_ref = blendermaterial->ref;
|
ipocontr->m_ref = blendermaterial->ref;
|
||||||
ipocontr->m_emit = blendermaterial->emit;
|
ipocontr->m_emit = blendermaterial->emit;
|
||||||
ipocontr->m_alpha = blendermaterial->alpha;
|
ipocontr->m_alpha = blendermaterial->alpha;
|
||||||
KX_IScalarInterpolator *ipo;
|
|
||||||
|
KX_IInterpolator *interpolator;
|
||||||
|
KX_IScalarInterpolator *sinterp;
|
||||||
|
|
||||||
// --
|
// --
|
||||||
ipo = ipoList->GetScalarInterpolator(MA_COL_R);
|
for(int i=0; i<3; i++) {
|
||||||
if (ipo) {
|
if ((sinterp = adtList->GetScalarInterpolator("diffuse_color", i))) {
|
||||||
if (!ipocontr) {
|
if (!ipocontr) {
|
||||||
ipocontr = new KX_MaterialIpoController(matname_hash);
|
ipocontr = new KX_MaterialIpoController(matname_hash);
|
||||||
gameobj->GetSGNode()->AddSGController(ipocontr);
|
gameobj->GetSGNode()->AddSGController(ipocontr);
|
||||||
ipocontr->SetObject(gameobj->GetSGNode());
|
ipocontr->SetObject(gameobj->GetSGNode());
|
||||||
}
|
}
|
||||||
KX_IInterpolator *interpolator =
|
interpolator= new KX_ScalarInterpolator(&ipocontr->m_rgba[i], sinterp);
|
||||||
new KX_ScalarInterpolator(
|
ipocontr->AddInterpolator(interpolator);
|
||||||
&ipocontr->m_rgba[0],
|
}
|
||||||
ipo);
|
}
|
||||||
|
|
||||||
|
if ((sinterp = adtList->GetScalarInterpolator("alpha", 0))) {
|
||||||
|
if (!ipocontr) {
|
||||||
|
ipocontr = new KX_MaterialIpoController(matname_hash);
|
||||||
|
gameobj->GetSGNode()->AddSGController(ipocontr);
|
||||||
|
ipocontr->SetObject(gameobj->GetSGNode());
|
||||||
|
}
|
||||||
|
interpolator= new KX_ScalarInterpolator(&ipocontr->m_rgba[3], sinterp);
|
||||||
ipocontr->AddInterpolator(interpolator);
|
ipocontr->AddInterpolator(interpolator);
|
||||||
}
|
}
|
||||||
|
|
||||||
ipo = ipoList->GetScalarInterpolator(MA_COL_G);
|
for(int i=0; i<3; i++) {
|
||||||
if (ipo) {
|
if ((sinterp = adtList->GetScalarInterpolator("specular_color", i))) {
|
||||||
if (!ipocontr) {
|
if (!ipocontr) {
|
||||||
ipocontr = new KX_MaterialIpoController(matname_hash);
|
ipocontr = new KX_MaterialIpoController(matname_hash);
|
||||||
gameobj->GetSGNode()->AddSGController(ipocontr);
|
gameobj->GetSGNode()->AddSGController(ipocontr);
|
||||||
ipocontr->SetObject(gameobj->GetSGNode());
|
ipocontr->SetObject(gameobj->GetSGNode());
|
||||||
}
|
}
|
||||||
KX_IInterpolator *interpolator =
|
interpolator= new KX_ScalarInterpolator(&ipocontr->m_specrgb[i], sinterp);
|
||||||
new KX_ScalarInterpolator(
|
ipocontr->AddInterpolator(interpolator);
|
||||||
&ipocontr->m_rgba[1],
|
}
|
||||||
ipo);
|
}
|
||||||
|
|
||||||
|
if ((sinterp = adtList->GetScalarInterpolator("specular_hardness", 0))) {
|
||||||
|
if (!ipocontr) {
|
||||||
|
ipocontr = new KX_MaterialIpoController(matname_hash);
|
||||||
|
gameobj->GetSGNode()->AddSGController(ipocontr);
|
||||||
|
ipocontr->SetObject(gameobj->GetSGNode());
|
||||||
|
}
|
||||||
|
interpolator= new KX_ScalarInterpolator(&ipocontr->m_hard, sinterp);
|
||||||
ipocontr->AddInterpolator(interpolator);
|
ipocontr->AddInterpolator(interpolator);
|
||||||
}
|
}
|
||||||
|
|
||||||
ipo = ipoList->GetScalarInterpolator(MA_COL_B);
|
if ((sinterp = adtList->GetScalarInterpolator("specularity", 0))) {
|
||||||
if (ipo) {
|
|
||||||
if (!ipocontr) {
|
if (!ipocontr) {
|
||||||
ipocontr = new KX_MaterialIpoController(matname_hash);
|
ipocontr = new KX_MaterialIpoController(matname_hash);
|
||||||
gameobj->GetSGNode()->AddSGController(ipocontr);
|
gameobj->GetSGNode()->AddSGController(ipocontr);
|
||||||
ipocontr->SetObject(gameobj->GetSGNode());
|
ipocontr->SetObject(gameobj->GetSGNode());
|
||||||
}
|
}
|
||||||
KX_IInterpolator *interpolator =
|
interpolator= new KX_ScalarInterpolator(&ipocontr->m_spec, sinterp);
|
||||||
new KX_ScalarInterpolator(
|
|
||||||
&ipocontr->m_rgba[2],
|
|
||||||
ipo);
|
|
||||||
ipocontr->AddInterpolator(interpolator);
|
ipocontr->AddInterpolator(interpolator);
|
||||||
}
|
}
|
||||||
|
|
||||||
ipo = ipoList->GetScalarInterpolator(MA_ALPHA);
|
if ((sinterp = adtList->GetScalarInterpolator("diffuse_reflection", 0))) {
|
||||||
if (ipo) {
|
|
||||||
if (!ipocontr) {
|
if (!ipocontr) {
|
||||||
ipocontr = new KX_MaterialIpoController(matname_hash);
|
ipocontr = new KX_MaterialIpoController(matname_hash);
|
||||||
gameobj->GetSGNode()->AddSGController(ipocontr);
|
gameobj->GetSGNode()->AddSGController(ipocontr);
|
||||||
ipocontr->SetObject(gameobj->GetSGNode());
|
ipocontr->SetObject(gameobj->GetSGNode());
|
||||||
}
|
}
|
||||||
KX_IInterpolator *interpolator =
|
interpolator= new KX_ScalarInterpolator(&ipocontr->m_ref, sinterp);
|
||||||
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(matname_hash);
|
|
||||||
gameobj->GetSGNode()->AddSGController(ipocontr);
|
|
||||||
ipocontr->SetObject(gameobj->GetSGNode());
|
|
||||||
}
|
|
||||||
KX_IInterpolator *interpolator =
|
|
||||||
new KX_ScalarInterpolator(
|
|
||||||
&ipocontr->m_specrgb[0],
|
|
||||||
ipo);
|
|
||||||
ipocontr->AddInterpolator(interpolator);
|
ipocontr->AddInterpolator(interpolator);
|
||||||
}
|
}
|
||||||
|
|
||||||
ipo = ipoList->GetScalarInterpolator(MA_SPEC_G);
|
if ((sinterp = adtList->GetScalarInterpolator("emit", 0))) {
|
||||||
if (ipo) {
|
|
||||||
if (!ipocontr) {
|
if (!ipocontr) {
|
||||||
ipocontr = new KX_MaterialIpoController(matname_hash);
|
ipocontr = new KX_MaterialIpoController(matname_hash);
|
||||||
gameobj->GetSGNode()->AddSGController(ipocontr);
|
gameobj->GetSGNode()->AddSGController(ipocontr);
|
||||||
ipocontr->SetObject(gameobj->GetSGNode());
|
ipocontr->SetObject(gameobj->GetSGNode());
|
||||||
}
|
}
|
||||||
KX_IInterpolator *interpolator =
|
interpolator= new KX_ScalarInterpolator(&ipocontr->m_emit, sinterp);
|
||||||
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(matname_hash);
|
|
||||||
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(matname_hash);
|
|
||||||
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(matname_hash);
|
|
||||||
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(matname_hash);
|
|
||||||
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(matname_hash);
|
|
||||||
gameobj->GetSGNode()->AddSGController(ipocontr);
|
|
||||||
ipocontr->SetObject(gameobj->GetSGNode());
|
|
||||||
}
|
|
||||||
KX_IInterpolator *interpolator =
|
|
||||||
new KX_ScalarInterpolator(
|
|
||||||
&ipocontr->m_emit,
|
|
||||||
ipo);
|
|
||||||
ipocontr->AddInterpolator(interpolator);
|
ipocontr->AddInterpolator(interpolator);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user