thx guys :)
I have stated to integrate a kind of interface with minib3d so my current test code looks like this (everything oop yet, but I will provide procedural functions later).
I'm interrested what you guys currently think about how it looks in the code: (easiness, readability etc.)
Framework sidesign.minib3d
Strict
Local width=640,height=480,depth=16,mode=0
Graphics3D width,height,depth,mode
Local cam:TCamera=CreateCamera()
PositionEntity cam,0,0,-15
Local light:TLight=CreateLight()
RotateEntity light,45,0,0
' used by camera code
Local mxs#=0
Local mys#=0
Local move#=0.5
MouseXSpeed() ' flush
MouseYSpeed() ' flush
' used by fps code
Local old_ms=MilliSecs()
Local renders
Local fps
Local Physic:TPhysic = TPhysic.Init() 'Will disapear to the inernals
'This will be replaced and also disapear
Local MatID:Int = NewtonMaterialGetDefaultGroupID(TPhysic.World)
NewtonMaterialSetDefaultElasticity(TPhysic.World,MatID,MatID,.6)
SeedRnd(MilliSecs())
'Creating some Balls and cubes to play with
For Local I:Int = 0 To 200
If Rand(10) < 5 Then
Local sphere:TMesh=CreateSphere()
EntityRadius sphere,2
EntityPickMode sphere,2
PositionEntity sphere,Rnd(-20,20),Rnd(0,100),Rnd(-20,20)
EntityColor(sphere,Rand(255),Rand(255),Rand(255))
Local NSphere:TNewtonObject = TNewtonObject.Create(Sphere,PHYS_SPHERE_HULL) 'Create the Collision Hull (Parameters are set automatically)
NSphere.SetMass(1.0,1.0,1.0,1.0) ' Make it movable and a accurate ball
Physic.AddObject(NSphere) 'Give it to the Physic engine
Else
Local cube:TMesh=CreateCube()
EntityRadius cube,2
EntityPickMode cube,2
PositionEntity cube,Rnd(-20,20),Rnd(0,100),Rnd(-20,20)
EntityColor(cube,Rand(255),Rand(255),Rand(255))
Local NCube:TNewtonObject = TNewtonObject.Create(cube,PHYS_BOX_HULL) 'Create the Collision Hull (Parameters are set automatically)
NCube.SetMass(1.0,1.0,1.0,1.0) ' Make it movable and a accurate cube
Physic.AddObject(NCube) 'Give it to the Physic engine
EndIf
Next
Local Plane:TMesh = CreateCube()
PositionEntity(Plane,0,-30,0)
ScaleEntity(Plane,80,5,80)
EntityColor plane,20,100,30
Local NPlane:TNewtonObject = TNewtonObject.Create(Plane,PHYS_BOX_HULL)
NPlane.SetMass(0.0,0.0,0.0,0.0) ' Set it solid
Physic.AddObject(NPlane) 'Give it to the Physic engine
Local Timestep:Int = MilliSecs()
Global pick:TEntity
While Not KeyDown(KEY_ESCAPE)
Pick = Null
If KeyHit(KEY_ENTER) Then DebugStop
'' control camera
' mouse look
mxs#=mxs#+(MouseXSpeed()/5.0)
mys#=mys#+(MouseYSpeed()/5.0)
RotateEntity cam,mys#,-mxs#,0
If KeyDown(KEY_SPACE)=False
MoveMouse width/2,height/2
MouseXSpeed() ' flush
MouseYSpeed() ' flush
EndIf
' move camera forwards/backwards/left/right with cursor keys
If KeyDown(KEY_UP)=True Then MoveEntity cam,0,0,move# ' move camera forward
If KeyDown(KEY_DOWN)=True Then MoveEntity cam,0,0,-move# ' move camera back
If KeyDown(KEY_LEFT)=True Then MoveEntity cam,-move#,0,0 ' move camera left
If KeyDown(KEY_RIGHT)=True Then MoveEntity cam,move#,0,0 ' move camera right
' if mousehit then perform camerapick
If MouseHit(1)
pick=CameraPick(cam,MouseX(),MouseY())
If pick<>Null
Local XP:Float = Rnd(-15.0,15.0)
Local YP:Float = Rnd(-15.0,15.0)
Local ZP:Float = Rnd(-15.0,15.0)
' Apply a random impulse to the picked ball
Physic.ApplyImpulse(pick,PickedX(),PickedY(),PickedZ(),XP,YP,ZP)
EndIf
EndIf
Physic.Update() ' Update the physics (Update time is automatically calculated and passed as Deltatime within the engine)
UpdateWorld()
RenderWorld()
renders=renders+1
If MilliSecs()-old_ms>=1000
old_ms=MilliSecs()
fps=renders
renders=0
EndIf
SetBlend AlphaBlend
Text 0,0,"FPS: "+String(fps)
Flip
Wend
End
|