s[1] = "r=0.8;d=10;x=300;y=100;a=0;c=#666666;w=20;h=20;s=e;"
s[2] = "x=300;y=200;a=1;"
s[3] = "x=300;y="+(gh-175)+";"
s[4] = "x=300;y="+(gh-125)+";"
s[5] = "x=300;y="+(gh-75)+";"
s[6] = "x=300;y="+(gh-25)+";"
For i = 7 To 11
s[i] = s[i-5]
s[i]["x"] = 400
EndFor
For i = 12 To 16
s[i] = s[i-5]
s[i]["x"] = 500
EndFor
s[i] = s[i-5]
s[i]["w"] = 250
s[i]["h"] = 20
s[i]["x"] = 400
s[i]["y"] = 150
n = i
For i = 1 To n
CheckDefault()
AddShape()
EndFor
s[i] = "r=0.9;x=0;y=200;c=#FF9900;w=15;h=15;s=e;ix=300;iy=-300;"
Timer.Interval = 500
Timer.Tick = OnTick
While ("True")
t = Clock.ElapsedMilliseconds
Physics_DoTimestep()
If tick Then
GraphicsWindow.Title = i
s[i] = s[18]
CheckDefault()
AddShape()
i = i + 1
tick = "False"
EndIf
dt = _dt * 1000 - (Clock.ElapsedMilliseconds - t)
If 0 < dt Then
Program.Delay(dt)
EndIf
EndWhile
Sub OnTick
tick = "True"
EndSub
Sub CheckDefault
' param i - index for shape array
nDefault = Array.GetItemCount(default)
index = Array.GetAllIndices(default)
For j = 1 To nDefault
If s[i][index[j]] = "" Then
s[i][index[j]] = default[index[j]]
EndIf
EndFor
EndSub
Sub AddShape
' c - color
GraphicsWindow.BrushColor = s[i]["c"]
param = s[i]
Physics_AddMovingShape()
s[i]["id"] = id
param = s[i]
Physics_SetPositions()
' o - opacity
Shapes.SetOpacity(s[i]["id"], s[i]["o"])
If s[i]["ix"] <> "" Then
Physics_SetImpulse()
EndIf
EndSub
Sub Physics_AddMovingShape
' param["f"] - friction 0 to 1
' param["r"] - restitusion 0 to 1
' param["d"] - density (default 1)
' param["s"] - shape "r", "e" or "t"
' param["w"] - width
' param["h "]- height
' return id - shape id
If param["s"] = "r" Then
id = Shapes.AddRectangle(param["w"], param["h"])
_m = param["d"] * param["w"] * param["h"] / 100
ElseIf s[i]["s"] = "e" Then
id = Shapes.AddEllipse(param["w"], param["h"])
_m = param["d"] * param["w"] * param["h"] * Math.Pi / 400
ElseIf s[i]["s"] = "t" Then
id = Shapes.AddTriangle(0, param["h"], param["w"]/2, 0, param["w"], param["h"])
_m = param["d"] * param["w"] * param["h"] / 200
EndIf
_s[id] = param
_s[id]["m"] = _m
EndSub
Sub Physics_SetImpulse
' param["id"] - shape id
' param["ix"] - x component of the impulse
' param["iy"] - y component of the impulse
_id = param["id"]
_s[_id]["ix"] = param["ix"]
_s[_id]["iy"] = param["iy"]
EndSub