EasyTok/Tokamak - how to detect collision?
Blitz3D Forums/Blitz3D Userlibs/EasyTok/Tokamak - how to detect collision?
Is there a clever way to check whether a RB cube is collided with an AB cube?
Basically I need to know whether a cube is 'sitting' on another cube (the 2nd cube is a flattened larger cube)
Do you look the example : Beginning - Camera Move 01.bb
It's an example with camera moving with physic + collisions
I have EasyTok 1.1 - it does not have that example
??? 1.1 ??? Send me an email at "pagnisola at exequo dot com"
done
not received yet.
Sent again from work this time.
Sended :)
Gotted :-)
Thanks.
There is no Beginning - Camera Move 01.bb exmaple in the 1.3 archive :-(
Hi can someone please explaine how to detect collisions with EasyTok, if I load a mesh
MyMesh=LoadMesh("MyMesh.3ds")
TOK_CreateRBCube("Object",MyMesh,0,0,0,0,0,0,2,2,2,6,"",255,255,255,1,0)
and set it for a Rb object
and if i create a TokCollider ie
Map1=LoadMesh("Map1.b3d")
TOK_CreateTokCollider(Map1,"",Map1,0);,Erase=False
I can see that the collisions work the two object interact with each other but I need know if they have collided.
can anyone help pls ?
That's exactly my point!
You cannot use the Blitz collision detection as we are using dynamic bodies here.
I don't think it can be done.
The only way that i have find to make collisions
is under the example : Beginning - Push Object 01.bb
you can see how the camera can push an object.
Filax,
but that is not good for dymanic colisions.
I know but i have not solutions for the moment :/
I have noticed that TOK_CreateTokCollider has a flag for collision but TOK_CreateRBCube has no flag not sure how to use the collision flag in TOK_CreateTokCollider or even how to get a result from it, anyway I have thought of a possible workaround using Blitz collisions
MyMesh=LoadMesh("MyMesh.3ds")
TOK_CreateRBCube("Object",MyMesh,0,0,0,0,0,0,2,2,2,6,"",255,255,255,1,0)
Map1=LoadMesh("Map1.b3d")
TOK_CreateTokCollider(Map1,"",Map1,0);,Erase=False
freeentity MyMesh
CollisionFlag=createcube(0)
scaleentity CollisionFlag,2,2,2
entityalpha CollisionFlag,0
Repeat
;keep the CollisionFlag entity at same position as the Rb ;object
CollisionFlagX#=(TOK_GetRBY#"Object")
CollisionFlagY#=(TOK_GetRBY#"Object")
CollisionFlagZ#=(TOK_GetRBY#"Object")
positionmeshCollisionFlag,CollisionFlagX,CollisionFlagY,CollisionFlagZ
Until KeyHit (1)
and just check for collisions with the CollisionFlag mesh and the map1 blitz mesh,I have not tested this and am assuming that when you create a Tok_CreateTokCollider mesh that the original biltz mesh is copyed and is still there. anyway this is just a quick idea I will test it tonight.
--
This is a bit better but it is still not detecting a collision on every impact any ideas anyone mabey I need to play around with TOK_RefreshPhysic(.1,2)?
Include "Inc_EasyTOK.bb"
Const Balls=1,Maps=2
Graphics3D 800,600
SetBuffer BackBuffer()
Cam=CreateCamera()
PositionEntity Cam,0,0,-40
Global Light=CreateLight()
PositionEntity Light,0,50,-10
TOK_InitWorld(0,-.6,0,1000,100)
Ball1=CreateSphere()
EntityType(ball1,Balls)
TOK_CreateRBSphere("Ball",Ball1,0,0,0,0,0,0,1,.2,"",255,255,255,1,0)
FreeEntity Ball1
Global Map=CreateCube()
ScaleEntity Map,2,2,2
EntityType Map,Maps
EntityColor Map,255,0,0
PositionEntity Map,0,-20,0
TOK_CreateTokCollider(Map,"",Map,Maps,0); Set the collision type to maps
Collisions Balls,Maps,2,2
Repeat
UpdateWorld()
TOK_RefreshPhysic(.1,2)
TOK_RefreshEasyTOK()
RenderWorld()
If EntityCollided(TOK_GetRBMesh("Ball"),Maps)
TOK_ApplyImpulse("ball",0,.5,0)
EndIf
Flip
Until KeyHit(1)
TOK_FreePhysic()
End
You must know bain that blit have many many problems with collisions and moving objects :( In pure blitz detect
collisions with animated objects is the hell, so with
tokamak ...