Driving Code
Blitz3D Forums/Blitz3D Programming/Driving Code
| ||
Here's code for "walking" using keyboard, driving a "vehicle" using a wheel/pedal set (Logitech Driving Force Pro), and flying an "airplane" using a joystick (Microsoft Force Feedback 2 Joystick). Any suggestions for simple flight physics using the simple driving physics code?
While Not KeyDown(1)
If KeyDown(59)= True Then mode=0:modestring="Walk"
If KeyDown(60)= True Then mode=1:modestring="Drive"
If KeyDown(61)= True Then mode=2:modestring="Fly"
If mode=0 Then
If KeyDown(205)=True Then TurnEntity camera,0,-0.25,0
If KeyDown(203)=True Then TurnEntity camera,0,0.25,0
If KeyDown(208)=True Then MoveEntity camera,0,0,-0.1
If KeyDown(200)=True Then MoveEntity camera,0,0,0.1
EndIf
If mode=1 Then
If JoyHit(13,1) Then gear=gear-1:If gear<-1 Then gear=-1
If JoyHit(14,1) Then gear=gear+1:If gear>1 Then gear=1
If gear=-1 Then gearstring="Reverse"
If gear=0 Then gearstring="Neutral"
If gear=1 Then gearstring="Drive"
If JoyY(1) < -0.05
If gear=1
speed=speed+0.005
If speed>2 Then speed=2
MoveEntity camera,0,0,speed
End If
If gear=-1
speed=speed-0.005
If speed<-0.5 Then speed=-0.5
MoveEntity camera,0,0,speed
EndIf
End If
If JoyY(1) > 0.05
speed=speed-0.01
If speed<0 Then speed=0
If speed>0 Then speed=speed*0.97
MoveEntity camera,0,0,speed
End If
If JoyY(1) > -0.05 And JoyY(1) < 0.05
speed=speed*0.99
MoveEntity camera,0,0,speed
End If
If JoyX(1) < -0.05
steer=-JoyX(1)/2
If steer>0.5 Then steer=0.5
TurnEntity camera,0,steer,0
End If
If JoyX(1) > 0.05
steer=-JoyX(1)/2
If steer<-0.5 Then steer=-0.5
TurnEntity camera,0,steer,0
End If
If JoyX(1) > -0.05 And JoyX(1) < 0.05 Then steer=0
EndIf
If mode=2 Then
throttle=(JoyU(0)-1) * -0.5
If (throttle > 0.1 And JoyX(0) < -0.1) Then TurnEntity camera,0,-JoyX(0),0
If (throttle > 0.1 And JoyX(0) > 0.1) Then TurnEntity camera,0,-JoyX(0),0
If (throttle > 0.1 And JoyY(0) < -0.1) Then MoveEntity camera,0,JoyY(0),0
If (throttle > 0.1 And JoyY(0) > 0.1) Then MoveEntity camera,0,JoyY(0),0
If throttle > 0.1 Then MoveEntity camera,0,0,throttle * 2
EndIf
UpdateWorld
RenderWorld
Text 0,0,"Mode:"+modestring
If mode=1 Then Text 0,15,"Car speed:"+speed*100
If mode=1 Then Text 0,30,"Gear:"+gearstring
Flip
Wend
|
| ||
| Change the maths :P These may help: (or not) http://www.ucmp.berkeley.edu/vertebrates/flight/physics.html http://user.uni-frankfurt.de/~weltner/Flight/PHYSIC4.htm Lol dont ask me how tho' im crap at maths |
| ||
When I change modes to walk, drive, or fly, I need to reset the values to 0 the first time in a loop after changing the mode. For example, I'm driving a car to the airport and switch to an airplane. I need to save the values for the modes that I switch from, reset the values to 0 the first time in a loop, and when I switch from airplane to car, restore the values. Here's the latest code:
While Not KeyDown(1)
If KeyDown(59)= True Then mode=0:modestring="Walk"
If KeyDown(60)= True Then mode=1:modestring="Drive"
If KeyDown(61)= True Then mode=2:modestring="Fly"
If mode=0 Then
If KeyDown(205)=True Then TurnEntity camera,0,-0.25,0
If KeyDown(203)=True Then TurnEntity camera,0,0.25,0
If KeyDown(208)=True Then MoveEntity camera,0,0,-0.1
If KeyDown(200)=True Then MoveEntity camera,0,0,0.1
EndIf
If mode=1 Then
If JoyHit(13,1) Then gear=gear-1:If gear<-1 Then gear=-1
If JoyHit(14,1) Then gear=gear+1:If gear>1 Then gear=1
If gear=-1 Then gearstring="Reverse"
If gear=0 Then gearstring="Neutral"
If gear=1 Then gearstring="Drive"
If JoyY(1) < -0.05
If gear=1
speed=speed+0.005
If speed>2 Then speed=2
MoveEntity camera,0,0,speed
End If
If gear=-1
speed=speed-0.005
If speed<-0.5 Then speed=-0.5
MoveEntity camera,0,0,speed
EndIf
End If
If JoyY(1) > 0.05
speed=speed-0.01
If speed<0 Then speed=0
If speed>0 Then speed=speed*0.99
MoveEntity camera,0,0,speed
End If
If JoyY(1) > -0.05 And JoyY(1) < 0.05
speed=speed*0.99
MoveEntity camera,0,0,speed
End If
If JoyX(1) < -0.05
steer=-JoyX(1)/2
If steer>0.5 Then steer=0.5
TurnEntity camera,0,steer,0
End If
If JoyX(1) > 0.05
steer=-JoyX(1)/2
If steer<-0.5 Then steer=-0.5
TurnEntity camera,0,steer,0
End If
If JoyX(1) > -0.05 And JoyX(1) < 0.05 Then steer=0
EndIf
If mode=2 Then
throttle=(JoyU(0)-1) * -0.5
If throttle>0
speed=speed+0.1
MoveEntity camera,0,0,speed
End If
If JoyY(0) < -0.05
height=height-0.01
MoveEntity camera,0,height,speed
End If
If JoyY(0) > 0.05
height=height+0.01
MoveEntity camera,0,height,speed
End If
If JoyX(0) < 0.05
steer=-JoyX(0)
If steer>0.5 Then steer=0.5
TurnEntity camera,0,steer,0
End If
If JoyX(0) > 0.05
steer=-JoyX(0)
If steer<-0.5 Then steer=-0.5
TurnEntity camera,0,steer,0
End If
If JoyX(0) > -0.05 And JoyX(0) < 0.05 Then steer=0
If JoyY(0) > -0.05 And JoyY(0) < 0.05
speed=speed*0.99
MoveEntity camera,0,0,speed
End If
If throttle=0
speed=speed*0.99
height=height*0.99
MoveEntity camera,0,height,speed
End If
EndIf
UpdateWorld
RenderWorld
Text 0,0,"Mode:"+modestring
If mode=1 Then Text 0,15,"Car speed:"+speed*100
If mode=2 Then Text 0,15,"Air speed:"+speed*100
If mode=1 Then Text 0,30,"Gear:"+gearstring
If mode=2 Then Text 0,30,"Height:"+height
If mode=2 Then Text 0,45,"Throttle:"+throttle
Flip
Wend
|
| ||
| - use arrays - Change the 'mode' system => include an increment if keydown(...) lastmode=mode:mode=10; walk if keydown(...) lastmode=mode:mode=20; drive if keydown(...) lastmode=mode:mode=30; fly select mode case 10 ;record values in the array value1[LastMode]=value ... etc... mode=1 case 20 ; record values ... etc... end select |