Spinning cube (yet again)

By therealkerst on Jun 01, 2009

a 3d spinning cube in mirc

/cube [length in pixels]

both are optional

alias cube {
  if (!$window(@3Dcube)) { window -pdfC +t @3Dcube -1 -1 500 500 }
  if (!%cube.color) set %cube.color $2
  if (!%cube.length) set %cube.length $1
  if ($var(%cube.3D.*,0) = 0) {
    set %cube.3D.y 0
    set %cube.3D.x 0
    set %cube.3D.z 0
    set %cube.3D.bx $calc($window(@3Dcube).bw /2)
    set %cube.3D.by $calc($window(@3Dcube).bh /2)
  }
  %cube.d = drawline -n @3Dcube $iif(%cube.color != $null,$v1,4) 1
  var %cube.x = 0
  while (%cube.x < 8) {
    var %cube. [ $+ [ %cube.x ] ] $calcxyz(%cube.x,$iif(%cube.length,$v1,50))
    inc %cube.x
  }
  clear -n @3dcube
  %cube.d %cube.1 %cube.5 %cube.7 %cube.3 %cube.1
  %cube.d %cube.5 %cube.4 %cube.6 %cube.7 %cube.5
  %cube.d %cube.4 %cube.0 %cube.2 %cube.6 %cube.4
  %cube.d %cube.0 %cube.1 %cube.3 %cube.2 %cube.0
  drawdot @3Dcube
  inc %cube.3D.y $r(1,3)
  inc %cube.3D.x $r(1,3)
  dec %cube.3D.z $r(1,3)
  .timer3Dcube -h 1 0 cube
}
alias -l posneg return $iif($mid($base($1,8,2,3),$2,1),-) $+ $3
alias -l calcxyz {
  var %cube.x1, %cube.x3, %cube.y2, %cube.z1, %cube.z3,%cube.z2 = $posneg($1,1,$2),%cube.y1 = $posneg($1,2,$2),%cube.y3 = $posneg($1,3,$2)
  %cube.z1 = $calc((%cube.y3 * $cos(%cube.3D.y).deg) - (%cube.z2 * $sin(%cube.3D.y).deg))
  %cube.x1 = $calc((%cube.y3 * $sin(%cube.3D.y).deg) + (%cube.z2 * $cos(%cube.3D.y).deg))
  %cube.z2 = $calc((%cube.y1 * $sin(%cube.3D.x).deg) + (%cube.z1 * $cos(%cube.3D.x).deg))
  %cube.y2 = $calc((%cube.y1 * $cos(%cube.3D.x).deg) - (%cube.z1 * $sin(%cube.3D.x).deg))
  %cube.x3 = $calc((%cube.y2 * $sin(%cube.3D.z).deg) + (%cube.x1 * $cos(%cube.3D.z).deg) + %cube.3D.bx)
  %cube.y3 = $calc((%cube.y2 * $cos(%cube.3D.z).deg) - (%cube.x1 * $sin(%cube.3D.z).deg) + %cube.3D.by)
  return %cube.x3 %cube.y3
}
menu @3Dcube {
  sclick: if ($timer(3Dcube)) .timer3Dcube off | else cube
}
on *:CLOSE:@3Dcube:{
  .timer3Dcube off
  unset %cube.*
}

Comments

Sign in to comment.
therealkerst   -  Jun 04, 2009

Thank you :)

 Respond  
Jonesy44   -  Jun 03, 2009

Nice :) a little juddery - but that doesn't matter.

 Respond  
Are you sure you want to unfollow this person?
Are you sure you want to delete this?
Click "Unsubscribe" to stop receiving notices pertaining to this post.
Click "Subscribe" to resume notices pertaining to this post.