Graphics3D 640,480,16,1
Const Upkey = 200
Const DownKey = 208
Const LeftKey = 203
Const Rightkey = 205
Global Camera = CreateCamera()
PositionEntity Camera,0,0,-150
Type Player
Field Model
Field SpeedX#
Field SpeedY#
Field TurnSpeed#
Field TurnDrag#
Field TurnAcceleration#
Field MoveDrag#
Field MoveAcceleration#
Field MoveDeceleration#
End Type
Global ME.player = PLAYERcreate()
;main program
While Not KeyDown(1)
PLAYERmove( ME )
RenderWorld()
Flip
Wend
;===============================================
;===============================================
;===============================================
Function PLAYERcreate.Player()
p.player = New Player
p\SpeedX# = 0
p\SpeedY# = 0
p\TurnSpeed# = 0
p\TurnAcceleration# = 0.03
p\TurnDrag# = .99
p\MoveAcceleration# = 0.05
p\MoveDeceleration# = 0.05
p\MoveDrag = .99
;MaxSpeed = .03 / ( 1.0 -.99 ) = 3
;MaxTurnSpeed = .05 / ( 1.0 - .99 ) = 5
p\Model = CreateCone()
ScaleEntity p\Model, 10, 10,10
Return p
End Function
;===============================================
;===============================================
;===============================================
Function PLAYERmove( p.Player )
;turning
Turn# = KeyDown (LeftKey) - KeyDown(RightKey)
p\TurnSpeed# = p\TurnSpeed# *p\TurnDrag + Turn * p\TurnAcceleration
TurnEntity p\Model , 0,0, p\TurnSpeed
;moving
Direction# = KeyDown(UpKey) - KeyDown(DownKey)
TFormNormal 0,1,0, p\Model, 0
Thrust# = ( Direction = 1 ) * p\MoveAcceleration - ( Direction = -1 ) * p\MoveDeceleration
p\SpeedX = p\SpeedX * p\MoveDrag + Thrust * TFormedX()
p\SpeedY = p\SpeedY * p\MoveDrag + Thrust * TFormedY()
TranslateEntity p\Model, p\SpeedX , p\SpeedY , 0
End Function