Code: Select all
IncludeFile #PB_Compiler_Home + "Examples/3D/Screen3DRequester.pb"
#COL_Sphere = 1 << 6
#COL_Wall = 1 << 7
#COL_Brique = 1 << 8
#COL_BriqueT = 1 << 9 ; Brique touchée
#COL_Raquette = 1 << 10
#SphereCollidesWith = #COL_WALL | #COL_Brique | #COL_Raquette
#WallCollidesWith = #COL_Sphere | #COL_BriqueT
#BriqueCollidesWith = #COL_Sphere
#BriqueTCollidesWith = #COL_Raquette
#RaquetteCollidesWith = #COL_Sphere | #COL_BriqueT
#CameraSpeed = 1
Structure Brique
no.i
Time.i
EndStructure
Define.f KeyX, KeyY, MouseX, MouseY
Define.i Start, Score
NewList BriquesTouchees.Brique()
Macro CreateCadre(x, y, z, sx, sy, sz, m, r, f)
Cadre = CreateEntity(#PB_Any, MeshID(1), MaterialID(2), x, y, z)
ScaleEntity(Cadre, sx, sy, sz)
EntityPhysicBody(Cadre, #PB_Entity_BoxBody, m, r, f)
SetEntityCollisionFilter(Cadre, #COL_Wall, #WallCollidesWith)
EndMacro
Macro SupprimeBriquesTouchees
ForEach BriquesTouchees()
FreeEntity(BriquesTouchees()\no)
DeleteElement(BriquesTouchees())
Next
EndMacro
Macro Briques
n = 0
For j=0 To 3
For i = 0 To 10
n + 1
Brique = CreateEntity(n, MeshID(1), MaterialID(0), 20 - i * 4, 80 - j * 4, 0)
ScaleEntity(n, 1.8, 1.8, 1.8)
EntityPhysicBody(n, #PB_Entity_BoxBody, 0, 1, 0)
SetEntityCollisionFilter(n, #COL_Brique, #BriqueCollidesWith)
Next
Next
NbBriques = n
EndMacro
Macro init
SupprimeBriquesTouchees
MoveEntity(Sphere, 0, 50, 0, #PB_Absolute)
MoveEntity(Raquette, 0, 40, 0, #PB_Absolute)
Start = 0
EndMacro
If InitEngine3D(3)
InitSprite()
InitKeyboard()
InitMouse()
If Screen3DRequester()
Add3DArchive(#PB_Compiler_Home + "Examples/3D/Data/Textures", #PB_3DArchive_FileSystem)
Add3DArchive(#PB_Compiler_Home + "Examples/3D/Data/Scripts",#PB_3DArchive_FileSystem)
Add3DArchive(#PB_Compiler_Home + "Examples/3D/Data/Packs/desert.zip", #PB_3DArchive_Zip)
Add3DArchive(#PB_Compiler_Home + "Examples/3D/Data/fonts", #PB_3DArchive_FileSystem)
Parse3DScripts()
;WorldShadows(#PB_Shadow_Modulative)
WorldGravity(0)
;-Materials
CreateMaterial(0, LoadTexture(0, "Wood.jpg"))
GetScriptMaterial(1, "SphereMap/SphereMappedRustySteel")
GetScriptMaterial(2, "Color/Blue")
GetScriptMaterial(3, "Scene/GroundBlend")
GetScriptMaterial(4, "Color/Yellow")
MaterialBlendingMode(4, #PB_Material_AlphaBlend)
SetMaterialColor(4, #PB_Material_DiffuseColor, RGBA(255, 255, 0, 155))
GetScriptMaterial(5, "Color/Red")
GetScriptMaterial(6, "Color/Green")
;-Mesh
CreateCube(1, 1.0)
CreateSphere(2, 1, 30, 30)
CreateCylinder(3, 0.5, 2)
CreateText3D(0, "123")
Text3DColor(0, RGBA(255, 255, 0, 255))
Text3DAlignment(0, #PB_Text3D_Left | #PB_Text3D_Bottom)
CreateNode(0, 50, 92, 0)
AttachNodeObject(0, Text3DID(0))
ScaleText3D(0, 5, 5, 1)
;-Sphere
Sphere = CreateEntity(#PB_Any, MeshID(2), MaterialID(4), 0, 41.5, 0)
EntityPhysicBody(Sphere, #PB_Entity_SphereBody, 1, 1, 0)
EntityLinearFactor(Sphere, 1, 1, 0)
SetEntityCollisionFilter(Sphere, #COL_Sphere, #SphereCollidesWith)
;-Cadre
CreateCadre( 0, 0, 0, 50, 1, 4, 0, 1.0, 0)
CreateCadre( 0, 90, 0, 50, 1, 4, 0, 1.0, 0)
CreateCadre(-25, 45, 0, 1, 90, 4, 0, 1.0, 0)
CreateCadre( 25, 45, 0, 1, 90, 4, 0, 1.0, 0)
;-Briques
Briques
;-Raquette
Raquette = CreateEntity(#PB_Any, MeshID(1), MaterialID(5), 0, 40, 0)
ScaleEntity(Raquette, 6, 1, 4)
EntityPhysicBody(Raquette, #PB_Entity_BoxBody, 0, 1, 0)
SetEntityCollisionFilter(Raquette, #COL_Raquette, #RaquetteCollidesWith)
;-Camera
CreateCamera(0, 0, 0, 100, 100)
MoveCamera(0, 0, 30, -47, #PB_Absolute)
CameraLookAt(0, 0, 60, 0)
;-Skybox
SkyBox("desert07.jpg")
;-Light
CreateLight(0, RGB(255, 255, 255), 100, 800, -500)
AmbientColor(RGB(0, 0, 0))
Init
Repeat
Screen3DEvents()
ExamineMouse()
If ExamineKeyboard()
If KeyboardPushed(#PB_Key_Left) And EntityX(Raquette) < 21.5
MoveEntity(Raquette, EntityX(Raquette)+0.5, EntityY(Raquette), EntityZ(Raquette),#PB_Absolute)
ElseIf KeyboardPushed(#PB_Key_Right) And EntityX(Raquette) > -21.5
MoveEntity(Raquette, EntityX(Raquette)-0.5, EntityY(Raquette), EntityZ(Raquette),#PB_Absolute)
EndIf
If KeyboardReleased(#PB_Key_Space) And Start = 0
ApplyEntityImpulse(Sphere, Random(40)-20, -70, 0)
Start = 1
EndIf
EndIf
If Abs(GetEntityAttribute(Sphere, #PB_Entity_LinearVelocityY)) < 3 And GetEntityAttribute(Sphere, #PB_Entity_LinearVelocityX) <> 0
ApplyEntityImpulse(Sphere, 0, GetEntityAttribute(Sphere, #PB_Entity_LinearVelocityY) * 3, 0)
EndIf
If Abs(GetEntityAttribute(Sphere, #PB_Entity_LinearVelocityX)) < 3 And GetEntityAttribute(Sphere, #PB_Entity_LinearVelocityY) <> 0
ApplyEntityImpulse(Sphere, GetEntityAttribute(Sphere, #PB_Entity_LinearVelocityX) * 3, 0, 0)
EndIf
SetEntityAttribute(Sphere, #PB_Entity_ForceVelocity, 60)
If ExamineWorldCollisions(#False)
While NextWorldCollision()
If SecondWorldCollisionEntity() <= n
x.f = EntityX(SecondWorldCollisionEntity())
y.f = EntityY(SecondWorldCollisionEntity())
z.f = EntityZ(SecondWorldCollisionEntity())
AddElement(BriquesTouchees())
BriquesTouchees()\no = CreateEntity(#PB_Any, MeshID(3), MaterialID(6), x, y, z)
;ScaleEntity(BriquesTouchees()\no, 1.8, 1.8, 1.8)
EntityPhysicBody(BriquesTouchees()\no, #PB_Entity_CylinderBody, 1, 1, 0)
EntityLinearFactor(BriquesTouchees()\no, 1, 1, 0)
SetEntityCollisionFilter(BriquesTouchees()\no, #COL_BriqueT, #BriqueTCollidesWith)
BriquesTouchees()\time = ElapsedMilliseconds()
; x.f = GetEntityAttribute(Sphere, #PB_Entity_LinearVelocityX)
; y.f = GetEntityAttribute(Sphere, #PB_Entity_LinearVelocityY)
; z.f = GetEntityAttribute(Sphere, #PB_Entity_LinearVelocityZ)
ApplyEntityImpulse(BriquesTouchees()\no, 0,-15,0)
FreeEntity(SecondWorldCollisionEntity())
NbBriques - 1
ElseIf (FirstWorldCollisionEntity() = Raquette And SecondWorldCollisionEntity()<>Sphere) Or
(FirstWorldCollisionEntity() <> Sphere And SecondWorldCollisionEntity() = Raquette)
ForEach BriquesTouchees()
If BriquesTouchees()\no = SecondWorldCollisionEntity() Or BriquesTouchees()\no = FirstWorldCollisionEntity()
FreeEntity(BriquesTouchees()\no)
DeleteElement(BriquesTouchees())
Score + 1
Break
EndIf
Next
EndIf
Wend
EndIf
ForEach BriquesTouchees()
SetEntityAttribute(BriquesTouchees()\no, #PB_Entity_ForceVelocity, 15)
RotateEntity(BriquesTouchees()\no,1,1,1, #PB_Relative)
If EntityY(BriquesTouchees()\no) < 35 Or (ElapsedMilliseconds() - BriquesTouchees()\Time > 60000)
FreeEntity(BriquesTouchees()\no)
DeleteElement(BriquesTouchees())
EndIf
Next
If EntityY(Sphere) < 35
Init
EndIf
If NbBriques <= 0
Score = 0
Briques
init
EndIf
Text3DCaption(0, Str(Score))
RenderWorld(10)
Screen3DStats()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
EndIf
Else
MessageRequester("Error", "The 3D Engine can't be initialized",0)
EndIf
End