Code: Alles auswählen
#CameraSpeed = 5
Define.f KeyX, KeyY, MouseX, MouseY
InitEngine3D()
Add3DArchive("DATA", #PB_3DArchive_FileSystem)
InitSprite()
InitKeyboard()
InitMouse()
glob_screen_w=1024
glob_screen_h=768
OpenScreen(glob_screen_w,glob_screen_h,16,"test")
Global GlobalID.l
GlobalID=1000
Structure Shot
x.f
y.f
z.f
xx.f
yy.f
zz.f
c.w
id.w
cc.w
EndStructure
Global NewList Shot.Shot()
Procedure AddShot(x.f,y.f,z.f,xx.f,yy.f,zz.f)
AddElement(Shot())
Shot()\x=x
Shot()\y=y
Shot()\z=z
Shot()\xx=xx*2
Shot()\yy=yy*2
Shot()\zz=zz*2
EndProcedure
CreateMaterial (0, LoadTexture(0, "Terrain_Texture.jpg"))
AddMaterialLayer(0, LoadTexture(1, "Terrain_Detail.jpg"), #PB_Material_Add)
CreateTerrain("terrain.png", MaterialID(0), 16, 1, 16, 1)
LoadTexture(5, "Flare.png")
CreateMesh(9,100)
SetMeshData(9,#PB_Mesh_Vertex|#PB_Mesh_Normal|#PB_Mesh_UVCoordinate,?CubePoints,16)
SetMeshData(9,#PB_Mesh_Face,?CubeTriangles,12)
LoadMesh (55 , "robot.mesh")
LoadTexture(55, "r2skin.jpg")
CreateMaterial(55, TextureID(55))
CreateEntity(55, MeshID(55), MaterialID(55),256,256,256)
EntityMaterial(55, MaterialID(55))
AnimateEntity(55, "Walk")
CreateMaterial(5, TextureID(5))
;DisableMaterialLighting(5, 1)
;MaterialBlendingMode(5, #PB_Material_Add)
CreateParticleEmitter(0, 10, 1, 1, 0,256,25,256)
ParticleMaterial(0, MaterialID(5))
ParticleTimeToLive(0, 0.1, 1)
ParticleEmissionRate(0,5)
ParticleSize(0,5,5)
ParticleColorRange(0, RGB(255,0,0), RGB(64,0,0))
AmbientColor(RGB(255,255,255))
CreateCamera(0, 0, 0, 100, 100)
CameraLocate(0, 512, 256, 512)
SkyDome("clouds.jpg",10)
Repeat
FlipBuffers()
ExamineKeyboard()
ExamineMouse()
RenderWorld()
If MouseButton(1)
mb1=4
Else
If mb1>0
mb1-1
EndIf
EndIf
If MouseButton(2)
mb2=4
Else
If mb2>0
mb2-1
EndIf
EndIf
ForEach Shot()
If Shot()\c=0
Shot()\c=1
GlobalID+1
Shot()\id=GlobalID
CreateEntity(100+Shot()\id,MeshID(9),MaterialID(5),Shot()\x,Shot()\y,Shot()\z)
buf=100+Shot()\id
bufx=EntityX(buf);+Shot()\xx
bufy=EntityY(buf);+Shot()\yy
bufz=EntityZ(buf);+Shot()\zz
bufy+TerrainHeight(bufx,bufz)+10
EntityLocate(buf,bufx,bufy,bufz)
EndIf
MoveEntity(100+Shot()\id,Shot()\xx,Shot()\yy,Shot()\zz)
Shot()\cc+1
If Shot()\cc>500
FreeEntity(100+Shot()\id)
DeleteElement(Shot())
EndIf
Next
If KeyboardPushed(#PB_Key_Left)
KeyX = -#CameraSpeed
ElseIf KeyboardPushed(#PB_Key_Right)
KeyX = #CameraSpeed
Else
KeyX = 0
EndIf
If KeyboardPushed(#PB_Key_Up)
KeyY = -#CameraSpeed
ElseIf KeyboardPushed(#PB_Key_Down)
KeyY = #CameraSpeed
Else
KeyY = 0
EndIf
MouseX = -(MouseDeltaX()/10)*#CameraSpeed/2
MouseY = -(MouseDeltaY()/10)*#CameraSpeed/2
Height.f = TerrainHeight(CameraX(0), CameraZ(0))
RotateCamera(0, MouseY, MouseX, RollZ, #PB_Relative)
MoveCamera (0, KeyX, -CameraY(0)+Height+50, KeyY)
If mb1=1
If PointPick(0,glob_screen_w/2,glob_screen_h/2);PointPick(0,MouseX(),MouseY())
AddShot(CameraX(0),-CameraY(0)+Height+80,CameraZ(0),PickX(),PickY(),PickZ())
EndIf
EndIf
Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
End
#SQRT13 = 0.57735026
DataSection
CubePoints:
Data.f -0.5,-0.5,-0.5
Data.f -0.5,0,-0.5
Data.f 0,1
Data.f -0.5,-0.5,0.5
Data.f -0.5,0,0.5
Data.f 1,1
Data.f 0.5,-0.5,0.5
Data.f 0.5,0,0.5
Data.f 0,1
Data.f 0.5,-0.5,-0.5
Data.f 0.5,0,-0.5
Data.f 1,1
Data.f -0.5,0.5,-0.5
Data.f -0.5,0,-0.5
Data.f 0,0
Data.f -0.5,0.5,0.5
Data.f -0.5,0,0.5
Data.f 1,0
Data.f 0.5,0.5,0.5
Data.f 0.5,0,0.5
Data.f 0,0
Data.f 0.5,0.5,-0.5
Data.f 0.5,0,-0.5
Data.f 1,0
Data.f -0.5,-0.5,-0.5
Data.f 0,1,0
Data.f 0,0
Data.f -0.5,-0.5,0.5
Data.f 0,1,0
Data.f 1,0
Data.f 0.5,-0.5,0.5
Data.f 0,1,0
Data.f 1,1
Data.f 0.5,-0.5,-0.5
Data.f 0,1,0
Data.f 0,1
Data.f -0.5,0.5,-0.5
Data.f 0,-1,0
Data.f 0,0
Data.f -0.5,0.5,0.5
Data.f 0,-1,0
Data.f 1,0
Data.f 0.5,0.5,0.5
Data.f 0,-1,0
Data.f 1,1
Data.f 0.5,0.5,-0.5
Data.f 0,-1,0
Data.f 0,1
CubeTriangles:
Data.w 0,4,7
Data.w 0,7,3
Data.w 1,5,4
Data.w 1,4,0
Data.w 2,6,5
Data.w 2,5,1
Data.w 3,7,6
Data.w 3,6,2
Data.w 9,8,11
Data.w 9,11,10
Data.w 12,13,14
Data.w 12,14,15
EndDataSection