Bezeir Curve Maker
Community Forums/Showcase/Bezeir Curve Maker
| ||
Strict
Graphics 1024,768,32
SetBlend LIGHTBLEND
Global x1:Int=540 'pount 0
Global y1:Int=125 'point 0
Global vx1:Int=200 '1
Global vy1:Int=350 '1
Global x2:Int=420 '2
Global y2:Int=670 '2
Global vx2:Int=700 '3
Global vy2:Int=350 '3
Global StepSetting = .1
Global counter=0
Global point:Int=0
Global MouseWas
Global GridPlot
Global Gridy
Global swap_x1=x1
Global swap_x2=x2
Global swap_vx1=vx1
Global swap_vx2=vx2
Global swap_y1 = y1
Global swap_y2 = y2
Global swap_vy1 = vy1
Global swap_vy2 = vy2
Repeat
Cls
SetColor 130,130,140
DrawLine 100,100,100,700
DrawLine 100,100,800,100
DrawLine 800,100,800,700
DrawLine 800,700,100,700
DrawLine 800,100,900,100
DrawLine 800,700,900,700
DrawLine 900,100,900,700
SetColor 90,90,100
For GridY= 1 To 18
For GridPlot = 1 To 21
Plot (GridPlot*32)+100,(GridY*32)+100
Next
Next
SetColor 215,215,215
Keys()
drawbezier (x1,y1,vx1,vy1,x2,y2,vx2,vy2)
SetColor 200,200,200
DrawText "mouse: "+(MouseX()-100)+","+(MouseY()-100),0,40
SetColor 200,200,200
DrawText "(R)everse (M)irror (F)lip (L)oop",0,70
DrawText "Mouse Wheel Changes Selection - [W][A][S][D] and RIGHT MOUSE move point",250,15
If point=0 Then SetColor 255,255,0 Else SetColor 200,200,200
DrawText "p0 coord: "+(x1-100)+","+(y1-100)+" - Start",0,0
DrawText "0 - Start",x1-2,y1-2
If MouseDown(2) And point=0 Then
x1=MouseX()
y1=MouseY()
EndIf
If point=1 Then SetColor 255,255,0 Else SetColor 200,200,200
DrawText "p1 coord: "+(vx1-100)+","+(vy1-100),0,10
DrawText "1",vx1-2,vy1-2
If MouseDown(2) And point=1 Then
vx1=MouseX()
vy1=MouseY()
EndIf
If point=2 Then SetColor 255,255,0 Else SetColor 200,200,200
DrawText "p2 coord: "+(x2-100)+","+(y2-100)+" - Finish",0,20
DrawText "2 - Finish",x2-2,y2-2
If MouseDown(2) And point=2 Then
x2=MouseX()
y2=MouseY()
EndIf
If point=3 Then SetColor 255,255,0 Else SetColor 200,200,200
DrawText "p3 coord: "+(vx2-100)+","+(vy2-100),0,30
DrawText "3",vx2-2,vy2-2
If MouseDown(2) And point=3 Then
vx2=MouseX()
vy2=MouseY()
EndIf
SetColor 255,255,255
If MouseZ() < MouseWas Then point=(point+1) Mod 4
If MouseZ() > MouseWas Then point=(point-1) Mod 4
If point = -1 point = 3 ; If point = 4 Then point = 0
MouseWas = MouseZ()
Flip
FlushMem
Until KeyDown(KEY_ESCAPE)
End
Function drawbezier (x1,y1,vx1,vy1,x2,y2,vx2,vy2)
counter = 0
SetColor 50,50,100
DrawLine x1,y1,vx1,vy1
DrawLine x2,y2,vx2,vy2
SetColor 255,50,50
For Local t:Float=0 To 1 Step .001
counter:+1
Local pointx:Float = x1*(1-t)^3 + 3*vx1*(1-t)^2*t + 3*vx2*(1-t)*t^2 + x2*t^3
Local pointy:Float = y1*(1-t)^3 + 3*vy1*(1-t)^2*t + 3*vy2*(1-t)*t^2 + y2*t^3
SetColor t*10,00,00
DrawRect pointx,pointy,2,2
SetColor t*1000,t*90,t*90
Plot pointx,pointy
If Counter = Rnd(20,90)
SetColor 50,50,255
Plot pointx,pointy
Counter = 0
EndIf
Next
End Function
Function Keys()
If KeyHit(Key_S)
If point = 0 Then y1:+1
If Point = 1 Then vy1:+1
If Point = 2 Then y2:+1
If Point = 3 Then vy2:+1
EndIf
If KeyHit(Key_W)
If Point = 0 Then y1:-1
If Point = 1 Then vy1:-1
If Point = 2 Then y2:-1
If Point = 3 Then vy2:-1
EndIf
If KeyHit(Key_A)
If Point = 0 Then x1:-1
If Point = 1 Then vx1:-1
If Point = 2 Then x2:-1
If Point = 3 Then vx2:-1
EndIf
If KeyHit(Key_D)
If Point = 0 Then x1:+1
If Point = 1 Then vx1:+1
If Point = 2 Then x2:+1
If Point = 3 Then vx2:+1
EndIf
If KeyHit (Key_M)
swap_x1 = x1
swap_x2 = x2
swap_vx1 = vx1
swap_vx2 = vx2
x1 = swap_x2
vx1 = swap_vx2
x2 = swap_x1
vx2 = swap_vx1
EndIf
If KeyHit (Key_F)
swap_y1 = y1
swap_y2 = y2
swap_vy1 = vy1
swap_vy2 = vy2
swap_x1 = x1
swap_x2 = x2
swap_vx1 = vx1
swap_vx2 = vx2
y1 = swap_y2
vy1 = swap_vy2
y2 = swap_y1
vy2 = swap_vy1
EndIf
If KeyHit (Key_R)
swap_y1 = y1
swap_y2 = y2
swap_vy1 = vy1
swap_vy2 = vy2
swap_x1 = x1
swap_x2 = x2
swap_vx1 = vx1
swap_vx2 = vx2
x1 = swap_x2
vx1 = swap_vx2
x2 = swap_x1
vx2 = swap_vx1
y1 = swap_y2
vy1 = swap_vy2
y2 = swap_y1
vy2 = swap_vy1
EndIf
If KeyHit (Key_L)
swap_y1 = y1
swap_y2 = y2
swap_vy1 = vy1
swap_vy2 = vy2
swap_x1 = x1
swap_x2 = x2
swap_vx1 = vx1
swap_vx2 = vx2
y1 = swap_y2
vy1 = swap_vy1
x1 = swap_x2
vx1 = swap_vx2
vx2 = swap_vx1
vy2 = swap_vy1
EndIf
EndFunction
This program will allow you to create bezier curves for any game that has an 800x600 resolution. (The editor is 1024x768 so you can see the entire game-field) You can then write down the curve data it gives you. It is very flexible and has options like: Mirror - Flips the Curve path horizontally Flip - Flips the Curve path Vertically Reverse - Swaps the Start and Finish point Loop - Makeas the Curve start and finish at same point for "Loop" effect I plan on building on it and adding more options, please share your feedback / modifications with me so we can make a great bezier curve maker! |