RaGr; You should take up story writing. That responce was extremly articulate. I love this part "OrcSlayer, this is one of those remarks when you as reader believe you are in a nightmare and not in a programmers forum..." LOL
Orcslayer: Ya once you get into Tokamak, it realy handles things nicely.
Here is a very basic example I did. It was my first thing in tokamak, realy just and expansion of one of the examples, and Bottbuilders code and comments on blitzcoder, and a hackjob of Marks camera in the castle demo. Sorry its kind of messy. Also in a real game I am working on, I am doing a FPS using censors, and is quite stable, and fast, and I use blitz collitions as a backup to tokamaks, and it works ok.
Orcslayer: Ya once you get into Tokamak, it realy handles things nicely.
Here is a very basic example I did. It was my first thing in tokamak, realy just and expansion of one of the examples, and Bottbuilders code and comments on blitzcoder, and a hackjob of Marks camera in the castle demo. Sorry its kind of messy. Also in a real game I am working on, I am doing a FPS using censors, and is quite stable, and fast, and I use blitz collitions as a backup to tokamaks, and it works ok.
Const Rigid_Bodies=30,Animated_Bodies=1 TOKSIM_SetRigidBodiesCount Rigid_Bodies TOKSIM_SetAnimatedBodiesCount Animated_Bodies TOKSIM_SetRigidParticleCount 0 TOKSIM_SetControllersCount 0 TOKSIM_SetGeometriesCount Rigid_bodies+Animated_Bodies ;Assuming each one only has one geometry. Not true with more complex rigid bodies and animated bodies. TOKSIM_CreateSimulator(0,-10,0) ;sets the gravity that acts on rigid bodies SeedRnd MilliSecs() Graphics3D 800,600 Type ChaseCam Field entity,camera,target,heading,sky End Type Const fps=60 l=CreateLight() PositionEntity l,10,20,0 ;centerpoint=CreatePivot() ;Global cam=CreateCamera(centerpoint) ;PositionEntity cam,0,10,-50 ;Setup The scene ground=CreateCube() EntityColor ground,5,5,55 ScaleEntity ground,150,5,150 PositionEntity ground,0,-5,0 ;PointEntity l,centerpoint ;Now, we'll set up the animated body For the ground. In this Case, it never actually moves. abground = TOKAB_Create();TOKAB_Create creates an animated body And returns its Handle. TOKAB_AddBox(abground,300.0,10.0,300.0);TOKAB_AddBox adds a box To the animated body. ;The parameters are AnimatedBody, Width, Height, Depth. TOKAB_SetPosition(abground,0.0,-5.0,0.0);TOKAB_SetPosition sets the position of the animated body. ;The parameters are AnimatedBody, X, Y, Z. ;Here is the rest of the animated bodies setup: ;Next, we create a rigid box.************************************************************************ Dim obj(Rigid_Bodies) ;Create a rigid box Dim rb(Rigid_Bodies) For i=1 To Rigid_Bodies obj(i) = CreateCube() EntityColor obj(i),200,0,0 If i <= 1 Then EntityColor obj(i),255,0,255 EndIf ScaleEntity obj(i),2.0,2.0,2.0 ; rb(i) = TOKRB_Create() ;create rigid body TOKRB_AddBox rb(i),4.0,4.0,4.0 ;width*2,height*2,depth*2 TOKRB_SetPosition rb(i),0,10+(i*3),0 ;x,y,z TOKRB_SetLinearDamping rb(i),0.004 ;0-to-1 TOKRB_SetAngularDamping rb(i),0.01; TOKRB_SetMass rb(i),2.0 TOKRB_SetBoxInertiaTensor rb(i),6.0,6.0,6.0,2.0 ;width*2,height*2,depth*2 PositionEntity obj(i),TOKRB_GetX#(rb(i)),TOKRB_GetY#(rb(i)),TOKRB_GetZ#(rb(i)) Next ;**************************************************************************************************** CreateChaseCam.ChaseCam( obj(1) ) period=1000/FPS time=MilliSecs()-period imptime=MilliSecs() While Not KeyHit(1) Repeat elapsed=MilliSecs()-time Until elapsed ticks=elapsed/period tween#=Float(elapsed Mod period)/Float(period) For k=1 To ticks time=time+period If k=ticks Then CaptureWorld For i=1 To Rigid_Bodies For c.ChaseCam=Each ChaseCam UpdateChaseCam( c ) Next PositionEntity obj(i),TOKRB_GetX#(rb(i)),TOKRB_GetY#(rb(i)),TOKRB_GetZ#(rb(i)) RotateEntity obj(i),TOKRB_GetPitch#(rb(i)),TOKRB_GetYaw#(rb(i)),TOKRB_GetRoll#(rb(i)),False If KeyDown(57) Then TOKRB_ApplyImpulse (rb(i),0,3,0) ;TOKRB_ApplyImpulse2 rb(i),0,0,1,10,10,10 EndIf If KeyDown(200) Then ;upkey TFormVector 0,0,.05,obj(1),0 TOKRB_ApplyImpulse (rb(1),TFormedX#(),TFormedY#(),TFormedZ#()) EndIf If KeyDown(208) Then ;downkey TFormVector 0,0,-.05,obj(1),0 TOKRB_ApplyImpulse (rb(1),TFormedX#(),TFormedY#(),TFormedZ#()) EndIf If KeyDown(205) Then ;rightkey TFormVector 0,10,0,obj(1),0 TOKRB_ApplyTwist (rb(1),0,TFormedY#(),0) EndIf If KeyDown(203) Then ;leftkey TFormVector 0,-10,0,obj(1),0 TOKRB_ApplyTwist (rb(1),0,TFormedY#(),0) EndIf If KeyDown(45) Then ;xkeykey TFormVector -6,0,0,obj(1),0 TOKRB_ApplyTwist (rb(1),TFormedX#(),TFormedY#(),TFormedZ#()) EndIf If KeyDown(44) Then ;zkeykey TFormVector 0,0,-6,obj(1),0 TOKRB_ApplyTwist (rb(1),TFormedX#(),TFormedY#(),TFormedZ#()) EndIf Next EndIf TOKSIM_Advance(1.5/FPS,1) UpdateWorld Next ;For i=1 To Rigid_Bodies ;camx#=Cos(rot#)*50 ;camz#=Sin(rot#)*50 ;PositionEntity centerpoint,EntityX(obj(i)),EntityY(obj(i)),EntityZ(obj(i)) ;rot#=rot#+MouseXSpeed() ;Next ;If rot#>360 Then rot#=0 ;PositionEntity cam,camx#,10,camz# ;PointEntity cam,centerpoint RenderWorld tween Flip False Wend TOKSIM_DestroySimulator() End Function CreateChaseCam.ChaseCam( entity ) c.ChaseCam=New ChaseCam c\entity=entity c\camera=CreateCamera() c\target=CreatePivot( entity ) PositionEntity c\target,0,3,-10 EntityType c\target,TYPE_TARGET c\heading=CreatePivot( entity ) PositionEntity c\heading,0,0,20 ;c\sky=CopyEntity( sky ) Return c End Function Function UpdateChaseCam( c.ChaseCam ) ;If KeyDown(200) ;TranslateEntity c\heading,0,-3,0 ;Else If KeyDown(208) ;TranslateEntity c\heading,0,+3,0 ;EndIf dx#=EntityX(c\target,True)-EntityX(c\camera,True) dy#=EntityY(c\target,True)-EntityY(c\camera,True) dz#=EntityZ(c\target,True)-EntityZ(c\camera,True) ;TranslateEntity c\camera,dx*.01,dy*.01,(dz*.1)+speed*.01 TranslateEntity c\camera,dx,dy,dz PointEntity c\camera,c\heading PositionEntity c\target,0,0,0 ResetEntity c\target PositionEntity c\target,0,3,-20 ;PositionEntity c\sky,EntityX(c\camera),EntityY(c\camera),EntityZ(c\camera) End Function