Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <GDIPlus.au3>
- #include <Array.au3>
- _GDIPlus_Startup()
- Global $minLife = 500
- Global $maxLife = 5000
- Global $maxSpeed = 15
- Global $GUIWidth = 800
- Global $GUIHeight = 600
- Global $BackgroundColor = 0x10010101
- Global $PartN = InputBox("Numero particelle", "Inserisci il numero di particelle: ", 200)
- Global $FPS, $FPSTimer, $FPSCounter
- Dim $Particles[$PartN][9]
- For $i = 0 To $PartN - 1
- NewParticle($i, True)
- Next
- Opt("GuiOnEventMode", 1)
- $GUI = GUICreate("asdParticles", $GUIWidth, $GUIHeight)
- GUISetBkColor(0x00000, $GUI)
- GUISetOnEvent(-3, "GUIExit")
- $Graphics = _GDIPlus_GraphicsCreateFromHWND($GUI)
- $BufferBMP = _GDIPlus_BitmapCreateFromGraphics($GUIWidth, $GUIHeight, $Graphics)
- $Buffer = _GDIPlus_ImageGetGraphicsContext($BufferBMP)
- _GDIPlus_GraphicsSetSmoothingMode($Buffer, 2)
- GUISetState(@SW_SHOW, $GUI)
- $FPSTimer = TimerInit()
- AdlibRegister("Update", 25)
- AdlibRegister("Draw", 25)
- AdlibRegister("ShowFPS", 1000)
- While 1
- Sleep(20)
- WEnd
- Func Draw()
- _GDIPlus_GraphicsClear($Buffer, $BackgroundColor)
- $Brush = _GDIPlus_BrushCreateSolid()
- For $i = 0 To $PartN - 1
- _GDIPlus_BrushSetSolidColor($Brush, $Particles[$i][6])
- _GDIPlus_GraphicsFillEllipse($Buffer, $Particles[$i][0], $Particles[$i][1], $Particles[$i][4], $Particles[$i][5], $Brush)
- Next
- _GDIPlus_BrushDispose($Brush)
- _GDIPlus_GraphicsDrawImageRect($Graphics, $BufferBMP, 0, 0, $GUIWidth, $GUIHeight)
- FPSCounter()
- EndFunc ;==>Draw
- Func Update()
- $nearMouseSize = 3.5
- $farMouseSize = 2.5
- $MousePos = GUIGetCursorInfo($GUI)
- If $MousePos[2] Then $clickColor = newRandomColor()
- Local $xComp = 0, $yComp = 0
- For $i = 0 To $PartN - 1
- If IsArray($MousePos) Then
- If $MousePos[2] = 1 Then
- If $Particles[$i][2] < 20 Then $Particles[$i][2] *= 1.2
- If $Particles[$i][3] < 20 Then $Particles[$i][3] *= 1.2
- $Particles[$i][4] = $nearMouseSize
- $Particles[$i][5] = $nearMouseSize
- $Particles[$i][6] = $clickColor
- EndIf
- $dh = $MousePos[0] - $Particles[$i][0]
- $dv = $MousePos[1] - $Particles[$i][1]
- $distX = Abs($dh)
- $distY = Abs($dv)
- $distD = Sqrt($distX ^ 2 + $distY ^ 2)
- If $distD > 150 Then
- $Particles[$i][4] = $farMouseSize ; Random(3, 4, 1)
- $Particles[$i][5] = $farMouseSize ; Random(3, 4, 1)
- Else
- $Particles[$i][4] = $nearMouseSize ; Random(1, 2, 1)
- $Particles[$i][5] = $nearMouseSize ; Random(1, 2, 1)
- EndIf
- EndIf
- If $Particles[$i][7] > TimerInit() Then ContinueLoop
- If TimerDiff($Particles[$i][7]) > $Particles[$i][8] Then
- NewParticle($i)
- ContinueLoop
- EndIf
- If ($Particles[$i][0] + $Particles[$i][2]) > $GUIWidth Then
- $Particles[$i][0] = $GUIWidth - ($Particles[$i][2] - ($GUIWidth - $Particles[$i][0]))
- $Particles[$i][2] *= -1
- ElseIf ($Particles[$i][0] + $Particles[$i][2]) < 0 Then
- $Particles[$i][0] = -($Particles[$i][2] + $Particles[$i][0])
- $Particles[$i][2] *= -1
- EndIf
- If ($Particles[$i][1] + $Particles[$i][3]) > $GUIHeight Then
- $Particles[$i][1] = $GUIHeight - ($Particles[$i][3] - ($GUIHeight - $Particles[$i][1]))
- $Particles[$i][3] *= -1
- ElseIf ($Particles[$i][1] + $Particles[$i][2]) < 0 Then
- $Particles[$i][1] = -($Particles[$i][2] + $Particles[$i][1])
- $Particles[$i][3] *= -1
- EndIf
- If $xComp > 0 Then $Particles[$i][2] -= $xComp
- If $yComp > 0 Then $Particles[$i][3] -= $yComp
- $Particles[$i][2] *= 0.98
- $Particles[$i][3] *= 0.98
- $Particles[$i][0] += $Particles[$i][2]
- $Particles[$i][1] += $Particles[$i][3]
- Next
- EndFunc ;==>Update
- Func GUIExit()
- _GDIPlus_Shutdown()
- Exit
- EndFunc ;==>GUIExit
- Func FPSCounter()
- If TimerDiff($FPSTimer) > 1000 Then
- $FPSTimer = TimerInit()
- $FPS = $FPSCounter
- $FPSCounter = 0
- EndIf
- $FPSCounter += 1
- EndFunc ;==>FPSCounter
- Func ShowFPS()
- WinSetTitle(WinGetTitle($GUI), "", "asdParticles - " & $FPS & " fps")
- EndFunc ;==>ShowFPS
- Func _DebugWrite($txt, $line = @ScriptLineNumber)
- $txt = StringReplace($txt, @CRLF, @LF)
- $txt = StringReplace($txt, @CR, @LF)
- $split = StringSplit($txt, @LF)
- For $x = 1 To $split[0]
- If $split[$x] <> "" Then ConsoleWrite(@LF & "===>" & @HOUR & ":" & @MIN & ":" & @SEC & "." & @MSEC & " - PID:" & @AutoItPID & " - " & $line & @TAB & "|" & $split[$x])
- Next
- EndFunc ;==>_DebugWrite
- Func NewParticle($i, $newcolor = True)
- $Particles[$i][0] = $GUIWidth / 2
- $Particles[$i][1] = $GUIHeight / 2
- $Particles[$i][2] = Random(-$maxSpeed, $maxSpeed)
- $Particles[$i][3] = Random(-$maxSpeed, $maxSpeed)
- $Particles[$i][4] = 1
- $Particles[$i][5] = 1
- If $newcolor Then $Particles[$i][6] = newRandomColor()
- $Particles[$i][7] = TimerInit()
- $Particles[$i][8] = Random($minLife, $maxLife, 1)
- EndFunc ;==>NewParticle
- Func newRandomColor()
- Return 0xFF000000 + Random(0x0000FF, 0xFFFFFF, 1)
- EndFunc
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement