Declare Init_Enum()
Declare Init_Startup_Variables()
Declare Init_Camera()
Declare Init_Screen()
Declare Make_Terrain()
Declare Control_Mouse()
Declare Control_Keyboard()
Declare Camera_Position_Update()
Declare Load_Model_Reh()
Declare Main_Loop()
Procedure Init_Enum()
Enumeration 100 ; Ab 100 deklarieren wenn man das Skysystem benutzen mag
#Desktop1
#Desktop2
#Cam001
#Sky
#Terrain001
#tex001
#det001
#Reh001
#Reh001_Tex001
EndEnumeration
EndProcedure
Procedure Init_Startup_Variables()
Global MouseX.f, MouseY.f, MouseZ.f
Global RotX.f, RotY.f, RotZ.f
Global PosX.f, PosY.f, PosZ.f
Global VSync=0
Global AAMode=1
Global SyncRate=60
Global Camera_FOV=78
Global Camera_Aspect=0.75
Global Camera_Movement_Speed.f=2.7
Global Camera_LookH_Speed=2
Global Camera_LookV_Speed=2
EndProcedure
Procedure Init_Camera()
dbMakeCamera(#Cam001)
;dbSetCameraAspect(Camera_Aspect,#Cam001)
dbPositionCamera(512, 10, 512,#Cam001)
dbSetCameraFOV(Camera_FOV,#Cam001)
dbSyncRate(SyncRate)
dbBackdropOn(#Cam001)
dbColorBackdrop(0,#Cam001)
dbSetTextFont("arial")
dbSetTextSize(12)
dbSetTextBold()
dbSetTextTransparent()
dbSetBSPCamera(#Cam001)
dbSetBSPMultitexturingOn()
dbSetGlobalShadowsOn()
EndProcedure
Procedure Init_Screen()
dbDisplayChecklist()
Desktop_Anzahl=ExamineDesktops()
Desktop1_B=1024;DesktopWidth(0);DesktopWidth(0)
Desktop1_H=768;DesktopHeight(0);DesktopHeight(0)
OpenWindow(#Desktop1,0,0,Desktop1_B,Desktop1_H,"",#PB_Window_ScreenCentered|#PB_Window_BorderLess)
Global hDBWnd=OpenDBWnd(WindowID(#Desktop1),0,0,Desktop1_B,Desktop1_H)
dbSetDisplayMode(Desktop1_B,Desktop1_H,VSync,AAMode,0)
EndProcedure
;-
;- Terrain / Map Data =======================================
;-
Procedure Make_Terrain()
;dbLoadImage("media\map\tex001.jpg", #tex001)
;dbLoadImage("media\map\det001.bmp", #det001)
dbLoadImage("media\map1\texture.jpg", #tex001)
dbLoadImage("media\map1\detail.jpg", #det001)
dbMakeObjectTerrain(#Terrain001)
;dbSetTerrainHeightMap(#Terrain001,"media\map\001.bmp")
dbSetTerrainHeightMap(#Terrain001,"media\map1\map.bmp")
dbSetTerrainScale(#Terrain001,6,2,6)
dbSetTerrainSplit(#Terrain001,10)
dbSetTerrainTiling(#Terrain001, 10)
dbSetTerrainLight(#Terrain001, 1, -0.25, 0, 1, 1, 0.78, 0.5)
dbSetTerrainTexture(#Terrain001, #tex001, #det001)
dbBuildTerrain(#Terrain001)
dbPositionObject(#Terrain001, 0, 0, 0)
dbConvertObjectFVF(#Terrain001, 530)
dbSetObjectNormals(#Terrain001)
dbSetObjectSmoothing(#Terrain001,100)
dbSetObjectSpecular(#Terrain001,0)
dbSetObjectTexture(#Terrain001,0,2)
dbSetObjectAmbient(#Terrain001,1)
dbSetObjectLight(#Terrain001,1)
EndProcedure
Procedure Make_Sky()
dbLoadObject("media\skybox\box001\sb.x",#Sky)
dbScaleObject(#Sky,40,40,40)
dbSetObjectCull(#Sky,0)
dbSetObjectLight(#Sky,0)
dbSetObjectTexture(#Sky,2,1)
EndProcedure
;-
;- Steuerung ================================================
;-
Procedure Control_Mouse()
MouseX.f=dbMouseX()
MouseY.f=dbMouseY()
RotX.f+MouseX-DesktopWidth(0)/2
RotY.f+MouseY-DesktopHeight(0)/2
If RotY.f > 70
RotY.f = 70
EndIf
If RotY.f < -70
RotY.f = -70
EndIf
EndProcedure
Procedure Control_Keyboard()
If dbKeyState(#VK_W)
dbMoveCamera(Camera_Movement_Speed,#Cam001)
EndIf
If dbKeyState(#VK_S)
dbMoveCamera(-Camera_Movement_Speed,#Cam001)
EndIf
If dbKeyState(#VK_A)
dbTurnCameraLeft(90., #Cam001)
dbMoveCamera(Camera_Movement_Speed,#Cam001)
dbTurnCameraRight(90, #Cam001)
EndIf
If dbKeyState(#VK_D)
dbTurnCameraRight(90, #Cam001)
dbMoveCamera(Camera_Movement_Speed,#Cam001)
dbTurnCameraLeft(Camera_Movement_Speed, #Cam001)
EndIf
EndProcedure
;-
;- Kamera ===================================================
;-
Procedure Camera_Position_Update()
dbSetCameraRotationXYZ(#Cam001)
dbRotateCamera(RotY , RotX , 0, #Cam001)
dbPositionMouse(DesktopWidth(0)/2, DesktopHeight(0)/2)
PosX.f = dbCameraPositionX()
PosZ.f = dbCameraPositionZ()
PosY.f = dbGetTerrainGroundHeight(#Terrain001,PosX.f,PosZ.f)
dbPositionCamera(PosX.f,PosY.f+35,PosZ.f)
EndProcedure
Procedure Sky_Position_Update()
dbPositionObject(#Sky,dbCameraPositionX(#Cam001),dbCameraPositionY(#Cam001)-150,dbCameraPositionZ(#Cam001))
EndProcedure
;-
;- Modelle ==================================================
;-
Procedure Load_Model_Reh()
dbSetGlobalObjectCreation(1)
dbLoadObject("media\models\reh\001.x",#Reh001)
;dbLoadObject("media\models\test\test.x",#Reh001)
dbPositionObject(#Reh001, 1000, 400, 1000)
dbLoadImage("media\models\reh\001.png", #Reh001_Tex001)
dbTextureObject(#Reh001, #Reh001_Tex001)
dbPlayObject(#Reh001)
dbSetObjectSpeed(#Reh001, 6)
dbLoopObject(#Reh001)
dbSetObjectSmoothing(#Reh001, 50)
dbSetObjectCull(#Reh001, 1)
dbSetObjectInterpolation(#Reh001, 50)
EndProcedure
;-
;- Hauptschleife ============================================
;-
Procedure Main_Loop()
dbHideMouse()
Repeat
Event=WindowEvent()
dbUpdatePhysics()
Control_Mouse()
Control_Keyboard()
Camera_Position_Update()
Sky_Position_Update()
fps.s="Client FPS: "+Str(dbScreenFPS())
dbText(dbScreenWidth()-20-dbTextWidth(fps.s),dbScreenHeight()-40,fps.s)
;dbText(20,20,""+Str(dbObjectFrame(#Reh001)))
dbText(0,0,"TERRAIN DATA")
; dbText(0,30,"x:"+Str(dbTerrainPositionX(#Terrain001)))
; dbText(0,45," y:"+Str(dbTerrainPositionY(#Terrain001)))
; dbText(0,60," z:"+Str(dbTerrainPositionZ(#Terrain001)))
; dbText(0,75," height:"+StrF(dbGetTerrainHeight(#Terrain001,PosX.f,PosZ.f)))
; dbText(0,90," totalheight:"+Str(dbGetTotalTerrainHeight(#Terrain001)))
dbText(0,105,"")
dbText(0,120,"CAMERA DATA")
dbText(0,135," x:"+StrF(dbCameraPositionX(#Cam001)))
dbText(0,150," y:"+StrF(dbCameraPositionY(#Cam001)))
dbText(0,165," z:"+StrF(dbCameraPositionZ(#Cam001)))
dbSync()
Until dbKeyState(#VK_ESCAPE)
End
EndProcedure
;-
;- Programm- / Logikablauf ==================================
;-
Init_Enum()
Init_Startup_Variables()
Init_Screen()
Init_Camera()
Make_Terrain()
Make_Sky()
Load_Model_Reh()
Main_Loop()