) et j'ai réussi à m'amuser. On peut dirgier les 3 entités (avec les fleches) et la caméra avec ZQSD. Espace fait faire un bond à OgreMesh
Pour ralentir, il faut aller en sens inverse.
Code : Tout sélectionner
;
; ------------------------------------------------------------
;
; PureBasic - Entity
;
; (c) 2002 - Fantaisie Software
;
; ------------------------------------------------------------
;
IncludeFile "Screen3DRequester.pb"
Define.f KeyX, KeyY,KeyXCam, KeyYCam, MouseX, MouseY
Define.l actif
actif=#CubeEntity
#PB_Entity_StaticBody = 1
#PB_Entity_BoxBody = 2
#PB_Entity_SphereBody = 3
#PB_Shadow_None = 0
#PB_Shadow_Modulative = 1 ; Black shadow (fast)
#PB_Shadow_Additive = 2 ; Additive translucent shadow (more expensive with severl lights)
#PB_Entity_Solid = 0
#PB_Entity_Wireframe = 1 << 0
#PB_Entity_Plot = 1 << 1
#PB_Entity_CastShadow = 1 << 2
#PB_3DArchive_Recursive = 2
Enumeration
#TrackEntity
#OgreEntity
#CubeEntity
#NinjaEntity
#SphereEntity
EndEnumeration
If InitEngine3D()
Add3DArchive("Data\Skybox.zip", #PB_3DArchive_Zip)
Add3DArchive("Data\Dragon.zip", #PB_3DArchive_Zip)
Add3DArchive("Data\Ogre\" , #PB_3DArchive_FileSystem)
Add3DArchive("Data\Circuit\", #PB_3DArchive_FileSystem)
Add3DArchive("Data\Cube\" , #PB_3DArchive_FileSystem)
Add3DArchive("Data\Ninja\" , #PB_3DArchive_FileSystem)
Add3DArchive("Data\Sphere\" , #PB_3DArchive_FileSystem)
Add3DArchive("Data\" , #PB_3DArchive_FileSystem)
Parse3DScripts()
InitSprite()
InitKeyboard()
InitMouse()
If Screen3DRequester()
AmbientColor(RGB(128,128,128))
EnableWorldPhysics(1)
WorldShadows(#PB_Shadow_Additive)
EnableWorldCollisions(1)
OgreMesh = LoadMesh(#PB_Any, "OgreHead.mesh")
TrackMesh = LoadMesh(#PB_Any, "racingcircuit.mesh")
CubeMesh = LoadMesh(#PB_Any, "Cube.mesh")
SphereMesh = LoadMesh(#PB_Any, "Sphere.mesh")
Text = LoadTexture(#PB_Any, "r2skin.jpg")
Mat = CreateMaterial(#PB_Any, TextureID(Text))
Steel = LoadTexture(#PB_Any, "RustySteel.jpg")
SteelMaterial = CreateMaterial(#PB_Any, TextureID(Steel))
DisableDebugger
CreateEntity(#OgreEntity , MeshID(OgreMesh), 0, 10, 40, 0)
CreateEntity(#TrackEntity , MeshID(TrackMesh), 0, 0, 00, 0)
CreateEntity(#CubeEntity , MeshID(CubeMesh), MaterialID(Mat), 20, 40, 0)
CreateEntity(#SphereEntity, MeshID(SphereMesh), MaterialID(SteelMaterial), 0, 40, 0)
EnableDebugger
EntityPhysicBody(#TrackEntity, #PB_Entity_StaticBody)
EntityRenderMode(#TrackEntity, 0)
EntityPhysicBody(#OgreEntity, #PB_Entity_BoxBody)
EntityRenderMode(#OgreEntity, 0)
ScaleEntity(#OgreEntity, 0.1, 0.1, 0.1)
;- Bug > SetEntityFriction
; Réglé pour la beta 8
;SetEntityFriction(#OgreEntity,1)
;SetEntityMass(#OgreEntity, 1)
EntityPhysicBody(#SphereEntity, #PB_Entity_SphereBody)
EntityRenderMode(#SphereEntity,0)
ScaleEntity(#SphereEntity, 0.05, 0.05, 0.05)
;SetEntityFriction(#SphereEntity, 10)
;SetEntityMass(#SphereEntity, 1)
EntityPhysicBody(#CubeEntity, #PB_Entity_BoxBody)
EntityRenderMode(#CubeEntity,0)
ScaleEntity(#CubeEntity, 0.1, 0.1, 0.1)
;SetEntityFriction(#CubeEntity, 100)
;SetEntityMass(#CubeEntity, 1)
CreateLight(0, RGB(255,255,255), 100.0, 100, 0)
SkyBox("desert07.jpg")
CreateCamera(0, 0, 0, 100, 100)
CameraLocate(0,0,0,30)
Repeat
Screen3DEvents()
ClearScreen(RGB(0, 0, 0))
If ExamineKeyboard()
If KeyboardPushed(#PB_Key_Pad1)
actif=#CubeEntity
ElseIf KeyboardPushed(#PB_Key_Pad2)
actif=#SphereEntity
ElseIf KeyboardPushed(#PB_Key_Pad3)
actif=#OgreEntity
EndIf
If KeyboardPushed(#PB_Key_Left)
KeyX = -50
ElseIf KeyboardPushed(#PB_Key_Right)
KeyX = 50
Else
KeyX = 0
EndIf
If KeyboardPushed(#PB_Key_Up)
KeyY = -50
ElseIf KeyboardPushed(#PB_Key_Down)
KeyY = 50
Else
KeyY = 0
EndIf
If KeyboardPushed(#PB_Key_A)
KeyXCam = -1
ElseIf KeyboardPushed(#PB_Key_D)
KeyXCam = 1
Else
KeyXCam = 0
EndIf
If KeyboardPushed(#PB_Key_W)
KeyYCam = -1
ElseIf KeyboardPushed(#PB_Key_S)
KeyYCam = 1
Else
KeyYCam = 0
EndIf
If KeyboardPushed(#PB_Key_PageUp)
RollZ = 3
Else
RollZ = 0
EndIf
If KeyboardPushed(#PB_Key_Space)
MoveEntity(#OgreEntity, 10, 40, 0)
EndIf
EndIf
If ExamineMouse()
MouseX = -MouseDeltaX()/10
MouseY = -MouseDeltaY()/10
EndIf
;If KeyXCam<>0: Debug "KeyXCam"+Str(KeyXCam):EndIf
;If KeyYCam<>0:Debug "KeyYCam"+Str(KeyYCam):EndIf
;If KeyX<>0:Debug "KeyX"+Str(KeyX):EndIf
;If KeyY<>0:Debug "KeyY"+Str(KeyY):EndIf
RotateCamera(0, MouseX, MouseY, RollZ)
MoveCamera (0, KeyXCam, 0, KeyYCam)
MoveEntity(actif,KeyX, 0, KeyY)
If ExamineWorldCollisions()
While NextWorldCollision()
If CheckEntityCollision(#CubeEntity, #SphereEntity)
Debug "Cube and Sphere collide !"
ElseIf CheckEntityCollision(#CubeEntity, #OgreEntity)
Debug "Cube and Ogre collide !"
ElseIf CheckEntityCollision(#SphereEntity, #OgreEntity)
Debug "Sphere and Ogre collide !"
EndIf
Wend
EndIf
RenderWorld()
Screen3DStats()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
EndIf
Else
MessageRequester("Error", "The 3D Engine can't be initialized",0)
EndIf
End
Je dédis ce code à Comtois, qui s'est fait - disons le franchement - chier à faire une lib pour les collisions.