Bezier curve generator

Advanced game related topics
Papala
User
User
Posts: 38
Joined: Wed Sep 12, 2012 5:09 pm

Bezier curve generator

Post by Papala »

If some need...

Code: Select all

InitSprite()
Global p1.f = 0, p2.f = 0.33, p3.f = 0.66, p4.f = 1, Duration, time

Procedure Bezier(t.f,d,Target)
  t = t/d
  Result = Pow(1-t,3)*(Target*P1) + 3*Pow(1-t,2)*t*(Target*P2)+ 3*(1-t)*Pow(t,2)*(Target*P3) + Pow(t,3)*(Target*P4)
  ProcedureReturn Result
EndProcedure

Procedure Play()
  p2 = Val(GetGadgetText(0))/100
  p3 = Val(GetGadgetText(1))/100
  Duration = Val(GetGadgetText(2))
  time = ElapsedMilliseconds()
EndProcedure

OpenWindow(0,0,0,800,400,"",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
OpenWindowedScreen(WindowID(0),0,0,600,400)
CreateSprite(0,30,30)
StartDrawing(SpriteOutput(0))
Box(0,0,30,30,#Red)
StopDrawing()
StringGadget(0,700,10,80,20,"33",#PB_String_Numeric)
StringGadget(1,700,50,80,20,"66",#PB_String_Numeric)
StringGadget(2,700,80,80,20,"500",#PB_String_Numeric)
TextGadget(#PB_Any,600,10,80,20,"P1 : ")
TextGadget(#PB_Any,600,50,80,20,"P2 : ")
TextGadget(#PB_Any,600,80,80,20,"Time : ")
ButtonGadget(4,700,150,80,20,"Play")
BindGadgetEvent(4,@Play())
Repeat 
  ClearScreen(0)
  If ElapsedMilliseconds()-time < Duration
    DisplaySprite(0,Bezier(ElapsedMilliseconds()-time,Duration,500),100)
  Else
    DisplaySprite(0,500,100)
  EndIf
  FlipBuffers()
Until WindowEvent() = #PB_Event_CloseWindow