I want to rotate an entity with arrow keys, but the rotation needs to be on a face of the entity, like a door into its door-frame.
Do i need a hingejoint ?
Any help, thanx.
Code: Select all
;
; ------------------------------------------------------------
;
; PureBasic - HingeJoint
;
; (c) Fantaisie Software
;
; ------------------------------------------------------------
;
#CameraSpeed = 1
Define.f KeyX, KeyY, MouseX, MouseY
If InitEngine3D()
Add3DArchive(#PB_Compiler_Home + "examples/3d/Data/Textures", #PB_3DArchive_FileSystem)
Add3DArchive(#PB_Compiler_Home + "examples/3d/Data/Models", #PB_3DArchive_FileSystem)
Add3DArchive(#PB_Compiler_Home + "examples/3d/Data/Packs/skybox.zip", #PB_3DArchive_Zip)
InitSprite()
InitKeyboard()
; InitMouse()
If OpenWindow(0, 0, 0, 800,600, "rudder simulation: Left and right Arrows", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
Result = OpenWindowedScreen(WindowID(0), 0, 0, 800, 600, 0, 0, 0)
; First create materials
;
CreateMaterial(0, LoadTexture(0, "Dirt.jpg"))
CreateMaterial(1, LoadTexture(1, "Wood.jpg"))
; Meshes
;
CreateCube(0, 1.0)
CreateSphere(1, 0.66)
; Entities
;
CreateEntity(0, MeshID(0), MaterialID(0), 0, 0, 0)
ScaleEntity(0, 2, 4, 0.5)
CreateEntity(1, MeshID(0), MaterialID(1), 3, 0, 0)
ScaleEntity(1, 2, 4, 0.5)
; Bodies
;
CreateEntityBody(0, #PB_Entity_StaticBody)
CreateEntityBody(1, #PB_Entity_BoxBody, 1.0,0,1000)
; HingeJoint
;
HingeJoint(0, EntityID(0), 1.0, 0.5, 0.25, 0, 1, 0, EntityID(1), -1.0, 0.5, 0.25, 0, 1, 0)
SetJointAttribute(0, #PB_HingeJoint_LowerLimit, Degree(-#PI/3)); doesn't work
SetJointAttribute(0, #PB_HingeJoint_UpperLimit, Degree(#PI/3))
; Camera
;
CreateCamera(0, 0, 0, 100, 100)
MoveCamera(0, 0, 12, 15, #PB_Absolute)
CameraLookAt(0, 0, 0, 0)
CameraBackColor(0, RGB(228, 228, 230))
;Light
CreateLight(0, #White, 0, 5, 5)
EnableHingeJointAngularMotor(0, #True , 0, 1)
Repeat
Repeat
Event = WindowEvent()
Select Event
Case #PB_Event_CloseWindow
Quit = 1
EndSelect
If Quit = 1
End
EndIf ; Quit the app immediately
Until Event = 0
If ExamineKeyboard()
If KeyboardPushed(#PB_Key_Space)
Debug "reset rudder"
EndIf
If KeyboardPushed(#PB_Key_Left)
EnableHingeJointAngularMotor(0, #True , 1, 1)
HingeJointMotorTarget(0, 5, 1)
Debug "Rudder: Turn left"
ElseIf KeyboardPushed(#PB_Key_Right)
EnableHingeJointAngularMotor(0, #True , 1, 1)
HingeJointMotorTarget(0, -5, 1)
Debug "Rudder: Turn right"
EndIf
If KeyboardReleased(#PB_Key_Left)
EnableHingeJointAngularMotor(0, #False , 0, 0)
ElseIf KeyboardPushed(#PB_Key_Down)
EnableHingeJointAngularMotor(0, #False , 0, 0)
EndIf
EndIf
RenderWorld()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
EndIf
Else
MessageRequester("Error", "The 3D Engine can't be initialized",0)
EndIf
End