All pastes #373593 Raw Edit

Something

public text v1 · immutable
#373593 ·published 2007-02-26 21:40 UTC
rendered paste body
on *:close:@SF: {
  sfStop
}
alias sfPrepare {
  window -pdk0 +t @SF -1 -1 320 220
  drawrect -rf @SF 0 1 0 0 314 188
  sfStop
  set %sfDrawId 0
  set %sfDelId 1
  set %sfFrames 0
  set %sfTime 0
  set %sfFrame 0
  ;set %sfLastFrame $ticks
  hmake sfDotCoordX 1000
  hmake sfDotCoordY 1000
  hmake sfDotSize 1000
  hmake sfDotSpeed 1000
  hmake sfDotColor 1000
  sfCreateObj 10
  .timerSfUpdateFrame -mo 0 1 sfUpdateFrame

}
alias sfStop {
  .timerSfUpdateFrame off
  .timersfCreateId off
  unset sfDrawId
  unset sfDelid
  unset %sfFrames
  unset %sfTime
  unset %sfFrame
  unset %sfTotalObj
  ;unset %sfLastFrame
  if ($hget(sfDotCoordX)) { hfree sfDotCoordX }
  if ($hget(sfDotCoordY)) { hfree sfDotCoordY }
  if ($hget(sfDotSize)) { hfree sfDotSize }
  if ($hget(sfDotSpeed)) { hfree sfDotSpeed }
  if ($hget(sfDotColor)) { hfree sfDotColor }
  drawrect -rf @SF 0 1 0 0 314 188
}
alias sfUpdateFrame {
  drawrect -rnf @SF 0 1 0 0 314 188
  var %x %sfdelId
  while (%sfDrawId >= %x) {
    var %cx = $hget(sfDotCoordX,%x)
    var %cx = %cx + $hget(sfDotSpeed,%x)
    ;original 314
    if (%cx > 317) {
      sfRecreateObj %x
    }
    else {
      drawdot -nr @SF $hget(sfDotColor,%x) $hget(sfDotSize,%x) %cx $hget(sfDotCoordY,%x)
      hadd sfDotCoordX %x %cx 
    }    
    inc %x
  }
  drawtext -rn @SF 16777215 2 2 %sfFrame %sfTotalObj
  inc %sfFrames
  if ($calc($ticks - %sfTime) > 1000) {
    set %sfTime $ticks
    set %sfFrame %sfFrames
    if (%sfFrame > 31) {
      .timersfCreateId -mo 5 5 sfCreateObj 1
    }
    elseif (%sfFrame < 30) {
      sfDelObj 1
    }
    set %sfFrames 0
  }
  drawdot @SF
}
alias sfRecreateObj {
  ;hadd sfDotCoordX $1 $calc($rand(1,30) * -1)
  hadd sfDotCoordX $1 -1
  hadd sfDotCoordY $1 $rand(1,187)
  hadd sfDotSize $1 $rand(1,4)
  hadd sfDotSpeed $1 $calc($rand(100,600) / 100)
  hadd sfDotColor $1 $rand(1,16777215)
}
alias sfCreateObj {
  if ($calc($hget(sfDotCoordX,0).item + $1) > 1000) { echo -a OBJECT LIMIT REACHED | return }
  var %x = $1
  while (%x) {
    var %sid $sfId
    sfRecreateObj %sid
    ;hadd sfDotCoordX %sid $rand(1,314)
    dec %x
  }
  set %sfTotalObj $hget(sfDotCoordX,0).item
}
alias sfDelObj {
  if ($hget(sfDotCoordX,0).item < $1) { echo -a TOTAL OBJECTS: $v1 | return }
  var %x = $1
  while (%x) {
    hdel sfDotCoordX %sfDelId
    hdel sfDotCoordY %sfDelId
    hdel sfDotSize %sfDelId
    hdel sfDotSpeed %sfDelId
    hdel sfDotColor %sfDelId
    inc %sfDelId
    dec %x
  }
  set %sfTotalObj $hget(sfDotCoordX,0).item
}
alias sfId {
  inc %sfDrawId
  return %sfDrawId
}