Code: Alles auswählen
IncludeFile "Screen3DRequester.pb"
#CameraSpeed = 20
#TerrainMiniX = 0
#TerrainMiniY = 0
#TerrainMaxiX = 0
#TerrainMaxiY = 0
Define.f KeyX, KeyY, MouseX, MouseY
Global Dim MapDaten(240, 240)
Procedure Weltdefinieren()
For Arrayz = 1 To 240
For ArrayX = 1 To 240
MapDaten(Arrayx, Arrayz) = 0
; Debug Val(ReadString(0))
Next
Next
EndProcedure
Weltdefinieren()
MapDaten(1, 1) = 1
MapDaten(5, 1) = 1
MapDaten(240, 240) = 1
Procedure Weltausgeben()
Shared hausid
For Arrayz = 1 To 240
For ArrayX = 1 To 240
If MapDaten(Arrayx, Arrayz) = 1
CreateEntity(hausid,MeshID(1),#Null,ArrayX*50-6000,1000,Arrayz*50-6000)
ScaleEntity(hausid,0.1,0.1,0.1)
Debug hausid
hausid+1
ElseIf MapDaten(Arrayx, Arrayz) = 0
Else
EndIf
Next
Next
EndProcedure
Procedure objsetzen(x,z)
Shared hausid
Shared mapdaten()
;Debug "x:"+Str((x+6000)/50)
;Debug "z:"+Str((z+6000)/50)
xmin=x-4
xmax=x+4
zmin=z-4
zmax=z+4
hausnichtbauen=0
For ax = xmin To xmax
For az = zmin To zmax
If Not mapdaten((ax+6000)/50,(az+6000)/50)=0
hausnichtbauen=1
EndIf
Next az
Next ax
Debug hausnichtbauen
If Not hausnichtbauen =1
For ax = xmin To xmax
For az = zmin To zmax
mapdaten((ax+6000)/50,(az+6000)/50)=2
Next az
Next ax
mapdaten((x+6000)/50,(z+6000)/50)=1
ProcedureReturn 1
Else
ProcedureReturn 0
EndIf
EndProcedure
Procedure Clamp(*var.float, min.f, max.f)
If *var\f < min
*var\f = min
ElseIf *var\f > max
*var\f = max
EndIf
EndProcedure
hausid=200
; OpenGL needs to have CG enabled to work (Linux and OS X have OpenGL by default)
;
CompilerIf #PB_Compiler_OS <> #PB_OS_Windows Or Subsystem("OpenGL")
Flags = #PB_Engine3D_EnableCG
CompilerEndIf
If InitEngine3D(Flags)
InitSprite()
InitKeyboard()
InitMouse()
If Screen3DRequester()
Add3DArchive("Data/Textures/" , #PB_3DArchive_FileSystem)
Add3DArchive("Data/Textures/nvidia" , #PB_3DArchive_FileSystem)
Add3DArchive("Data/models/" , #PB_3DArchive_FileSystem)
Add3DArchive("Data/Scripts" , #PB_3DArchive_FileSystem)
Add3DArchive("Data/GUI" , #PB_3DArchive_FileSystem)
Add3DArchive("Data/Packs/desert.zip", #PB_3DArchive_Zip)
Parse3DScripts()
WorldShadows(#PB_Shadow_Modulative, -1, RGB(105, 105, 105))
;- Light
;
light = CreateLight(#PB_Any ,RGB(255, 255, 255), 4000, 1200, 1000,#PB_Light_Directional)
SetLightColor(light, #PB_Light_SpecularColor, RGB(255*0.4, 255*0.4,255*0.4))
LightDirection(light ,0.55, -0.3, -0.75)
AmbientColor(RGB(255*0.2, 255*0.2,255*0.2))
;- Camera
;
CreateCamera(0, 0, 0, 100, 100)
MoveCamera(0, 0, 400, 0, #PB_Absolute)
CameraBackColor(0, RGB(5, 5, 10))
CreateMaterial(10, LoadTexture(10, "smoke.png"))
DisableMaterialLighting(10, 1)
MaterialBlendingMode (10,#PB_Material_AlphaBlend )
;----------------------------------
; terrain definition
SetupTerrains(LightID(Light), 9000, #PB_Terrain_NormalMapping)
; initialize terrain
CreateTerrain(0, 513, 12000, 1000, 4, "TerrainShadow", "dat")
; set all texture will be use when terrrain will be constructed
AddTerrainTexture(0, 0, 100, "dirt_grayrocky_diffusespecular.jpg", "dirt_grayrocky_normalheight.jpg")
AddTerrainTexture(0, 1, 30, "grass_green-01_diffusespecular.jpg", "grass_green-01_normalheight.jpg")
AddTerrainTexture(0, 2, 200, "growth_weirdfungus-03_diffusespecular.jpg", "growth_weirdfungus-03_normalheight.jpg")
; construct terrains
For ty = #TerrainMiniY To #TerrainMaxiY
For tx = #TerrainMiniX To #TerrainMaxiX
DefineTerrainTile(0, tx, ty, "terrain513.png", ty % 2, tx % 2)
Next
Next
BuildTerrain(0)
;InitBlendMaps
minHeight1.f = 70
fadeDist1.f = 40
minHeight2.f = 70
fadeDist2.f = 15
For ty = #TerrainMiniY To #TerrainMaxiY
For tx = #TerrainMiniX To #TerrainMaxiX
Size = TerrainTileLayerMapSize(0, tx, ty)
For y = 0 To Size-1
For x = 0 To Size-1
Height.f = TerrainTileHeightAtPosition(0, tx, ty, 1, x, y)
val.f = (Height - minHeight1) / fadeDist1
Clamp(@val, 0, 1)
SetTerrainTileLayerBlend(0, tx, ty, 1, x, y, val)
val.f = (Height - minHeight2) / fadeDist2
Clamp(@val, 0, 1)
SetTerrainTileLayerBlend(0, tx, ty, 2, x, y, val)
Next
Next
UpdateTerrainTileLayerBlend(0, tx, ty, 1)
UpdateTerrainTileLayerBlend(0, tx, ty, 2)
Next
Next
; enable shadow terrain
TerrainRenderMode(0, 0)
; create sphere for test
CreateSphere(0, 10)
;LoadMesh(2,"koloniehaus.mesh")
CreateCube(1,2048) ; das Haus
Global cameralook=CreateEntity(#PB_Any,MeshID(0),#Null,20,280,20)
Global ball =CreateEntity(#PB_Any, MeshID(1), #Null)
MoveEntity(ball, 300,60,0, #PB_Absolute)
EntityRenderMode(ball, #PB_Entity_CastShadow)
ScaleEntity(ball,0.1,0.1,0.1)
;CreateEntity(2,MeshID(1),#Null,20,280,20)
;ScaleEntity(2,0.1,0.1,0.1)
Weltausgeben()
; SkyBox
;
SkyBox("desert07.jpg")
ShowGUI(128, 1) ; Display the GUI, semi-transparent and display the mouse cursor
CreateParticleEmitter(1, 5, 5, 5, #PB_Particle_Point ,0,500,0)
ParticleMaterial (1,MaterialID(10))
ParticleTimeToLive (1, 2, 4)
ParticleEmissionRate(1, 300)
ParticleSize (1, 5, 5)
ParticleColorRange (1, RGB(255,255,255), RGB(255,255,255))
ParticleEmitterDirection(1, 0, 0.5, 0)
ParticleVelocity(1, 0.05, 0.1)
HideEntity(cameralook,1)
Repeat
Screen3DEvents()
If ExamineKeyboard()
If KeyboardPushed(#PB_Key_A)
KeyX = -#CameraSpeed
ElseIf KeyboardPushed(#PB_Key_D)
KeyX = #CameraSpeed
Else
KeyX = 0
EndIf
If KeyboardPushed(#PB_Key_W)
KeyY = -#CameraSpeed
ElseIf KeyboardPushed(#PB_Key_S)
KeyY = #CameraSpeed
Else
KeyY = 0
EndIf
If KeyboardPushed(#PB_Key_Q)
drehung = -2
ElseIf KeyboardPushed(#PB_Key_E)
drehung = 2
Else
drehung = 0
EndIf
EndIf
If ExamineMouse()
MouseX = -MouseDeltaX() * #CameraSpeed * 0.05
MouseY = -MouseDeltaY() * #CameraSpeed * 0.05
InputEvent3D(MouseX(), MouseY(), MouseButton(#PB_MouseButton_Left))
If MouseButton(#PB_MouseButton_Right)
TerrainMousePick(0, CameraID(0), MouseX(), MouseY())
MoveEntity(ball, PickX()-Mod(PickX(), 50), PickY()+0, PickZ()-Mod(PickZ(),50), #PB_Absolute)
EndIf
If MouseButton(#PB_MouseButton_Left)
TerrainMousePick(0, CameraID(0), MouseX(), MouseY())
MoveEntity(ball, PickX()-Mod(PickX(), 50), PickY()+0, PickZ()-Mod(PickZ(),50), #PB_Absolute)
If objsetzen(EntityX(ball),EntityZ(ball)) =1
CreateEntity(hausid,MeshID(1),#Null,EntityX(ball),1000,EntityZ(ball))
ScaleEntity(hausid,0.1,0.1,0.1)
hausid+1
EndIf
EndIf
EndIf
MoveEntity(cameralook, KeyX, 0, KeyY,#PB_Local)
Yaw(EntityID(cameralook), drehung, #PB_World)
CameraFollow(Camera, EntityID(cameralook), 0, EntityY(cameralook) + 1000, 2160, 0.1, 1, #True)
CameraLookAt(Camera, EntityX(cameralook), 40, EntityZ(cameralook))
; RotateCamera(0, MouseY, MouseX, 0, #PB_Relative)
RenderWorld()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
End
EndIf
Else
CompilerIf #PB_Compiler_OS <> #PB_OS_Windows Or Subsystem("OpenGL")
;
; Terrain on Linux/OSX and Windows with OpenGL needs CG toolkit from nvidia
; It can be freely downloaded and installed from this site: https://developer.nvidia.com/cg-toolkit-download
;
MessageRequester("Error","Can't initialize engine3D (Please ensures than CG Toolkit from nvidia is correcly installed)")
CompilerElse
MessageRequester("Error","Can't initialize engine3D")
CompilerEndIf
EndIf
man kann nun immernoch Häuser inneinader bauen.