andargor
Member
|
Retrieving Actor from PhysHit
I'm trying to select an Actor with the mouse and have the camera center on it, have it be the focus of commands, etc.
I'm using PhysHit and Physics.ray to determine if I clicked on an actor. However, the obj member is null.
actor is defined as private in PhysHit, so I can't access it when doing Physics.ray. I can see it being set properly when debugging.
Code:
//Register click
if(Ms.b(0)) {
Vec screen_pos, screen_dir;
ScreenToPosDir(Ms.pos(), screen_pos, screen_dir);
// now having world space position and direction we can calculate ray 'start' and 'end' positions
Vec start=screen_pos, end=screen_pos + screen_dir*D.viewRange();
// having ray positions we can perform a ray test
PhysHit phys_hit;
if(Physics.ray(start,end-start,&phys_hit)) { // if ray hit something
D.text(0,0.9f, "Ray has hit an actor");
D.text(0,0.8f,S+"Actor's group: " + phys_hit.group);
D.text(0,0.7f,S+"Actor's user data (index): "+(UIntPtr)phys_hit.user );
// The following is wrong, what to do?
Actor *act = CAST(Actor, phys_hit.obj);
if (act != NULL) {
selected_obj = act;
}
} else {
D.text(0,0.9f,"Ray hasn't hit anything");
}
}
(This post was last modified: 04-24-2011 08:10 PM by andargor.)
|
|
04-24-2011 08:09 PM |
|
Mardok
Member
|
RE: Retrieving Actor from PhysHit
Code:
actor.user(&actor);
Actor *act = reinterpret_cast<Actor*>(physhit.user);
//but it's wrong way
//if you are using CAST and physhit.obj then you should create your own class based on Game::Obj
Code:
STRUCT(YourClass, Game::Obj)
//{
Actor your_actor;
};
YourClass *pObj;
if(Game::Obj *detected = CAST(YourClass, physhit.obj))
pObj = physhit.obj;
pObj->your_actor;
(This post was last modified: 04-24-2011 09:06 PM by Mardok.)
|
|
04-24-2011 09:00 PM |
|
andargor
Member
|
RE: Retrieving Actor from PhysHit
Thanks! I'll try that out.
|
|
04-24-2011 10:10 PM |
|