forked from bartvdbraak/blender
contribution from RCRuiz:
drawing of rigidbody constraint pivots, and allow passing of full constraint frame.
This commit is contained in:
parent
3c9a11f24e
commit
92379ec21f
@ -296,3 +296,7 @@ void antialias_tagbuf(int xsize, int ysize, char *rectmove) {}
|
|||||||
|
|
||||||
/* imagetexture.c stub */
|
/* imagetexture.c stub */
|
||||||
void ibuf_sample(struct ImBuf *ibuf, float fx, float fy, float dx, float dy, float *result) {}
|
void ibuf_sample(struct ImBuf *ibuf, float fx, float fy, float dx, float dy, float *result) {}
|
||||||
|
|
||||||
|
void update_for_newframe()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
@ -324,6 +324,8 @@ typedef struct bRigidBodyJointConstraint{
|
|||||||
|
|
||||||
#define LIMIT_NOPARENT 0x01
|
#define LIMIT_NOPARENT 0x01
|
||||||
|
|
||||||
|
#define CONSTRAINT_DRAW_PIVOT 0x40
|
||||||
|
|
||||||
/* important: these defines need to match up with PHY_DynamicTypes headerfile */
|
/* important: these defines need to match up with PHY_DynamicTypes headerfile */
|
||||||
#define CONSTRAINT_RB_BALL 1
|
#define CONSTRAINT_RB_BALL 1
|
||||||
#define CONSTRAINT_RB_HINGE 2
|
#define CONSTRAINT_RB_HINGE 2
|
||||||
|
@ -1159,14 +1159,16 @@ static void draw_constraint (uiBlock *block, ListBase *list, bConstraint *con, s
|
|||||||
{
|
{
|
||||||
//uiDefBut(block, ROUNDBOX, B_DIFF, "", *xco-10, *yco-height, width+40,height-1, NULL, 5.0, 0.0, 12, rb_col, "");
|
//uiDefBut(block, ROUNDBOX, B_DIFF, "", *xco-10, *yco-height, width+40,height-1, NULL, 5.0, 0.0, 12, rb_col, "");
|
||||||
uiDefIDPoinBut(block, test_obpoin_but, ID_OB, B_CONSTRAINT_CHANGETARGET, "toObject:", *xco, *yco-50, 130, 18, &data->tar, "Child Object");
|
uiDefIDPoinBut(block, test_obpoin_but, ID_OB, B_CONSTRAINT_CHANGETARGET, "toObject:", *xco, *yco-50, 130, 18, &data->tar, "Child Object");
|
||||||
|
uiDefButBitS(block, TOG, CONSTRAINT_DRAW_PIVOT, B_CONSTRAINT_TEST, "ShowPivot", *xco+135, *yco-50, 130, 18, &data->flag, 0, 24, 0, 0, "Show pivot position and rotation");
|
||||||
//if (data->tar)
|
//if (data->tar)
|
||||||
// uiDefIDPoinBut(block, test_obpoin_but, ID_OB, B_CONSTRAINT_CHANGETARGET, "Child:", *xco+135, *yco-50, 130, 18, &data->child, "Child2 Object (if this exist then this object will be the pivot Only)");
|
// uiDefIDPoinBut(block, test_obpoin_but, ID_OB, B_CONSTRAINT_CHANGETARGET, "Child:", *xco+135, *yco-50, 130, 18, &data->child, "Child2 Object (if this exist then this object will be the pivot Only)");
|
||||||
uiDefButF(block, NUM, B_CONSTRAINT_TEST, "Pivot X:", *xco, *yco-75, 130, 18, &data->pivX, -10000, 10000, 100.0, 0.0, "Offset Joint");
|
uiDefButF(block, NUM, B_CONSTRAINT_TEST, "Pivot X:", *xco, *yco-75, 130, 18, &data->pivX, -1000, 1000, 0.1, 0.0, "Offset pivot on X");
|
||||||
uiDefButF(block, NUM, B_CONSTRAINT_TEST, "Pivot Y:", *xco, *yco-100, 130, 18, &data->pivY, -10000, 10000, 100.0, 0.0, "Offset Joint");
|
uiDefButF(block, NUM, B_CONSTRAINT_TEST, "Pivot Y:", *xco, *yco-100, 130, 18, &data->pivY, -1000, 1000, 0.1, 0.0, "Offset pivot on Y");
|
||||||
uiDefButF(block, NUM, B_CONSTRAINT_TEST, "Pivot Z:", *xco, *yco-125, 130, 18, &data->pivZ, -10000, 10000, 100.0, 0.0, "Offset Joint");
|
uiDefButF(block, NUM, B_CONSTRAINT_TEST, "Pivot Z:", *xco, *yco-125, 130, 18, &data->pivZ, -1000, 1000, 0.1, 0.0, "Offset pivot on z");
|
||||||
uiDefButF(block, NUM, B_CONSTRAINT_TEST, "Ax X:", *xco+135, *yco-75, 130, 18, &data->axX, -10000, 10000, 100.0, 0.0, "Offset Joint");
|
|
||||||
uiDefButF(block, NUM, B_CONSTRAINT_TEST, "Ax Y:", *xco+135, *yco-100, 130, 18, &data->axY, -10000, 10000, 100.0, 0.0, "Offset Joint");
|
uiDefButF(block, NUM, B_CONSTRAINT_TEST, "AxEX:", *xco+135, *yco-75, 130, 18, &data->axX, -3.141592, 3.141592, 0.1, 0.0, "Rotate pivot on X Axis");
|
||||||
uiDefButF(block, NUM, B_CONSTRAINT_TEST, "Ax Z:", *xco+135, *yco-125, 130, 18, &data->axZ, -10000, 10000, 100.0, 0.0, "Offset Joint");
|
uiDefButF(block, NUM, B_CONSTRAINT_TEST, "AxEY:", *xco+135, *yco-100, 130, 18, &data->axY, -3.141592, 3.141592, 0.1, 0.0, "Rotate pivot on Y Axis");
|
||||||
|
uiDefButF(block, NUM, B_CONSTRAINT_TEST, "AxEZ:", *xco+135, *yco-125, 130, 18, &data->axZ, -3.141592, 3.141592, 0.1, 0.0, "Rotate pivot on Z Axis");
|
||||||
|
|
||||||
if (data->type==CONSTRAINT_RB_GENERIC6DOF){
|
if (data->type==CONSTRAINT_RB_GENERIC6DOF){
|
||||||
/* Draw Pairs of LimitToggle+LimitValue */
|
/* Draw Pairs of LimitToggle+LimitValue */
|
||||||
|
@ -3636,6 +3636,51 @@ static void draw_hooks(Object *ob)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//<rcruiz>
|
||||||
|
void drawRBpivot(bRigidBodyJointConstraint *data){
|
||||||
|
float size=1.0f;
|
||||||
|
int axis;
|
||||||
|
float v1[3]= {data->pivX, data->pivY, data->pivZ};
|
||||||
|
float eu[3]= {data->axX, data->axY, data->axZ};
|
||||||
|
float mat[4][4];
|
||||||
|
EulToMat4(eu,mat);
|
||||||
|
glLineWidth (4.0f);
|
||||||
|
setlinestyle(2);
|
||||||
|
for (axis=0; axis<3; axis++) {
|
||||||
|
float dir[3] = {0,0,0};
|
||||||
|
float v[3]= {data->pivX, data->pivY, data->pivZ};
|
||||||
|
int arrow_axis= (axis==0)?1:0;
|
||||||
|
dir[axis] = 1.f;
|
||||||
|
glBegin(GL_LINES);
|
||||||
|
Mat4MulVecfl(mat,dir);
|
||||||
|
v[0] += dir[0];
|
||||||
|
v[1] += dir[1];
|
||||||
|
v[2] += dir[2];
|
||||||
|
glVertex3fv(v1);
|
||||||
|
glVertex3fv(v);
|
||||||
|
/* v1[axis]= size*0.8;
|
||||||
|
v1[arrow_axis]= -size*0.125;
|
||||||
|
glVertex3fv(v1);
|
||||||
|
glVertex3fv(v2);
|
||||||
|
|
||||||
|
v1[arrow_axis]= size*0.125;
|
||||||
|
glVertex3fv(v1);
|
||||||
|
glVertex3fv(v2);
|
||||||
|
*/
|
||||||
|
glEnd();
|
||||||
|
glRasterPos3fv(v);
|
||||||
|
if (axis==0)
|
||||||
|
BMF_DrawString(G.font, "px");
|
||||||
|
else if (axis==1)
|
||||||
|
BMF_DrawString(G.font, "py");
|
||||||
|
else
|
||||||
|
BMF_DrawString(G.font, "pz");
|
||||||
|
|
||||||
|
}
|
||||||
|
glLineWidth (1.0f);
|
||||||
|
setlinestyle(0);
|
||||||
|
}
|
||||||
|
|
||||||
/* flag can be DRAW_PICKING and/or DRAW_CONSTCOLOR */
|
/* flag can be DRAW_PICKING and/or DRAW_CONSTCOLOR */
|
||||||
void draw_object(Base *base, int flag)
|
void draw_object(Base *base, int flag)
|
||||||
{
|
{
|
||||||
@ -4001,6 +4046,18 @@ void draw_object(Base *base, int flag)
|
|||||||
}
|
}
|
||||||
if(ob->pd && ob->pd->forcefield) draw_forcefield(ob);
|
if(ob->pd && ob->pd->forcefield) draw_forcefield(ob);
|
||||||
|
|
||||||
|
{
|
||||||
|
bConstraint *con;
|
||||||
|
for(con=ob->constraints.first; con; con= con->next)
|
||||||
|
{
|
||||||
|
if(con->type==CONSTRAINT_TYPE_RIGIDBODYJOINT)
|
||||||
|
{
|
||||||
|
bRigidBodyJointConstraint *data = (bRigidBodyJointConstraint*)con->data;
|
||||||
|
if(data->flag&CONSTRAINT_DRAW_PIVOT)
|
||||||
|
drawRBpivot(data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* draw extra: after normal draw because of makeDispList */
|
/* draw extra: after normal draw because of makeDispList */
|
||||||
if(dtx) {
|
if(dtx) {
|
||||||
|
@ -83,6 +83,15 @@
|
|||||||
#include "DNA_scene_types.h"
|
#include "DNA_scene_types.h"
|
||||||
/***/
|
/***/
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
#include "BSE_headerbuttons.h"
|
||||||
|
void update_for_newframe();
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static BlendFileData *load_game_data(char *filename) {
|
static BlendFileData *load_game_data(char *filename) {
|
||||||
BlendReadError error;
|
BlendReadError error;
|
||||||
//this doesn't work anymore for relative paths, so use BLO_read_from_memory instead
|
//this doesn't work anymore for relative paths, so use BLO_read_from_memory instead
|
||||||
@ -310,7 +319,7 @@ extern "C" void StartKetsjiShell(struct ScrArea *area,
|
|||||||
// create a scene converter, create and convert the startingscene
|
// create a scene converter, create and convert the startingscene
|
||||||
KX_ISceneConverter* sceneconverter = new KX_BlenderSceneConverter(blenderdata,sipo, ketsjiengine);
|
KX_ISceneConverter* sceneconverter = new KX_BlenderSceneConverter(blenderdata,sipo, ketsjiengine);
|
||||||
ketsjiengine->SetSceneConverter(sceneconverter);
|
ketsjiengine->SetSceneConverter(sceneconverter);
|
||||||
|
sceneconverter->addInitFromFrame=false;
|
||||||
if (always_use_expand_framing)
|
if (always_use_expand_framing)
|
||||||
sceneconverter->SetAlwaysUseExpandFraming(true);
|
sceneconverter->SetAlwaysUseExpandFraming(true);
|
||||||
|
|
||||||
@ -452,14 +461,6 @@ extern "C" void StartKetsjiShell(struct ScrArea *area,
|
|||||||
|
|
||||||
if (bfd) BLO_blendfiledata_free(bfd);
|
if (bfd) BLO_blendfiledata_free(bfd);
|
||||||
}
|
}
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
#include "BSE_headerbuttons.h"
|
|
||||||
void update_for_newframe();
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
extern "C" void StartKetsjiShellSimulation(struct ScrArea *area,
|
extern "C" void StartKetsjiShellSimulation(struct ScrArea *area,
|
||||||
char* scenename,
|
char* scenename,
|
||||||
@ -481,7 +482,6 @@ extern "C" void StartKetsjiShellSimulation(struct ScrArea *area,
|
|||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
// View3D *v3d= (View3D*) area->spacedata.first;
|
|
||||||
|
|
||||||
// get some preferences
|
// get some preferences
|
||||||
SYS_SystemHandle syshandle = SYS_GetSystem();
|
SYS_SystemHandle syshandle = SYS_GetSystem();
|
||||||
@ -493,19 +493,6 @@ extern "C" void StartKetsjiShellSimulation(struct ScrArea *area,
|
|||||||
bool displaylists = (SYS_GetCommandLineInt(syshandle, "displaylists", 0) != 0);
|
bool displaylists = (SYS_GetCommandLineInt(syshandle, "displaylists", 0) != 0);
|
||||||
bool usemat = false;
|
bool usemat = false;
|
||||||
|
|
||||||
/* #ifdef GL_ARB_multitexture
|
|
||||||
if(bgl::RAS_EXT_support._ARB_multitexture && bgl::QueryVersion(1, 1)) {
|
|
||||||
usemat = (SYS_GetCommandLineInt(syshandle, "blender_material", 0) != 0);
|
|
||||||
int unitmax=0;
|
|
||||||
glGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB, (GLint*)&unitmax);
|
|
||||||
bgl::max_texture_units = MAXTEX>unitmax?unitmax:MAXTEX;
|
|
||||||
//std::cout << "using(" << bgl::max_texture_units << ") of(" << unitmax << ") texture units." << std::endl;
|
|
||||||
} else {
|
|
||||||
bgl::max_texture_units = 0;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
*/
|
|
||||||
// create the canvas, rasterizer and rendertools
|
// create the canvas, rasterizer and rendertools
|
||||||
RAS_ICanvas* canvas = new KX_BlenderCanvas(area);
|
RAS_ICanvas* canvas = new KX_BlenderCanvas(area);
|
||||||
//canvas->SetMouseState(RAS_ICanvas::MOUSE_INVISIBLE);
|
//canvas->SetMouseState(RAS_ICanvas::MOUSE_INVISIBLE);
|
||||||
@ -544,83 +531,8 @@ extern "C" void StartKetsjiShellSimulation(struct ScrArea *area,
|
|||||||
// create the ketsjiengine
|
// create the ketsjiengine
|
||||||
KX_KetsjiEngine* ketsjiengine = new KX_KetsjiEngine(kxsystem);
|
KX_KetsjiEngine* ketsjiengine = new KX_KetsjiEngine(kxsystem);
|
||||||
|
|
||||||
/* // set the devices
|
|
||||||
ketsjiengine->SetKeyboardDevice(keyboarddevice);
|
|
||||||
ketsjiengine->SetMouseDevice(mousedevice);
|
|
||||||
ketsjiengine->SetNetworkDevice(networkdevice);
|
|
||||||
ketsjiengine->SetCanvas(canvas);
|
|
||||||
ketsjiengine->SetRenderTools(rendertools);
|
|
||||||
ketsjiengine->SetRasterizer(rasterizer);
|
|
||||||
ketsjiengine->SetNetworkDevice(networkdevice);
|
|
||||||
ketsjiengine->SetAudioDevice(audiodevice);
|
|
||||||
ketsjiengine->SetUseFixedTime(usefixed);
|
|
||||||
ketsjiengine->SetTimingDisplay(frameRate, profile, properties);
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
// some blender stuff
|
|
||||||
MT_CmMatrix4x4 projmat;
|
|
||||||
MT_CmMatrix4x4 viewmat;
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
/* for (i = 0; i < 16; i++)
|
|
||||||
{
|
|
||||||
float *viewmat_linear= (float*) v3d->viewmat;
|
|
||||||
viewmat.setElem(i, viewmat_linear[i]);
|
|
||||||
}
|
|
||||||
for (i = 0; i < 16; i++)
|
|
||||||
{
|
|
||||||
float *projmat_linear = (float*) area->winmat;
|
|
||||||
projmat.setElem(i, projmat_linear[i]);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
/* float camzoom = (1.41421 + (v3d->camzoom / 50.0));
|
|
||||||
camzoom *= camzoom;
|
|
||||||
camzoom = 4.0 / camzoom;
|
|
||||||
*/
|
|
||||||
// ketsjiengine->SetDrawType(v3d->drawtype);
|
|
||||||
// ketsjiengine->SetCameraZoom(camzoom);
|
|
||||||
/*
|
|
||||||
// if we got an exitcode 3 (KX_EXIT_REQUEST_START_OTHER_GAME) load a different file
|
|
||||||
if (exitrequested == KX_EXIT_REQUEST_START_OTHER_GAME || exitrequested == KX_EXIT_REQUEST_RESTART_GAME)
|
|
||||||
{
|
|
||||||
exitrequested = KX_EXIT_REQUEST_NO_REQUEST;
|
|
||||||
if (bfd) BLO_blendfiledata_free(bfd);
|
|
||||||
|
|
||||||
char basedpath[160];
|
|
||||||
// base the actuator filename with respect
|
|
||||||
// to the original file working directory
|
|
||||||
if (exitstring != "")
|
|
||||||
strcpy(basedpath, exitstring.Ptr());
|
|
||||||
|
|
||||||
BLI_convertstringcode(basedpath, pathname, 0);
|
|
||||||
bfd = load_game_data(basedpath);
|
|
||||||
|
|
||||||
// if it wasn't loaded, try it forced relative
|
|
||||||
if (!bfd)
|
|
||||||
{
|
|
||||||
// just add "//" in front of it
|
|
||||||
char temppath[162];
|
|
||||||
strcpy(temppath, "//");
|
|
||||||
strcat(temppath, basedpath);
|
|
||||||
|
|
||||||
BLI_convertstringcode(temppath, pathname, 0);
|
|
||||||
bfd = load_game_data(temppath);
|
|
||||||
}
|
|
||||||
|
|
||||||
// if we got a loaded blendfile, proceed
|
|
||||||
if (bfd)
|
|
||||||
{
|
|
||||||
blenderdata = bfd->main;
|
|
||||||
startscenename = bfd->curscene->id.name + 2;
|
|
||||||
}
|
|
||||||
// else forget it, we can't find it
|
|
||||||
else
|
|
||||||
{
|
|
||||||
exitrequested = KX_EXIT_REQUEST_QUIT_GAME;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
Scene *blscene = NULL;
|
Scene *blscene = NULL;
|
||||||
if (!bfd)
|
if (!bfd)
|
||||||
{
|
{
|
||||||
@ -652,18 +564,11 @@ extern "C" void StartKetsjiShellSimulation(struct ScrArea *area,
|
|||||||
|
|
||||||
if (exitrequested != KX_EXIT_REQUEST_QUIT_GAME)
|
if (exitrequested != KX_EXIT_REQUEST_QUIT_GAME)
|
||||||
{
|
{
|
||||||
/*if (v3d->persp != 2)
|
|
||||||
{
|
|
||||||
ketsjiengine->EnableCameraOverride(startscenename);
|
|
||||||
ketsjiengine->SetCameraOverrideUseOrtho((v3d->persp == 0));
|
|
||||||
ketsjiengine->SetCameraOverrideProjectionMatrix(projmat);
|
|
||||||
ketsjiengine->SetCameraOverrideViewMatrix(viewmat);
|
|
||||||
}*/
|
|
||||||
|
|
||||||
// create a scene converter, create and convert the startingscene
|
// create a scene converter, create and convert the startingscene
|
||||||
KX_ISceneConverter* sceneconverter = new KX_BlenderSceneConverter(maggie,sipo, ketsjiengine);
|
KX_ISceneConverter* sceneconverter = new KX_BlenderSceneConverter(maggie,sipo, ketsjiengine);
|
||||||
ketsjiengine->SetSceneConverter(sceneconverter);
|
ketsjiengine->SetSceneConverter(sceneconverter);
|
||||||
|
sceneconverter->addInitFromFrame=true;
|
||||||
|
|
||||||
if (always_use_expand_framing)
|
if (always_use_expand_framing)
|
||||||
sceneconverter->SetAlwaysUseExpandFraming(true);
|
sceneconverter->SetAlwaysUseExpandFraming(true);
|
||||||
|
|
||||||
@ -675,7 +580,6 @@ extern "C" void StartKetsjiShellSimulation(struct ScrArea *area,
|
|||||||
networkdevice,
|
networkdevice,
|
||||||
audiodevice,
|
audiodevice,
|
||||||
startscenename);
|
startscenename);
|
||||||
|
|
||||||
// some python things
|
// some python things
|
||||||
PyObject* dictionaryobject = initGamePythonScripting("Ketsji", psl_Lowest);
|
PyObject* dictionaryobject = initGamePythonScripting("Ketsji", psl_Lowest);
|
||||||
ketsjiengine->SetPythonDictionary(dictionaryobject);
|
ketsjiengine->SetPythonDictionary(dictionaryobject);
|
||||||
@ -696,9 +600,6 @@ extern "C" void StartKetsjiShellSimulation(struct ScrArea *area,
|
|||||||
canvas);
|
canvas);
|
||||||
ketsjiengine->AddScene(startscene);
|
ketsjiengine->AddScene(startscene);
|
||||||
|
|
||||||
// init the rasterizer
|
|
||||||
//rasterizer->Init();
|
|
||||||
|
|
||||||
// start the engine
|
// start the engine
|
||||||
ketsjiengine->StartEngine(false);
|
ketsjiengine->StartEngine(false);
|
||||||
|
|
||||||
@ -708,38 +609,22 @@ extern "C" void StartKetsjiShellSimulation(struct ScrArea *area,
|
|||||||
printf("frame %i\n",blscene->r.cfra);
|
printf("frame %i\n",blscene->r.cfra);
|
||||||
// first check if we want to exit
|
// first check if we want to exit
|
||||||
exitrequested = ketsjiengine->GetExitCode();
|
exitrequested = ketsjiengine->GetExitCode();
|
||||||
|
/*for (int ix=0;i<geobjs->GetCount();ix++){
|
||||||
|
KX_GameObject* gameobj = (KX_GameObject*) geobjs->GetValue(ix);
|
||||||
|
if (!gameobj->IsDynamic()){
|
||||||
|
//gameobj->UpdateNonDynas();//UpdateIPO((float)blscene->r.cfra,true, true, true);
|
||||||
|
struct Object* blenderobject = sceneconverter->FindBlenderObject(gameobj);
|
||||||
|
}
|
||||||
|
}*/
|
||||||
|
|
||||||
|
|
||||||
// kick the engine
|
// kick the engine
|
||||||
ketsjiengine->NextFrame();
|
ketsjiengine->NextFrame();
|
||||||
blscene->r.cfra=blscene->r.cfra+1;
|
blscene->r.cfra=blscene->r.cfra+1;
|
||||||
update_for_newframe();
|
update_for_newframe();
|
||||||
// render the frame
|
|
||||||
//ketsjiengine->Render();
|
|
||||||
|
|
||||||
// test for the ESC key
|
|
||||||
/*while (qtest())
|
|
||||||
{
|
|
||||||
short val;
|
|
||||||
unsigned short event = extern_qread(&val);
|
|
||||||
|
|
||||||
if (keyboarddevice->ConvertBlenderEvent(event,val))
|
|
||||||
exitrequested = KX_EXIT_REQUEST_BLENDER_ESC;
|
|
||||||
|
|
||||||
if (event==MOUSEX) {
|
|
||||||
val = val - scrarea_get_win_x(area);
|
|
||||||
} else if (event==MOUSEY) {
|
|
||||||
val = scrarea_get_win_height(area) - (val - scrarea_get_win_y(area)) - 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
mousedevice->ConvertBlenderEvent(event,val);
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
exitstring = ketsjiengine->GetExitString();
|
exitstring = ketsjiengine->GetExitString();
|
||||||
// when exiting the mainloop
|
|
||||||
//dictionaryClearByHand(gameLogic);
|
|
||||||
//ketsjiengine->StopEngine();
|
|
||||||
//exitGamePythonScripting();
|
|
||||||
//networkdevice->Disconnect();
|
|
||||||
}
|
}
|
||||||
if (sceneconverter)
|
if (sceneconverter)
|
||||||
{
|
{
|
||||||
@ -778,21 +663,6 @@ extern "C" void StartKetsjiShellSimulation(struct ScrArea *area,
|
|||||||
delete mousedevice;
|
delete mousedevice;
|
||||||
mousedevice = NULL;
|
mousedevice = NULL;
|
||||||
}
|
}
|
||||||
/*if (rasterizer)
|
|
||||||
{
|
|
||||||
delete rasterizer;
|
|
||||||
rasterizer = NULL;
|
|
||||||
}
|
|
||||||
if (rendertools)
|
|
||||||
{
|
|
||||||
delete rendertools;
|
|
||||||
rendertools = NULL;
|
|
||||||
}
|
|
||||||
if (canvas)
|
|
||||||
{
|
|
||||||
delete canvas;
|
|
||||||
canvas = NULL;
|
|
||||||
}*/
|
|
||||||
SND_DeviceManager::Unsubscribe();
|
SND_DeviceManager::Unsubscribe();
|
||||||
|
|
||||||
} while (exitrequested == KX_EXIT_REQUEST_RESTART_GAME || exitrequested == KX_EXIT_REQUEST_START_OTHER_GAME);
|
} while (exitrequested == KX_EXIT_REQUEST_RESTART_GAME || exitrequested == KX_EXIT_REQUEST_START_OTHER_GAME);
|
||||||
|
@ -167,6 +167,18 @@
|
|||||||
#include "BL_ArmatureObject.h"
|
#include "BL_ArmatureObject.h"
|
||||||
#include "BL_DeformableGameObject.h"
|
#include "BL_DeformableGameObject.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
#include "BSE_headerbuttons.h"
|
||||||
|
void update_for_newframe();
|
||||||
|
//void scene_update_for_newframe(struct Scene *sce, unsigned int lay);
|
||||||
|
//#include "BKE_ipo.h"
|
||||||
|
//void do_all_data_ipos(void);
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static int default_face_mode = TF_DYNAMIC;
|
static int default_face_mode = TF_DYNAMIC;
|
||||||
|
|
||||||
static unsigned int KX_rgbaint2uint_new(unsigned int icol)
|
static unsigned int KX_rgbaint2uint_new(unsigned int icol)
|
||||||
@ -1618,7 +1630,7 @@ KX_GameObject* getGameOb(STR_String busc,CListValue* sumolist){
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
#include "BLI_arithb.h"
|
||||||
// convert blender objects into ketsji gameobjects
|
// convert blender objects into ketsji gameobjects
|
||||||
void BL_ConvertBlenderObjects(struct Main* maggie,
|
void BL_ConvertBlenderObjects(struct Main* maggie,
|
||||||
const STR_String& scenename,
|
const STR_String& scenename,
|
||||||
@ -1642,6 +1654,7 @@ void BL_ConvertBlenderObjects(struct Main* maggie,
|
|||||||
RAS_FrameSettings::RAS_FrameType frame_type;
|
RAS_FrameSettings::RAS_FrameType frame_type;
|
||||||
int aspect_width;
|
int aspect_width;
|
||||||
int aspect_height;
|
int aspect_height;
|
||||||
|
vector<MT_Vector3> inivel,iniang;
|
||||||
|
|
||||||
if (alwaysUseExpandFraming) {
|
if (alwaysUseExpandFraming) {
|
||||||
frame_type = RAS_FrameSettings::e_frame_extend;
|
frame_type = RAS_FrameSettings::e_frame_extend;
|
||||||
@ -1720,6 +1733,10 @@ void BL_ConvertBlenderObjects(struct Main* maggie,
|
|||||||
|
|
||||||
if (gameobj)
|
if (gameobj)
|
||||||
{
|
{
|
||||||
|
MT_Point3 posPrev;
|
||||||
|
MT_Matrix3x3 angor;
|
||||||
|
if (converter->addInitFromFrame) blenderscene->r.cfra=blenderscene->r.sfra;
|
||||||
|
|
||||||
MT_Point3 pos = MT_Point3(
|
MT_Point3 pos = MT_Point3(
|
||||||
blenderobject->loc[0]+blenderobject->dloc[0],
|
blenderobject->loc[0]+blenderobject->dloc[0],
|
||||||
blenderobject->loc[1]+blenderobject->dloc[1],
|
blenderobject->loc[1]+blenderobject->dloc[1],
|
||||||
@ -1735,7 +1752,26 @@ void BL_ConvertBlenderObjects(struct Main* maggie,
|
|||||||
blenderobject->size[1],
|
blenderobject->size[1],
|
||||||
blenderobject->size[2]
|
blenderobject->size[2]
|
||||||
);
|
);
|
||||||
|
if (converter->addInitFromFrame){//rcruiz
|
||||||
|
float eulxyzPrev[3];
|
||||||
|
blenderscene->r.cfra=blenderscene->r.sfra-1;
|
||||||
|
update_for_newframe();
|
||||||
|
MT_Vector3 tmp=pos-MT_Point3(blenderobject->loc[0]+blenderobject->dloc[0],
|
||||||
|
blenderobject->loc[1]+blenderobject->dloc[1],
|
||||||
|
blenderobject->loc[2]+blenderobject->dloc[2]
|
||||||
|
);
|
||||||
|
eulxyzPrev[0]=blenderobject->rot[0];
|
||||||
|
eulxyzPrev[1]=blenderobject->rot[1];
|
||||||
|
eulxyzPrev[2]=blenderobject->rot[2];
|
||||||
|
tmp.scale((float)blenderscene->r.frs_sec,(float)blenderscene->r.frs_sec,(float)blenderscene->r.frs_sec);
|
||||||
|
inivel.push_back(tmp);
|
||||||
|
tmp=eulxyz-eulxyzPrev;
|
||||||
|
tmp.scale((float)blenderscene->r.frs_sec,(float)blenderscene->r.frs_sec,(float)blenderscene->r.frs_sec);
|
||||||
|
iniang.push_back(tmp);
|
||||||
|
blenderscene->r.cfra=blenderscene->r.sfra;
|
||||||
|
update_for_newframe();
|
||||||
|
}
|
||||||
|
|
||||||
gameobj->NodeSetLocalPosition(pos);
|
gameobj->NodeSetLocalPosition(pos);
|
||||||
gameobj->NodeSetLocalOrientation(MT_Matrix3x3(eulxyz));
|
gameobj->NodeSetLocalOrientation(MT_Matrix3x3(eulxyz));
|
||||||
gameobj->NodeSetLocalScale(scale);
|
gameobj->NodeSetLocalScale(scale);
|
||||||
@ -1759,7 +1795,7 @@ void BL_ConvertBlenderObjects(struct Main* maggie,
|
|||||||
templist->Add(gameobj->AddRef());
|
templist->Add(gameobj->AddRef());
|
||||||
|
|
||||||
// update children/parent hierarchy
|
// update children/parent hierarchy
|
||||||
if (blenderobject->parent != 0)
|
if ((blenderobject->parent != 0)&&(!converter->addInitFromFrame))
|
||||||
{
|
{
|
||||||
// blender has an additional 'parentinverse' offset in each object
|
// blender has an additional 'parentinverse' offset in each object
|
||||||
SG_Node* parentinversenode = new SG_Node(NULL,NULL,SG_Callbacks());
|
SG_Node* parentinversenode = new SG_Node(NULL,NULL,SG_Callbacks());
|
||||||
@ -1790,12 +1826,15 @@ void BL_ConvertBlenderObjects(struct Main* maggie,
|
|||||||
logicmgr->RegisterGameMeshName(gameobj->GetMesh(i)->GetName(), blenderobject);
|
logicmgr->RegisterGameMeshName(gameobj->GetMesh(i)->GetName(), blenderobject);
|
||||||
|
|
||||||
converter->RegisterGameObject(gameobj, blenderobject);
|
converter->RegisterGameObject(gameobj, blenderobject);
|
||||||
|
|
||||||
// this was put in rapidly, needs to be looked at more closely
|
// this was put in rapidly, needs to be looked at more closely
|
||||||
// only draw/use objects in active 'blender' layers
|
// only draw/use objects in active 'blender' layers
|
||||||
|
|
||||||
logicbrick_conversionlist->Add(gameobj->AddRef());
|
logicbrick_conversionlist->Add(gameobj->AddRef());
|
||||||
|
|
||||||
|
if (converter->addInitFromFrame){
|
||||||
|
posPrev=gameobj->NodeGetWorldPosition();
|
||||||
|
angor=gameobj->NodeGetWorldOrientation();
|
||||||
|
}
|
||||||
if (isInActiveLayer)
|
if (isInActiveLayer)
|
||||||
{
|
{
|
||||||
objectlist->Add(gameobj->AddRef());
|
objectlist->Add(gameobj->AddRef());
|
||||||
@ -1805,7 +1844,11 @@ void BL_ConvertBlenderObjects(struct Main* maggie,
|
|||||||
gameobj->Bucketize();
|
gameobj->Bucketize();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
if (converter->addInitFromFrame){
|
||||||
|
gameobj->NodeSetLocalPosition(posPrev);
|
||||||
|
gameobj->NodeSetLocalOrientation(angor);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
base = base->next;
|
base = base->next;
|
||||||
@ -1928,6 +1971,20 @@ void BL_ConvertBlenderObjects(struct Main* maggie,
|
|||||||
}
|
}
|
||||||
BL_CreatePhysicsObjectNew(gameobj,blenderobject,meshobj,kxscene,activeLayerBitInfo,physics_engine,converter,processCompoundChildren);
|
BL_CreatePhysicsObjectNew(gameobj,blenderobject,meshobj,kxscene,activeLayerBitInfo,physics_engine,converter,processCompoundChildren);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//set ini linearVel and int angularVel //rcruiz
|
||||||
|
if (converter->addInitFromFrame)
|
||||||
|
for (i=0;i<sumolist->GetCount();i++)
|
||||||
|
{
|
||||||
|
KX_GameObject* gameobj = (KX_GameObject*) sumolist->GetValue(i);
|
||||||
|
if (gameobj->IsDynamic()){
|
||||||
|
gameobj->setLinearVelocity(inivel[i],false);
|
||||||
|
gameobj->setAngularVelocity(iniang[i],false);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
// create physics joints
|
// create physics joints
|
||||||
for (i=0;i<sumolist->GetCount();i++)
|
for (i=0;i<sumolist->GetCount();i++)
|
||||||
@ -1956,8 +2013,19 @@ void BL_ConvertBlenderObjects(struct Main* maggie,
|
|||||||
if (gameobj->GetPhysicsController())
|
if (gameobj->GetPhysicsController())
|
||||||
{
|
{
|
||||||
PHY_IPhysicsController* physctrl = (PHY_IPhysicsController*) gameobj->GetPhysicsController()->GetUserData();
|
PHY_IPhysicsController* physctrl = (PHY_IPhysicsController*) gameobj->GetPhysicsController()->GetUserData();
|
||||||
|
//we need to pass a full constraint frame, not just axis
|
||||||
|
|
||||||
int constraintId = kxscene->GetPhysicsEnvironment()->createConstraint(physctrl,physctr2,(PHY_ConstraintType)dat->type,(float)dat->pivX,(float)dat->pivY,(float)dat->pivZ,(float)dat->axX,(float)dat->axY,(float)dat->axZ);
|
//localConstraintFrameBasis
|
||||||
|
MT_Matrix3x3 localCFrame(MT_Vector3(dat->axX,dat->axY,dat->axZ));
|
||||||
|
MT_Vector3 axis0 = localCFrame.getColumn(0);
|
||||||
|
MT_Vector3 axis1 = localCFrame.getColumn(1);
|
||||||
|
MT_Vector3 axis2 = localCFrame.getColumn(2);
|
||||||
|
|
||||||
|
int constraintId = kxscene->GetPhysicsEnvironment()->createConstraint(physctrl,physctr2,(PHY_ConstraintType)dat->type,(float)dat->pivX,(float)dat->pivY,(float)dat->pivZ,
|
||||||
|
(float)axis0.x(),(float)axis0.y(),(float)axis0.z(),
|
||||||
|
(float)axis1.x(),(float)axis1.y(),(float)axis1.z(),
|
||||||
|
(float)axis2.x(),(float)axis2.y(),(float)axis2.z()
|
||||||
|
);
|
||||||
//if it is a generic 6DOF constraint, set all the limits accordingly
|
//if it is a generic 6DOF constraint, set all the limits accordingly
|
||||||
if (dat->type == PHY_GENERIC_6DOF_CONSTRAINT)
|
if (dat->type == PHY_GENERIC_6DOF_CONSTRAINT)
|
||||||
{
|
{
|
||||||
@ -1984,40 +2052,9 @@ void BL_ConvertBlenderObjects(struct Main* maggie,
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//Intento de actualizar posicion
|
|
||||||
/*for (i=0;i<sumolist->GetCount();i++)
|
|
||||||
{
|
|
||||||
KX_GameObject* gameobj = (KX_GameObject*) sumolist->GetValue(i);
|
|
||||||
struct Object* blenderobject = converter->FindBlenderObject(gameobj);
|
|
||||||
|
|
||||||
MT_Point3 pos = MT_Point3(
|
|
||||||
blenderobject->loc[0]+blenderobject->dloc[0],
|
|
||||||
blenderobject->loc[1]+blenderobject->dloc[1],
|
|
||||||
blenderobject->loc[2]+blenderobject->dloc[2]
|
|
||||||
);
|
|
||||||
MT_Vector3 eulxyz = MT_Vector3(
|
|
||||||
blenderobject->rot[0],
|
|
||||||
blenderobject->rot[1],
|
|
||||||
blenderobject->rot[2]
|
|
||||||
);
|
|
||||||
MT_Vector3 scale = MT_Vector3(
|
|
||||||
blenderobject->size[0],
|
|
||||||
blenderobject->size[1],
|
|
||||||
blenderobject->size[2]
|
|
||||||
);
|
|
||||||
|
|
||||||
gameobj->NodeSetLocalPosition(pos);
|
|
||||||
gameobj->NodeSetLocalOrientation(MT_Matrix3x3(eulxyz));
|
|
||||||
gameobj->NodeSetLocalScale(scale);
|
|
||||||
gameobj->NodeUpdateGS(0,true);
|
|
||||||
}*/
|
|
||||||
//rcruiz>
|
|
||||||
|
|
||||||
|
|
||||||
templist->Release();
|
templist->Release();
|
||||||
sumolist->Release();
|
sumolist->Release();
|
||||||
|
|
||||||
|
|
||||||
int executePriority=0; /* incremented by converter routines */
|
int executePriority=0; /* incremented by converter routines */
|
||||||
|
|
||||||
// convert global sound stuff
|
// convert global sound stuff
|
||||||
|
@ -77,6 +77,8 @@
|
|||||||
#include "DNA_world_types.h"
|
#include "DNA_world_types.h"
|
||||||
#include "BKE_main.h"
|
#include "BKE_main.h"
|
||||||
|
|
||||||
|
#include "BLI_arithb.h"
|
||||||
|
|
||||||
extern "C"
|
extern "C"
|
||||||
{
|
{
|
||||||
#include "DNA_object_types.h"
|
#include "DNA_object_types.h"
|
||||||
@ -560,7 +562,8 @@ IpoCurve* findIpoCurve(IpoCurve* first,char* searchName)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
Ipo* KX_BlenderSceneConverter::findIpoForName(char* objName)
|
// this is not longer necesary //rcruiz
|
||||||
|
/*Ipo* KX_BlenderSceneConverter::findIpoForName(char* objName)
|
||||||
{
|
{
|
||||||
Ipo* ipo_iter = (Ipo*)m_maggie->ipo.first;
|
Ipo* ipo_iter = (Ipo*)m_maggie->ipo.first;
|
||||||
|
|
||||||
@ -574,7 +577,7 @@ Ipo* KX_BlenderSceneConverter::findIpoForName(char* objName)
|
|||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
void KX_BlenderSceneConverter::ResetPhysicsObjectsAnimationIpo(bool clearIpo)
|
void KX_BlenderSceneConverter::ResetPhysicsObjectsAnimationIpo(bool clearIpo)
|
||||||
{
|
{
|
||||||
@ -600,29 +603,35 @@ void KX_BlenderSceneConverter::ResetPhysicsObjectsAnimationIpo(bool clearIpo)
|
|||||||
if (blenderObject)
|
if (blenderObject)
|
||||||
{
|
{
|
||||||
//erase existing ipo's
|
//erase existing ipo's
|
||||||
Ipo* ipo = findIpoForName(blenderObject->id.name+2);
|
Ipo* ipo = blenderObject->ipo;//findIpoForName(blenderObject->id.name+2);
|
||||||
if (ipo)
|
if (ipo)
|
||||||
{
|
{ //clear the curve data
|
||||||
//clear the curve data
|
if (clearIpo){//rcruiz
|
||||||
if (clearIpo){
|
IpoCurve *icu1;
|
||||||
IpoCurve *icu1;
|
|
||||||
int numCurves = 0;
|
int numCurves = 0;
|
||||||
for( icu1 = (IpoCurve*)ipo->curve.first; icu1; ) {
|
for( icu1 = (IpoCurve*)ipo->curve.first; icu1; ) {
|
||||||
|
|
||||||
IpoCurve* tmpicu = icu1;
|
IpoCurve* tmpicu = icu1;
|
||||||
icu1 = icu1->next;
|
|
||||||
numCurves++;
|
/*int i;
|
||||||
|
BezTriple *bezt;
|
||||||
|
for( bezt = tmpicu->bezt, i = 0; i < tmpicu->totvert; i++, bezt++){
|
||||||
|
printf("(%f,%f,%f),(%f,%f,%f),(%f,%f,%f)\n",bezt->vec[0][0],bezt->vec[0][1],bezt->vec[0][2],bezt->vec[1][0],bezt->vec[1][1],bezt->vec[1][2],bezt->vec[2][0],bezt->vec[2][1],bezt->vec[2][2]);
|
||||||
|
}*/
|
||||||
|
|
||||||
|
icu1 = icu1->next;
|
||||||
|
numCurves++;
|
||||||
|
|
||||||
BLI_remlink( &( blenderObject->ipo->curve ), tmpicu );
|
BLI_remlink( &( blenderObject->ipo->curve ), tmpicu );
|
||||||
if( tmpicu->bezt )
|
if( tmpicu->bezt )
|
||||||
MEM_freeN( tmpicu->bezt );
|
MEM_freeN( tmpicu->bezt );
|
||||||
MEM_freeN( tmpicu );
|
MEM_freeN( tmpicu );
|
||||||
localDel_ipoCurve( tmpicu ,m_sipo);
|
localDel_ipoCurve( tmpicu ,m_sipo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
{
|
{ ipo = add_ipo(blenderObject->id.name+2, ID_OB);
|
||||||
ipo = add_ipo(blenderObject->id.name+2, ID_OB);
|
|
||||||
blenderObject->ipo = ipo;
|
blenderObject->ipo = ipo;
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -643,6 +652,48 @@ void KX_BlenderSceneConverter::ResetPhysicsObjectsAnimationIpo(bool clearIpo)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void KX_BlenderSceneConverter::resetNoneDynamicObjectToIpo(){
|
||||||
|
|
||||||
|
if (addInitFromFrame){
|
||||||
|
KX_SceneList* scenes = m_ketsjiEngine->CurrentScenes();
|
||||||
|
int numScenes = scenes->size();
|
||||||
|
if (numScenes>=0){
|
||||||
|
KX_Scene* scene = scenes->at(0);
|
||||||
|
CListValue* parentList = scene->GetRootParentList();
|
||||||
|
for (int ix=0;ix<parentList->GetCount();ix++){
|
||||||
|
KX_GameObject* gameobj = (KX_GameObject*)parentList->GetValue(ix);
|
||||||
|
if (!gameobj->IsDynamic()){
|
||||||
|
Object* blenderobject = FindBlenderObject(gameobj);
|
||||||
|
if (!blenderobject)
|
||||||
|
continue;
|
||||||
|
if (blenderobject->type==OB_ARMATURE)
|
||||||
|
continue;
|
||||||
|
float eu[3];
|
||||||
|
Mat4ToEul(blenderobject->obmat,eu);
|
||||||
|
MT_Point3 pos = MT_Point3(
|
||||||
|
blenderobject->obmat[3][0],
|
||||||
|
blenderobject->obmat[3][1],
|
||||||
|
blenderobject->obmat[3][2]
|
||||||
|
);
|
||||||
|
MT_Vector3 eulxyz = MT_Vector3(
|
||||||
|
eu[0],
|
||||||
|
eu[1],
|
||||||
|
eu[2]
|
||||||
|
);
|
||||||
|
MT_Vector3 scale = MT_Vector3(
|
||||||
|
blenderobject->size[0],
|
||||||
|
blenderobject->size[1],
|
||||||
|
blenderobject->size[2]
|
||||||
|
);
|
||||||
|
gameobj->NodeSetLocalPosition(pos);
|
||||||
|
gameobj->NodeSetLocalOrientation(MT_Matrix3x3(eulxyz));
|
||||||
|
gameobj->NodeSetLocalScale(scale);
|
||||||
|
gameobj->NodeUpdateGS(0,true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#define TEST_HANDLES_GAME2IPO 0
|
#define TEST_HANDLES_GAME2IPO 0
|
||||||
|
|
||||||
@ -797,9 +848,8 @@ void KX_BlenderSceneConverter::WritePhysicsObjectToAnimationIpo(int frameNumber)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -76,7 +76,7 @@ class KX_BlenderSceneConverter : public KX_ISceneConverter
|
|||||||
bool m_usemat;
|
bool m_usemat;
|
||||||
|
|
||||||
void localDel_ipoCurve ( IpoCurve * icu ,struct SpaceIpo* sipo);
|
void localDel_ipoCurve ( IpoCurve * icu ,struct SpaceIpo* sipo);
|
||||||
struct Ipo* findIpoForName(char* objName);
|
// struct Ipo* findIpoForName(char* objName);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
KX_BlenderSceneConverter(
|
KX_BlenderSceneConverter(
|
||||||
@ -132,6 +132,9 @@ public:
|
|||||||
|
|
||||||
virtual void ResetPhysicsObjectsAnimationIpo(bool clearIpo);
|
virtual void ResetPhysicsObjectsAnimationIpo(bool clearIpo);
|
||||||
|
|
||||||
|
///this is for reseting the position,rotation and scale of the gameobjet that is not dynamic
|
||||||
|
virtual void resetNoneDynamicObjectToIpo();
|
||||||
|
|
||||||
///this generates ipo curves for position, rotation, allowing to use game physics in animation
|
///this generates ipo curves for position, rotation, allowing to use game physics in animation
|
||||||
virtual void WritePhysicsObjectToAnimationIpo(int frameNumber);
|
virtual void WritePhysicsObjectToAnimationIpo(int frameNumber);
|
||||||
virtual void TestHandlesPhysicsObjectToAnimationIpo();
|
virtual void TestHandlesPhysicsObjectToAnimationIpo();
|
||||||
|
@ -86,7 +86,8 @@ void KX_BulletPhysicsController::ApplyForce(const MT_Vector3& force,bool local)
|
|||||||
MT_Vector3 KX_BulletPhysicsController::GetLinearVelocity()
|
MT_Vector3 KX_BulletPhysicsController::GetLinearVelocity()
|
||||||
{
|
{
|
||||||
float angVel[3];
|
float angVel[3];
|
||||||
CcdPhysicsController::GetAngularVelocity(angVel[0],angVel[1],angVel[2]);
|
//CcdPhysicsController::GetAngularVelocity(angVel[0],angVel[1],angVel[2]);
|
||||||
|
CcdPhysicsController::GetLinearVelocity(angVel[0],angVel[1],angVel[2]);//rcruiz
|
||||||
return MT_Vector3(angVel[0],angVel[1],angVel[2]);
|
return MT_Vector3(angVel[0],angVel[1],angVel[2]);
|
||||||
}
|
}
|
||||||
MT_Vector3 KX_BulletPhysicsController::GetVelocity(const MT_Point3& pos)
|
MT_Vector3 KX_BulletPhysicsController::GetVelocity(const MT_Point3& pos)
|
||||||
|
@ -59,14 +59,18 @@ public:
|
|||||||
|
|
||||||
virtual void SetNewFileName(const STR_String& filename) = 0;
|
virtual void SetNewFileName(const STR_String& filename) = 0;
|
||||||
virtual bool TryAndLoadNewFile() = 0;
|
virtual bool TryAndLoadNewFile() = 0;
|
||||||
|
bool addInitFromFrame;//rcruiz
|
||||||
|
|
||||||
virtual void ResetPhysicsObjectsAnimationIpo(bool clearIpo) = 0;
|
virtual void ResetPhysicsObjectsAnimationIpo(bool clearIpo) = 0;
|
||||||
|
|
||||||
|
|
||||||
///this generates ipo curves for position, rotation, allowing to use game physics in animation
|
///this generates ipo curves for position, rotation, allowing to use game physics in animation
|
||||||
virtual void WritePhysicsObjectToAnimationIpo(int frameNumber) = 0;
|
virtual void WritePhysicsObjectToAnimationIpo(int frameNumber) = 0;
|
||||||
virtual void TestHandlesPhysicsObjectToAnimationIpo() = 0;
|
virtual void TestHandlesPhysicsObjectToAnimationIpo() = 0;
|
||||||
|
|
||||||
|
///this is for reseting the position,rotation and scale of the gameobjet that is not dynamic
|
||||||
|
virtual void resetNoneDynamicObjectToIpo()=0;
|
||||||
|
|
||||||
// use blender materials
|
// use blender materials
|
||||||
virtual void SetMaterials(bool val) =0;
|
virtual void SetMaterials(bool val) =0;
|
||||||
virtual bool GetMaterials()=0;
|
virtual bool GetMaterials()=0;
|
||||||
|
@ -394,6 +394,9 @@ else
|
|||||||
* the settings for that preceed the logic and physics
|
* the settings for that preceed the logic and physics
|
||||||
* update. */
|
* update. */
|
||||||
m_logger->StartLog(tc_logic, m_kxsystem->GetTimeInSeconds(), true);
|
m_logger->StartLog(tc_logic, m_kxsystem->GetTimeInSeconds(), true);
|
||||||
|
|
||||||
|
m_sceneconverter->resetNoneDynamicObjectToIpo();//this is for none dynamic objects with ipo
|
||||||
|
|
||||||
scene->UpdateObjectActivity();
|
scene->UpdateObjectActivity();
|
||||||
|
|
||||||
if (!scene->IsSuspended())
|
if (!scene->IsSuspended())
|
||||||
@ -456,7 +459,7 @@ else
|
|||||||
|
|
||||||
|
|
||||||
if (m_game2ipo)
|
if (m_game2ipo)
|
||||||
{
|
{
|
||||||
m_sceneconverter->WritePhysicsObjectToAnimationIpo(++m_currentFrame);
|
m_sceneconverter->WritePhysicsObjectToAnimationIpo(++m_currentFrame);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1002,7 +1002,10 @@ PHY_IPhysicsController* CcdPhysicsEnvironment::CreateSphereController(float radi
|
|||||||
|
|
||||||
int CcdPhysicsEnvironment::createConstraint(class PHY_IPhysicsController* ctrl0,class PHY_IPhysicsController* ctrl1,PHY_ConstraintType type,
|
int CcdPhysicsEnvironment::createConstraint(class PHY_IPhysicsController* ctrl0,class PHY_IPhysicsController* ctrl1,PHY_ConstraintType type,
|
||||||
float pivotX,float pivotY,float pivotZ,
|
float pivotX,float pivotY,float pivotZ,
|
||||||
float axisX,float axisY,float axisZ)
|
float axisX,float axisY,float axisZ,
|
||||||
|
float axis1X,float axis1Y,float axis1Z,
|
||||||
|
float axis2X,float axis2Y,float axis2Z
|
||||||
|
)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
@ -1066,9 +1069,12 @@ int CcdPhysicsEnvironment::createConstraint(class PHY_IPhysicsController* ctrl
|
|||||||
btTransform frameInA;
|
btTransform frameInA;
|
||||||
btTransform frameInB;
|
btTransform frameInB;
|
||||||
|
|
||||||
btVector3 axis1, axis2;
|
btVector3 axis1(axis1X,axis1Y,axis1Z), axis2(axis2X,axis2Y,axis2Z);
|
||||||
btPlaneSpace1( axisInA, axis1, axis2 );
|
if (axis1.length() == 0.0)
|
||||||
|
{
|
||||||
|
btPlaneSpace1( axisInA, axis1, axis2 );
|
||||||
|
}
|
||||||
|
|
||||||
frameInA.getBasis().setValue( axisInA.x(), axis1.x(), axis2.x(),
|
frameInA.getBasis().setValue( axisInA.x(), axis1.x(), axis2.x(),
|
||||||
axisInA.y(), axis1.y(), axis2.y(),
|
axisInA.y(), axis1.y(), axis2.y(),
|
||||||
axisInA.z(), axis1.z(), axis2.z() );
|
axisInA.z(), axis1.z(), axis2.z() );
|
||||||
|
@ -117,7 +117,10 @@ protected:
|
|||||||
|
|
||||||
virtual int createConstraint(class PHY_IPhysicsController* ctrl,class PHY_IPhysicsController* ctrl2,PHY_ConstraintType type,
|
virtual int createConstraint(class PHY_IPhysicsController* ctrl,class PHY_IPhysicsController* ctrl2,PHY_ConstraintType type,
|
||||||
float pivotX,float pivotY,float pivotZ,
|
float pivotX,float pivotY,float pivotZ,
|
||||||
float axisX,float axisY,float axisZ);
|
float axisX,float axisY,float axisZ,
|
||||||
|
float axis1X=0,float axis1Y=0,float axis1Z=0,
|
||||||
|
float axis2X=0,float axis2Y=0,float axis2Z=0
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
//Following the COLLADA physics specification for constraints
|
//Following the COLLADA physics specification for constraints
|
||||||
|
@ -93,7 +93,11 @@ void DummyPhysicsEnvironment::setGravity(float x,float y,float z)
|
|||||||
|
|
||||||
|
|
||||||
int DummyPhysicsEnvironment::createConstraint(class PHY_IPhysicsController* ctrl,class PHY_IPhysicsController* ctrl2,PHY_ConstraintType type,
|
int DummyPhysicsEnvironment::createConstraint(class PHY_IPhysicsController* ctrl,class PHY_IPhysicsController* ctrl2,PHY_ConstraintType type,
|
||||||
float pivotX,float pivotY,float pivotZ,float axisX,float axisY,float axisZ)
|
float pivotX,float pivotY,float pivotZ,float axisX,float axisY,float axisZ,
|
||||||
|
float axis1X,float axis1Y,float axis1Z,
|
||||||
|
float axis2X,float axis2Y,float axis2Z
|
||||||
|
|
||||||
|
)
|
||||||
{
|
{
|
||||||
|
|
||||||
int constraintid = 0;
|
int constraintid = 0;
|
||||||
|
@ -59,7 +59,10 @@ public:
|
|||||||
|
|
||||||
virtual int createConstraint(class PHY_IPhysicsController* ctrl,class PHY_IPhysicsController* ctrl2,PHY_ConstraintType type,
|
virtual int createConstraint(class PHY_IPhysicsController* ctrl,class PHY_IPhysicsController* ctrl2,PHY_ConstraintType type,
|
||||||
float pivotX,float pivotY,float pivotZ,
|
float pivotX,float pivotY,float pivotZ,
|
||||||
float axisX,float axisY,float axisZ);
|
float axisX,float axisY,float axisZ,
|
||||||
|
float axis1X=0,float axis1Y=0,float axis1Z=0,
|
||||||
|
float axis2X=0,float axis2Y=0,float axis2Z=0
|
||||||
|
);
|
||||||
|
|
||||||
virtual void removeConstraint(int constraintid);
|
virtual void removeConstraint(int constraintid);
|
||||||
|
|
||||||
|
@ -111,7 +111,11 @@ int SumoPhysicsEnvironment::createConstraint(
|
|||||||
class PHY_IPhysicsController* ctrl2,
|
class PHY_IPhysicsController* ctrl2,
|
||||||
PHY_ConstraintType type,
|
PHY_ConstraintType type,
|
||||||
float pivotX,float pivotY,float pivotZ,
|
float pivotX,float pivotY,float pivotZ,
|
||||||
float axisX,float axisY,float axisZ)
|
float axisX,float axisY,float axisZ,
|
||||||
|
float axis1X,float axis1Y,float axis1Z,
|
||||||
|
float axis2X,float axis2Y,float axis2Z
|
||||||
|
|
||||||
|
)
|
||||||
{
|
{
|
||||||
int constraintid = 0;
|
int constraintid = 0;
|
||||||
return constraintid;
|
return constraintid;
|
||||||
|
@ -64,7 +64,11 @@ public:
|
|||||||
virtual void setGravity(float x,float y,float z);
|
virtual void setGravity(float x,float y,float z);
|
||||||
virtual int createConstraint(class PHY_IPhysicsController* ctrl,class PHY_IPhysicsController* ctrl2,PHY_ConstraintType type,
|
virtual int createConstraint(class PHY_IPhysicsController* ctrl,class PHY_IPhysicsController* ctrl2,PHY_ConstraintType type,
|
||||||
float pivotX,float pivotY,float pivotZ,
|
float pivotX,float pivotY,float pivotZ,
|
||||||
float axisX,float axisY,float axisZ);
|
float axisX,float axisY,float axisZ,
|
||||||
|
float axis1X=0,float axis1Y=0,float axis1Z=0,
|
||||||
|
float axis2X=0,float axis2Y=0,float axis2Z=0
|
||||||
|
|
||||||
|
);
|
||||||
|
|
||||||
virtual void removeConstraint(int constraintid);
|
virtual void removeConstraint(int constraintid);
|
||||||
|
|
||||||
|
@ -86,7 +86,10 @@ class PHY_IPhysicsEnvironment
|
|||||||
|
|
||||||
virtual int createConstraint(class PHY_IPhysicsController* ctrl,class PHY_IPhysicsController* ctrl2,PHY_ConstraintType type,
|
virtual int createConstraint(class PHY_IPhysicsController* ctrl,class PHY_IPhysicsController* ctrl2,PHY_ConstraintType type,
|
||||||
float pivotX,float pivotY,float pivotZ,
|
float pivotX,float pivotY,float pivotZ,
|
||||||
float axisX,float axisY,float axisZ)=0;
|
float axis0X,float axis0Y,float axis0Z,
|
||||||
|
float axis1X=0,float axis1Y=0,float axis1Z=0,
|
||||||
|
float axis2X=0,float axis2Y=0,float axis2Z=0
|
||||||
|
)=0;
|
||||||
virtual void removeConstraint(int constraintid)=0;
|
virtual void removeConstraint(int constraintid)=0;
|
||||||
virtual float getAppliedImpulse(int constraintid){ return 0.f;}
|
virtual float getAppliedImpulse(int constraintid){ return 0.f;}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user