Code: Alles auswählen
InitEngine3D() ; Init solle klar sein
InitSprite()
InitMouse()
InitKeyboard()
OpenScreen(1024,768,32,"TeStInG...")
Structure Shot ; Structure für die schüsse , die später durch die welt dewegt werden
ID.l
EntityID.l
X.f
Y.f
Z.f
MoveX.f
MoveY.f
MoveZ.f
Speed.f
Damage.l
EndStructure
Global PiOver180 = (ATan(1)*4)/180 ; GLobale variablen , und die liste für die schüsse
Global NewList Shot.Shot()
Procedure AndY_AddShot(ID,Entity,x,y,z,MoveX.f,MoveY.f,MoveZ.f,Speed) ; Soll einen schuss zur der liste hinzufügen
AddElement(Shot()) ; AddElement also added ein element zur liste
Shot()\ID = ID
Shot()\EntityID = Entity
Shot()\X = X
Shot()\Y = Y
Shot()\Z = Z
Shot()\MoveX = MoveX
Shot()\MoveY = MoveY
Shot()\MoveZ = MoveZ
Shot()\Speed = Speed
EndProcedure
Procedure AndY_ExamineShot();soll die schüsse atualisiren
If CountList(Shot()) => 1 ; hat liste einträge ?
ForEach Shot() ; jeden schuss durchgehen
Shot()\X + ( Shot()\MoveX * 3 ) ; Bewegung
Shot()\Y + ( Shot()\MoveY * 3 )
Shot()\Z + ( Shot()\MoveZ * 3 )
EntityLocate(Shot()\EntityID,Shot()\X,Shot()\Y,Shot()\Z) ; Entity bewegen
Next
EndIf
EndProcedure
Procedure AndY_DeleteShot(ID) ; soll einen schuss löschen
If CountList(Shot()) => 1
ForEach Shot() ; Jedes element
If Shot()\ID = ID ; ID = FindeID then LÖSCHEN
DeleteElement(Shot())
EndIf
Next
EndIf
EndProcedure
CreateCamera(1,0,0,100,100);Erstellt kamera
Repeat ;Sollte klar sein
ExamineMouse() ; Aktualisirt die maus
ExamineKeyboard()
If KeyboardPushed(#PB_Key_W) ; Bewegung der Camera , das mit Move BlaBlaBla funktionirt , aber nicht hier :)
MoveForward = 1
ElseIf KeyboardPushed(#PB_Key_S)
MoveBackward = 1
Else
MoveGarnicht = 1
EndIf
If KeyboardPushed(#PB_Key_A)
MoveLeft = 1
ElseIf KeyboardPushed(#PB_Key_D)
MoveRight = 1
Else
MoveGarnicht = 1
EndIf
If MouseButton(#PB_MouseButton_Left) = 1 ; Wen TASTE gedrückt ist , dan adde schuss
BewegX.f = -Sin(CamrotY*piover180) ; Hier ist der bug denke ich mal
BewegY.f = Sin(CamrotX*piover180)
BewegZ.f = -Cos(CamrotY*piover180)
AndY_Con_DebugText(Str(BewegX)) ; Debugen in console
AndY_Con_DebugText(Str(BewegY))
AndY_Con_DebugText(Str(BewegZ))
AndY_AddShot(1,#SR71_Shell,CameraX(1),CameraY(1),CameraZ(1),BewegX.f,BewegY.f,BewegZ.f,2) ; Schuss adden
EndIf
MouseX = -MouseDeltaX()/10 ;MouseRotation überprüfen
MouseY = -MouseDeltaY()/10
camrotx + Mousey ; CamRotX hoher zählen
camroty + Mousex
If camrotx > 360 : camrotx - 360 : EndIf ;Winkel begränzung
If camroty > 360 : camroty - 360 : EndIf
If camrotx < 0 : camrotx + 360 : EndIf
If camroty < 0 : camroty + 360 : EndIf
CameraLocate(1,CameraX(1),PlayerY+PlayerHeight,CameraZ(1))
MoveCamera(1,CameraMoveX,0,CameraMoveZ)
RotateCamera(1,MouseX,MouseY,RollZ) ;PureBasic Sample HERLICH
RenderWorld() ; WeltDarstellen
AndY_DrawHUD() ; HUD Darstellen crosshair usw...
AndY_Con_DrawBack();Console background
StartDrawing(ScreenOutput()) ; Anfangen zu MALEN
DrawingMode(#PB_2DDrawing_Transparent) ; Transparente schrift
DrawText(10,10,Str(Engine3DFrameRate(#PB_Engine3D_Current)),RGB(255,255,255)) ;FPS wichtig
DrawText(10,25,Str(CountRenderedTriangles()),RGB(255,255,255)) ; Triangles wichtig
DrawText(10,50,Str(camrotx),#White) ; Sehrwichtig CamRotX
DrawText(10,75,Str(camroty),#White) ; Sehrwichtig CamRotY
AndY_Con_DrawConsole() ;Console darstellen immer anzeigen , bis ich was anderes sage
StopDrawing() ; aufhören zu malen
FlipBuffers() ;darstelen
Until KeyboardPushed(#PB_Key_Escape) ; bis ich kein bock mehr habe
End ; ENDE des programms
