radsun
21-02-2008 19:36:15
I have three OgreOde::Body:
-player
-monster
-flame
Collision between Body&Plane and Body&Body works ;D
But how can i have a collision event when player collide with flame.
I don't wont him to push it but only do some code...
radsun
21-02-2008 20:54:47
I will read it carefully
If i had any problems i'll write it here
thx for your article
radsun
29-02-2008 06:29:15
I have problem with UserObject.
There's a class 'Kolizja':
class Kolizja
{
public:
Kolizja(int id){ID=id;};
~Kolizja(){};
int GetID() {return ID;}
void SetID(int id) {ID=id;}
private:
int ID;
};
I have 2 geometris an i set them UserObject:
Kolizja* k_hero;
Kolizja* k_au;
k_hero = new Kolizja(0);
k_au = new Kolizja(1);
feetGeom = new OgreOde::SphereGeometry(radius,_world);
...
feetGeom->setUserObject(static_cast<Kolizja*>(k_hero));
OgreOde::BoxGeometry* aunik = new OgreOde::BoxGeometry(Vector3(1,1,1),_world);
...
aunik->setUserObject(static_cast<Kolizja*>(k_au));
This is my collision function. if (g1->getUserObject()) and if (g2->getUserObject()) never returns true and MessageBox never have been showed.
bool collision(OgreOde::Contact* contact)
{
// Check for collisions between things that are connected and ignore them
OgreOde::Geometry * const g1 = contact->getFirstGeometry();
OgreOde::Geometry * const g2 = contact->getSecondGeometry();
if (g1 && g2)
{
const OgreOde::Body * const b1 = g2->getBody();
const OgreOde::Body * const b2 = g1->getBody();
if (b1 && b2 && OgreOde::Joint::areConnected(b1, b2))
return false;
}
//set contact parameters:
contact->setBouncyness(0.1);
contact->setCoulombFriction(OgreOde::Utility::Infinity);
bool Return = true;
if (g1->getUserObject())
{
MessageBox(0,"1",":)",MB_OK);
Return = false;
}
if (g2->getUserObject())
{
MessageBox(0,"2",":)",MB_OK);
Return = false;
}
return Return;
}
When i using it not in collision GetUserObject works ok. For example:
int fds;
if(feetGeom->getUserObject())
{
fds=static_cast<Kolizja*>(feetGeom->getUserObject())->GetID();
if (fds==1)
MessageBox(0,"0",":P",MB_OK);
}
rewb0rn
03-03-2008 21:00:27
The code looks okay to me. Are you sure your geometries actually collide?
radsun
04-03-2008 15:57:54
Yes, the geometry collide, when i return false it not collide.
I think that there is a problem in geometry->getUserObject() in collide function
rewb0rn
04-03-2008 16:03:51
No i mean maybe the geometries that you setUserObjects to never intersect with anything so getUserObject() would always return 0 as the geometries you test don't have any.
radsun
04-03-2008 18:39:46
They have user object:
feetGeom = new OgreOde::SphereGeometry(radius,_world);
...
feetGeom->setUserObject(static_cast<Kolizja*>(k_hero));
and it working but not in Collision.
To check it i used:
if (input->isKeyDown(KC_F9))
{
if(feetGeom->getUserObject())
{
MessageBox(0,"yes","",MB_OK);
}
else
{
MessageBox(0,"no","",MB_OK);
}
}
radsun
04-03-2008 20:05:53
No i mean maybe the geometries that you setUserObjects to never intersect with anything so getUserObject() would always return 0 as the geometries you test don't have any.
You mean that the geometry that i setUserObject() not collide with anything?
i setUserObject to all geo and its working somehow
Now i have 5 geos:
HERO_UP
HERO_DOWN
ROBO_UP
ROBO_DOWN
BOX
HERO_UP and HERO_DOWN are connected usinng joint, same as ROBO_UP&DOWN.
The collision between HERO and ROBO works

but beetwen HERO and BOX not
This is code of declaration BOX:
Kolizja* k_au = new Kolizja(1);
box_body = new OgreOde::Body(_world,"box");
box_body->setPosition(Vector3(0,0,-5));
OgreOde::BoxGeometry* box_geo = new OgreOde::BoxGeometry(Vector3(1,1,1),_world);
box_geo->setUserObject(static_cast<Kolizja*>(k_box));
OgreOde::TransformGeometry* box_trans = new OgreOde::TransformGeometry(_world,_space);
box_trans->setBody(box_body);
box_trans->setEncapsulatedGeometry(box_geo);
Vector3 size3(1,1,1);
size3*=1.75;
OgreOde::BoxMass mass(1.0,size);
mass.setDensity(5.0,size);
box_body->setMass(mass);
is it OK?
rewb0rn
04-03-2008 22:36:55
Set the user object to the TransformGeometry, didn't I mention in the tutorial to do that?
radsun
05-03-2008 14:54:23