Page 1 of 1

ApplyEntityForce() possible bug?

Posted: Wed Mar 19, 2025 6:22 pm
by Mijikai
When pressing (and or holding) #PB_Key_Left or #PB_Key_Right while the spaceship is moving in one direction
it starts to behave out of control (as if it was really lagging) not sure how to describe it.

PB 6.20 x64 Linux Debian 12, on Windows 11 it worked fine.

Let me know what you think.

Code:

Code: Select all

EnableExplicit

Procedure.i Main()
  Protected.i exit
  Protected.i camera,light
  Protected.i mesh_ship,mat_ship,obj_ship
  If InitEngine3D() And InitSprite() And InitKeyboard()
    If OpenWindow(0,0,0,800,800,#Null$,#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
      If OpenWindowedScreen(WindowID(0),0,0,WindowWidth(0),WindowHeight(0))
        SetFrameRate(60)
        ;------------------------------------------------------ enable physics
        EnableWorldPhysics(#True)
        WorldGravity(0)
        ;------------------------------------------------------ create camera
        camera = CreateCamera(#PB_Any,0,0,100,100)
        MoveCamera(camera,0,0,100,#PB_Absolute)
        CameraLookAt(camera,0,0,0)
        ;------------------------------------------------------ create lighting
        light = CreateLight(#PB_Any,#White,0,0,100)
        ;------------------------------------------------------ create space ship
        mesh_ship = CreateCone(#PB_Any,1,3,6,1)
        mat_ship = CreateMaterial(#PB_Any,#Null,#Red)
        obj_ship = CreateEntity(#PB_Any,MeshID(mesh_ship),MaterialID(mat_ship))
        CreateEntityBody(obj_ship,#PB_Entity_ConeBody)
        Repeat
          Repeat
            Select WindowEvent()
              Case #PB_Event_None
                Break
              Case #PB_Event_CloseWindow
                exit = #True
            EndSelect
          ForEver
          ExamineKeyboard()
          If KeyboardPushed(#PB_Key_Up)
            ApplyEntityForce(obj_ship,0,20,0,0,0,0,#PB_Local,#PB_Local)
          EndIf
          If KeyboardPushed(#PB_Key_Left)
            RotateEntity(obj_ship,0,0,4,#PB_Relative)
          EndIf
          If KeyboardPushed(#PB_Key_Right)
            RotateEntity(obj_ship,0,0,-4,#PB_Relative)
          EndIf
          RenderWorld()
          FlipBuffers()
        Until exit Or KeyboardPushed(#PB_Key_Escape)
        CloseScreen() 
      EndIf
      CloseWindow(0)
    EndIf
  EndIf
  ProcedureReturn #Null
EndProcedure

End Main()

Re: ApplyEntityForce() possible bug?

Posted: Thu Mar 20, 2025 8:24 am
by miso
Definietly something is off with applyforce. It's not replacing the existing forces. Also, I don't see changes in entitydirection when entity rotates.

Code: Select all

EnableExplicit
DeclareModule petskii
  Declare init()
  Declare textout(x,y,text.s,color.i,intensity.i=255)
  Declare textoutlined(x,y,text.s,color.i,outlinecolor.i,intensity.i=255)
  Declare destroy()
EndDeclareModule
Module petskii
;-HIDDEN VARIABLES/CONSTANTS  
  #USED_CHARACTERS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()-_=+[{]};:',<.>/?"+Chr(34)
  Global Dim petskiifont(370):Global Dim fontimport.i(370)
;-SUB PROCEDURES
  Procedure sub_loadfont()
    Protected x.i,i.i,j.i,sprline.a
    For i = 1 To Len(#USED_CHARACTERS):fontImport(Asc(Mid(#USED_CHARACTERS,i,1)))=1 : Next i 
    Restore petskii_font
      For x= 1 To 370
        If fontimport(x)=1
          petskiifont(x)=CreateSprite(-1,8,12,#PB_Sprite_AlphaBlending)
          StartDrawing(SpriteOutput(petskiifont(x)))
          DrawingMode(#PB_2DDrawing_AllChannels)
          For j=0 To 11  
            Read.a sprline 
            For i=0 To 7
              If sprline&%1 :Plot(i,j,RGBA(255,255,255,255)): Else : Plot(i,j,RGBA(0,0,0,0)) : EndIf
              sprline>>1 
            Next i
          Next j
          StopDrawing()
          ZoomSprite(petskiifont(x),16,24)
        EndIf
      Next x
  EndProcedure
  
  ;-PUBLIC PROCEDURES  
  Procedure init()
    sub_loadfont()
  EndProcedure
  
  Procedure textout(x,y,text.s,color.i,intensity.i=255) : Protected.i textlength,i,character
    textlength.i = Len(text.s)
    For i = 1 To textlength.i
      character.i = Asc(Mid(text.s,i,1))
      If character.i>ArraySize(petskiifont()) : ProcedureReturn #Null : EndIf
      If IsSprite(petskiifont(character))
        DisplayTransparentSprite(petskiifont(character),(x+((i-1) * 16)),(y),intensity,color.i)
      EndIf
    Next i
  EndProcedure
  
  Procedure textoutlined(x,y,text.s,color.i,outlinecolor.i,intensity=255)
    textout(x-2,y,text.s,outlinecolor,intensity)
    textout(x+2,y,text.s,outlinecolor,intensity)
    textout(x,y-2,text.s,outlinecolor,intensity)
    textout(x,y+2,text.s,outlinecolor,intensity)
    textout(x,y,text.s,color,intensity)
  EndProcedure
  
  Procedure destroy()
    Protected i.i
    For i = 1 To Len(#USED_CHARACTERS)
      If IsSprite(petskiifont(i)) : FreeSprite(petskiifont(i)) : EndIf
    Next i
  EndProcedure
  
  ;-MODULE DATA
  DataSection
  petskii_font:
  Data.a $00,$00,$38,$38,$38,$38,$38,$38,$00,$38,$00,$00,$00,$00,$EE,$EE,$EE,$00,$00,$00,$00,$00,$00,$00,$00,$00,$EE,$EE,$EE,$FF,$EE,$FF,$EE,$EE,$00,$00,$00,$00,$38,$38,$FC,$0E,$7C,$E0,$7E,$38,$00,$00
  Data.a $00,$00,$CE,$CE,$EE,$70,$38,$1C,$EE,$E6,$00,$00,$00,$00,$7C,$7C,$EE,$7C,$3C,$EE,$EE,$FC,$00,$00,$00,$00,$E0,$E0,$70,$38,$00,$00,$00,$00,$00,$00,$00,$00,$70,$70,$38,$1C,$1C,$1C,$38,$70,$00,$00
  Data.a $00,$00,$1C,$1C,$38,$70,$70,$70,$38,$1C,$00,$00,$00,$00,$00,$00,$EE,$7C,$FF,$7C,$EE,$00,$00,$00,$00,$00,$00,$00,$38,$38,$FE,$38,$38,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$38,$38,$1C,$00
  Data.a $00,$00,$00,$00,$00,$00,$FE,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$38,$38,$00,$00,$00,$00,$00,$00,$C0,$E0,$70,$38,$1C,$0E,$00,$00,$00,$00,$7C,$7C,$EE,$FE,$FE,$EE,$EE,$7C,$00,$00
  Data.a $00,$00,$38,$38,$38,$3C,$38,$38,$38,$FE,$00,$00,$00,$00,$7C,$7C,$EE,$E0,$70,$1C,$0E,$FE,$00,$00,$00,$00,$7C,$7C,$EE,$E0,$78,$E0,$EE,$7C,$00,$00,$00,$00,$E0,$E0,$F0,$F8,$EE,$FE,$E0,$E0,$00,$00
  Data.a $00,$00,$FE,$FE,$0E,$7E,$E0,$E0,$EE,$7C,$00,$00,$00,$00,$7C,$7C,$EE,$0E,$7E,$EE,$EE,$7C,$00,$00,$00,$00,$FE,$FE,$EE,$70,$38,$38,$38,$38,$00,$00,$00,$00,$7C,$7C,$EE,$EE,$7C,$EE,$EE,$7C,$00,$00
  Data.a $00,$00,$7C,$7C,$EE,$EE,$FC,$E0,$EE,$7C,$00,$00,$00,$00,$38,$38,$38,$00,$00,$00,$38,$38,$00,$00,$00,$00,$38,$38,$38,$00,$00,$00,$38,$38,$1C,$00,$00,$00,$F0,$F0,$38,$1C,$0E,$1C,$38,$F0,$00,$00
  Data.a $00,$00,$00,$00,$00,$FE,$00,$FE,$00,$00,$00,$00,$00,$00,$1E,$1E,$38,$70,$E0,$70,$38,$1E,$00,$00,$00,$00,$7C,$7C,$EE,$E0,$70,$38,$00,$38,$00,$00,$00,$00,$7C,$7C,$EE,$FE,$FE,$0E,$CE,$7C,$00,$00
  Data.a $00,$00,$38,$38,$7C,$EE,$FE,$EE,$EE,$EE,$00,$00,$00,$00,$7E,$7E,$EE,$EE,$7E,$EE,$EE,$7E,$00,$00,$00,$00,$7C,$7C,$EE,$0E,$0E,$0E,$EE,$7C,$00,$00,$00,$00,$3E,$3E,$7E,$EE,$EE,$EE,$7E,$3E,$00,$00
  Data.a $00,$00,$FE,$FE,$0E,$0E,$3E,$0E,$0E,$FE,$FF,$00,$FF,$00,$FE,$FE,$0E,$0E,$3E,$0E,$0E,$0E,$00,$00,$00,$00,$7C,$7C,$EE,$0E,$FE,$EE,$EE,$7C,$00,$00,$00,$00,$EE,$EE,$EE,$EE,$FE,$EE,$EE,$EE,$00,$00
  Data.a $00,$00,$7C,$7C,$38,$38,$38,$38,$38,$7C,$00,$00,$00,$00,$F8,$F8,$70,$70,$70,$70,$7E,$3C,$00,$00,$00,$00,$EE,$EE,$7E,$3E,$1E,$3E,$7E,$EE,$00,$00,$00,$00,$0E,$0E,$0E,$0E,$0E,$0E,$0E,$FE,$00,$00
  Data.a $00,$00,$CE,$CE,$FE,$FE,$FE,$CE,$CE,$CE,$00,$00,$00,$00,$EE,$EE,$FE,$FE,$FE,$FE,$EE,$EE,$00,$00,$00,$00,$7C,$7C,$EE,$EE,$EE,$EE,$EE,$7C,$00,$00,$00,$00,$7E,$7E,$EE,$EE,$7E,$0E,$0E,$0E,$00,$00
  Data.a $00,$00,$7C,$7C,$EE,$EE,$EE,$EE,$7C,$F0,$00,$00,$00,$00,$7E,$7E,$EE,$EE,$7E,$3E,$7E,$EE,$00,$00,$00,$00,$7C,$7C,$EE,$0E,$7C,$E0,$EE,$7C,$00,$00,$00,$00,$FE,$FE,$38,$38,$38,$38,$38,$38,$00,$00
  Data.a $00,$00,$EE,$EE,$EE,$EE,$EE,$EE,$EE,$7C,$00,$00,$00,$00,$EE,$EE,$EE,$EE,$EE,$EE,$7C,$38,$00,$00,$00,$00,$CE,$CE,$CE,$CE,$FE,$FE,$FE,$CE,$00,$00,$00,$00,$EE,$EE,$EE,$7C,$38,$7C,$EE,$EE,$00,$00
  Data.a $00,$00,$EE,$EE,$EE,$EE,$7C,$38,$38,$38,$00,$00,$00,$00,$FE,$FE,$E0,$70,$38,$1C,$0E,$FE,$00,$00,$00,$00,$7C,$7C,$1C,$1C,$1C,$1C,$1C,$7C,$00,$00,$00,$00,$7C,$7C,$70,$70,$70,$70,$70,$7C,$00,$00
  Data.a $00,$00,$38,$38,$7C,$FE,$38,$38,$38,$38,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$FF,$00,$00,$00,$00,$00,$00,$00,$7C,$E0,$FC,$EE,$FC,$00,$00,$00,$00,$00,$00,$0E,$0E,$7E,$EE,$EE,$7E,$00,$00
  Data.a $00,$00,$00,$00,$00,$7C,$0E,$0E,$0E,$7C,$00,$00,$00,$00,$00,$00,$E0,$E0,$FC,$EE,$EE,$FC,$00,$00,$00,$00,$00,$00,$00,$7C,$EE,$FE,$0E,$7C,$00,$00,$00,$00,$00,$00,$F0,$38,$FC,$38,$38,$38,$00,$00
  Data.a $00,$00,$00,$00,$00,$FC,$EE,$EE,$FC,$E0,$7E,$00,$00,$00,$0E,$0E,$0E,$7E,$EE,$EE,$EE,$EE,$00,$00,$00,$00,$38,$38,$00,$3C,$38,$38,$38,$7C,$00,$00,$00,$00,$00,$00,$70,$00,$70,$70,$70,$70,$3C,$00
  Data.a $00,$00,$0E,$0E,$0E,$0E,$7E,$3E,$7E,$EE,$00,$00,$00,$00,$3C,$3C,$38,$38,$38,$38,$38,$7C,$00,$00,$00,$00,$00,$00,$00,$EE,$FE,$FE,$FE,$CE,$00,$00,$00,$00,$00,$00,$00,$7E,$EE,$EE,$EE,$EE,$00,$00
  Data.a $00,$00,$00,$00,$00,$7C,$EE,$EE,$EE,$7C,$00,$00,$00,$00,$00,$00,$00,$7E,$EE,$EE,$7E,$0E,$0E,$00,$00,$00,$00,$00,$00,$FC,$EE,$EE,$FC,$E0,$E0,$00,$00,$00,$00,$00,$00,$7E,$EE,$0E,$0E,$0E,$00,$00
  Data.a $00,$00,$00,$00,$00,$FC,$0E,$7C,$E0,$7E,$00,$00,$00,$00,$00,$00,$38,$FE,$38,$38,$38,$F0,$00,$00,$00,$00,$00,$00,$00,$EE,$EE,$EE,$EE,$FC,$00,$00,$00,$00,$00,$00,$00,$EE,$EE,$EE,$7C,$38,$00,$00
  Data.a $00,$00,$00,$00,$00,$CE,$FE,$FE,$FC,$FC,$00,$00,$00,$00,$00,$00,$00,$EE,$7C,$38,$7C,$EE,$00,$00,$00,$00,$00,$00,$00,$EE,$EE,$EE,$FC,$70,$3E,$00,$00,$00,$00,$00,$00,$FE,$70,$38,$1C,$FE,$00,$00
  Data.a $00,$00,$F0,$F0,$38,$38,$1E,$38,$38,$F0,$00,$00,$00,$00,$1E,$1E,$38,$38,$F0,$38,$38,$1E,$00,$00
  EndDataSection
EndModule


Procedure.i Main()
  Protected.i exit
  Protected.i camera,light
  Protected.i mesh_ship,mat_ship,obj_ship
  If InitEngine3D() And InitSprite() And InitKeyboard()
    If OpenWindow(0,0,0,800,800,#Null$,#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
      If OpenWindowedScreen(WindowID(0),0,0,WindowWidth(0),WindowHeight(0))
        petskii::init()
        SetFrameRate(60)
        ;------------------------------------------------------ enable physics
        EnableWorldPhysics(#True)
        WorldGravity(0)
        ;------------------------------------------------------ create camera
        camera = CreateCamera(#PB_Any,0,0,100,100)
        MoveCamera(camera,0,0,100,#PB_Absolute)
        CameraLookAt(camera,0,0,0)
        ;------------------------------------------------------ create lighting
        light = CreateLight(#PB_Any,#White,0,0,100)
        ;------------------------------------------------------ create space ship
        mesh_ship = CreateCone(#PB_Any,1,3,6,1)
        mat_ship = CreateMaterial(#PB_Any,#Null,#Red)
        obj_ship = CreateEntity(#PB_Any,MeshID(mesh_ship),MaterialID(mat_ship))
        
        CreateEntityBody(obj_ship,#PB_Entity_ConeBody)
        Repeat
          Repeat
            Select WindowEvent()
              Case #PB_Event_None
                Break
              Case #PB_Event_CloseWindow
                exit = #True
            EndSelect
          ForEver
          ExamineKeyboard()
          If KeyboardPushed(#PB_Key_Up)
            ApplyEntityForce(obj_ship,0,100,0,0,0,0,#PB_Local,#PB_World)
            SetEntityAttribute(obj_ship,#PB_Entity_MaxVelocity,5)
          EndIf
          If KeyboardPushed(#PB_Key_Left)
            RotateEntity(obj_ship,0,0,4,#PB_Relative)
          EndIf
          If KeyboardPushed(#PB_Key_Right)
            RotateEntity(obj_ship,0,0,-4,#PB_Relative)
          EndIf
          
          
          RenderWorld()
          petskii::textout(10,10,"dirx:"+StrF(EntityDirectionX(obj_ship),4),RGBA(255,255,255,255))
          petskii::textout(10,30,"diry:"+StrF(EntityDirectionY(obj_ship),4),RGBA(255,255,255,255))
          petskii::textout(10,50,"dirz:"+StrF(EntityDirectionZ(obj_ship),4),RGBA(255,255,255,255))

          petskii::textout(10,70,"Linear velocity x:"+StrF(GetEntityAttribute(obj_ship, #PB_Entity_LinearVelocityX),4),RGBA(255,255,255,255))
          petskii::textout(10,90,"Linear velocity y:"+StrF(GetEntityAttribute(obj_ship, #PB_Entity_LinearVelocityY),4),RGBA(255,255,255,255))
          petskii::textout(10,110,"Linear velocity z:"+StrF(GetEntityAttribute(obj_ship, #PB_Entity_LinearVelocityZ),4),RGBA(255,255,255,255))
          ;petskii::textout(10,130,"Entity world x:"+StrF(EntityX(obj_ship),4),RGBA(255,255,255,255))
          ;petskii::textout(10,150,"Entity world y:"+StrF(EntityY(obj_ship),4),RGBA(255,255,255,255))
          ;petskii::textout(10,170,"Entity world z:"+StrF(EntityZ(obj_ship),4),RGBA(255,255,255,255))
          
          
          FlipBuffers()
        Until exit Or KeyboardPushed(#PB_Key_Escape)
        CloseScreen() 
      EndIf
      CloseWindow(0)
    EndIf
  EndIf
  ProcedureReturn #Null
EndProcedure

End Main()

Re: ApplyEntityForce() possible bug?

Posted: Fri Mar 21, 2025 7:08 pm
by Mijikai
Thank you for testing, i will open a bug report.