All pastes #264323 Raw Edit

Hawaianhamster

public text v1 · immutable
·published 2006-12-02 07:26 UTC
rendered paste body
alias -l c return @Cannon

alias -l h return $hget(cannon,$1)

alias -l a hadd -m cannon $1-

alias -l k return $iif(!$2,return) $round($calc( [ $iif(!$2,$h(u) *) $1 ] ),2)

alias -l t $k(2*$sin($h(a)).deg /9.8)

alias -l x $k($!h(s)*$cos($h(a)).deg)

alias -l y $k($!h(s)*$sin($h(a)).deg -$h(s)^2*9.8/2)

alias -l vx $k($!cos($h(a)).deg)

alias -l vy $k($!sin($h(a)).deg -9.8*$h(s))

alias cannon {
  if ($window($c)) window -c $v1
  if ($hget(cannon)) hfree $v1
  window -CBdfpz $c -1 -1 520 450
  drawline $c 5 2 0 282 520 282
  tokenize 58 4 375:3 125:2 300 1
  drawtext $c 1 fixedsys 12 10 285 P
  drawtext -b $c 0 1 fixedsys 12 20 315 [[ Project ][ Pause ][ Reset ]]
  drawline $c 1 2 20 331 251 331 
  dsc $*
  a x 10
  a y 280
  st 1
}

alias -l st {
  var %t = $calc(300+($h(t)+$iif(!$1,0.02)/$t)*150),%c = drawdot $c, $&
    %x = $calc(10+12*($x)),%y = $calc(280-12*($y)),%d = drawtext -pn $c 1 fixedsys 1 345
  drawrect -fn $c 0 0 340 0 180 115
  %d 15 t= $h(s) $+ s
  %d 35 x= ( $+ $+($x,i + $abs($y),j) $+ )m
  %d 55 v= ( $+ $+($vx,i $iif($vy < 0,-,+) $abs($vy),j) $+ )m/s
  %d 75 |x|= $k(($x ^2+$y ^2)^0.5,1) $+ m
  %d 95 |v|= $k(($vx ^2+$vy ^2)^0.5,1) $+ m/s 
  drawline -n $c 1 2 20 331 251 331  
  drawdot $c 
  %c 0 3 $h(x) $h(y)
  if (%t > 450) {
    h t 0
    dsc 2 300 1 1
    return
  }
  %c 1 3 %x %y
  a x %x
  a y %y
  dsc 2 %t 1
  if (!$1) && (($h(c) != 2) || (!$inrect($mouse.x,$mouse.y,300,311,150,18)) || $&
    ($mouse.key !& 1)) .timerst -mh 1 20 st
}

alias -l drawsc {
  var %c = drawtext -n $c 1 fixedsys 1,%d = drawline -n $c 1,%y = $2 - 8
  drawrect -fn $c 0 1 $calc($1 -2) $calc(%y -2) 204 40 
  %d 3 $1-2 $calc(150+$1) $2
  %c $calc($1 -$width($3.,fixedsys,)) %y $3
  %c $calc(161+$1) %y $4
  %c $calc((152-$width($6-,fixedsys,))/2+$1) $calc($2 +15) $6-
  %d 3 $5 %y $5 $calc(8+$2)
  drawdot $c
}

alias -l dsc {
  var %x = $iif(2 \\ $1,$iif($2 < 50,50,$iif($2 > 200,200,$2)),$iif($2 < $& 
    300,300,$iif($2 > 450,450,$2))),%a
  if ($1 = 3) {
    %a = $k(( %x -50)*0.6,1)
    a a %a
    drawsc 50 370 0 90 %x  ß = %a $+ °
  }
  if ($1 = 4) {
    %a = $k(1+19*( %x -300)/150,1)
    a u %a
    drawsc 300 370 1 20 %x u = %a m/s
  }
  if ($3) {
    var %x = $iif($1 = 2,%x,$calc(300+150*$h(s)/$t)),%b = $calc(%x /150-2), $&
      %b = $iif(%b < 0,0,$iif(%b > 1,1,%b)),%a = $iif($1 = 2,$k($!t * %b,1),$h(s))
    if ($1 = 2) a s %a   
    a t %b
    drawsc 300 320 0 $t $calc(300+150*%b) t = %a $+ s
    if ($4) st 1
  }
}

menu @Cannon {
  mouse:if ($mouse.key & 1) && ($h(c)) dsc $v1 $mouse.x 1 $iif($v1 = 2,1)
  sclick {
    var %x = $mouse.x,%y = $mouse.y,%s
    if (!$getdot($menu,%x,%y)) {
      if ($inrect(%x,%y,300,311,152,19)) %s = 2
      elseif ($inrect(%x,%y,50,361,150,18)) %s = 3
      elseif ($inrect(%x,%y,300,361,150,18)) %s = 4
      dsc $$(%s) %x 1 $iif(%s = 2,1)
      a c %s
    }
  }
  uclick { 
    var %x = $mouse.x,%y = $mouse.y
    a c 0
    if ($inrect(%x,%y,25,315,75,15)) st
    elseif ($inrect(%x,%y,110,315,65,15)) .timerst off
    elseif ($inrect(%x,%y,180,315,70,15)) {
      h t 0
      dsc 2 300 1 1
    }
  }
}