Forked from: rect's HoToPePaPiPuPo diff:8 forked from: HoToPePaPiPuPo SiON noteOn Event hacker_rlvkg.. forked:0favorite:0lines:163license : MIT License modified : 2009-08-29 13:39:30 Embed Tweet // forked from rect's HoToPePaPiPuPo //SiON noteOn Event package { import flash.display.*; import flash.events.*; import flash.utils.*; import org.papervision3d.*; import org.papervision3d.events.*; import org.papervision3d.view.*; import org.papervision3d.core.math.*; import org.papervision3d.objects.DisplayObject3D; import org.papervision3d.objects.primitives.*; import org.papervision3d.materials.*; import org.papervision3d.materials.special.*; import org.papervision3d.typography.*; import org.papervision3d.typography.fonts.HelveticaBold; import org.si.sion.*; import org.si.sion.events.*; import gs.*; [SWF(width="465", height="465", backgroundColor=0x000000, frameRate="60")] public class main extends BasicView { private const RADIAN:Number = Math.PI/180; private var driver:SiONDriver = new SiONDriver(); private var setAlpha:Number = 0; private var letterMat:Letter3DMaterial; private var letterFont:HelveticaBold; private var typos:Vector.<Text3D> = new Vector.<Text3D>(); private var bindNote:Vector.<int> = Vector.<int>([0,1,2,3,4,5,2,3,4,2,3,2,3,4,5,2,6,4,0,1,2,3,4,5,2,3,4,2,3,2,3,4,5,2,6]); private var words:Vector.<String> = Vector.<String>(["Ho", "To", "Pe", "Pa", "Pi", "Pu", "Po"]); private var wordsCount:int = 0; private var totalTypo:Number = 0; private const MAXLETTER:int = 15; public function main() { super (0,0,true,false,"Target"); if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE; stage.quality = StageQuality.LOW; init3D(); startRendering(); TweenMax.from(this, 5,{ alpha:0}); sionInit(); } private function sionInit():void { var mml:String; mml ="#REV;t111;"; mml +="#TABLE1{(128,100,20)10};"; mml +="%9s32na1 v12 l8 %t0 $ec+ec+16ee16c+eg+ f+d+f+d+16f+f+16d+f+d+ <bg+bg+16bb16g+b>d+ ec+ec+16ee16c+er;"; mml +="%6 @20 o5 v4 @v40 l8 @f60 [r1]4 $q2aaq6a.q2aa.q6a4 q2bbq6b.q2bb.q6b4 q2g+g+q6g+.q2g+g+.q6g+4 >q2c+c+q6c+.q2c+c+.q6c+4;"; mml +="%6 @20 o5 v5 @v40 l8 @f60 k-2 [r1]4 $q2eeq6e.q2ee.q6e4 q2f+f+q6f+.q2f+f+.q6f+4 q2d+d+q6d+.q2d+d+.q6d+4 q2g+g+q6g+.q2g+g+.q6g+4;"; mml +="%6 @20 o5 v5 @v40 l8 @f60 k2 [r1]4 $q2c+c+q6c+.q2c+c+.q6c+4 q2d+d+q6d+.q2d+d+.q6d+4 <q2bbq6b.q2bb.q6b4> q2c+c+q6c+.q2c+c+.q6c+4;"; mml +="%6 @0 o3 v12 @v70 l8 [r1]3 r2.q8 a32a16*>a64&a8*<a64 q4 $aaq6a.q4aaa16aa bbq6b.q4bbb16bb g+g+q6g+.q4g+g+g+16g+b >c+c+c+c+16c+c+c+16<bb;"; mml +="%6 @1 o3 v13 @v90 l8 q7 [r1]3 r2.c4 $ccr.cc16cr4;"; mml +="%6 @2 o3 v22 @v30 l8 q8 [r1]3 r2r8(4e32)4e32e16e4 $r4e4r4e4;"; mml +="%6 @3 @v40 v19 l16 o6 [r1]4 $c8cc c8cc;"; mml +="%6 @5 @v60 v15 l8 o7 %t1 p5 [r1]3 r2.p3c4p5 $e1[r1]3 e1[r1]r2.p3c4p5;"; mml +="#OPM@0{4, 7, 31, 11, 2, 0, 2, 28, 0, 0, 1, 0, 0, 31, 28, 2, 8, 0, 0, 0, 1, 0, 0, 0, 31, 18, 2, 0, 3, 20, 0, 0, 0, 0, 0, 31, 12, 2, 8, 1, 0, 0, 0, 1, 0, 0};"; mml +="#OPM@1{5, 5, 31, 22, 10, 7, 10, 12, 0, 0, 0, 3, 0, 31, 15, 10, 0, 10, 0, 0, 0, 3, 2, 0, 31, 3, 10, 0, 8, 0, 0, 0, 0, 1, 0, 31, 15, 9, 0, 10, 10, 0, 0, 0, 0, 0} @lfo63 mp-200,-2000,1;"; mml +="#OPM@2{4, 9, 31, 0, 10, 0, 0, 8, 1, 2, 7, 1, 1, 31, 18, 17, 15, 0, 0, 0, 9, 3, 0, 0, 31, 19, 0, 0, 10, 0, 0, 0, 7, 0, 0, 26, 10, 10, 5, 10, 0, 0, 0, 3, 1, 1} @lfo10 ma2,32,0,30;"; mml +="#OPM@3{0, 7, 31, 8, 10, 10, 1, 38, 2,15, 0, 3, 0, 31, 8, 10, 14, 1, 38, 1,11, 0, 1, 0, 31, 5, 10, 14, 1, 8, 1, 9, 7, 1, 0, 31, 20, 10, 10, 10, 5, 1, 9, 3, 2, 0};"; mml +="#OPM@5{4, 7, 31, 0, 2, 0, 1, 7, 0, 1, 7, 1, 2, 31, 9, 9, 1, 1, 5, 1, 1, 0, 0, 2, 31, 10, 5, 1, 1, 0, 0, 0, 3, 2, 1, 31, 10, 9, 1, 8, 9, 1, 8, 0, 0, 1} @lfo11 ma2,18,0,20;"; mml +="#OPM@20{7, 5, 28, 2, 6, 8, 5, 5, 1, 2, 2, 0, 1, 28, 15, 6, 8, 3, 0, 0, 2, 5, 0, 2, 28, 0, 2, 8, 4, 2, 3, 6, 3, 0, 2, 28, 18, 0, 8, 0, 0, 0, 1, 7, 0, 3} @lfo13 ma3,48,4;"; var playData:SiONData = driver.compile(mml); driver.addEventListener(SiONTrackEvent.NOTE_ON_FRAME, createTypo); driver.play(playData); } private function init3D():void { camera.fov = 70; var ct:DisplayObject3D = camera.target; ct.y = 500; var pixels:ByteArray = new ByteArray(); pixels.writeInt(0x987654); pixels.writeInt(0x456789); pixels.writeInt(0x654321); pixels.writeInt(0x123456) pixels.position = 0; var bmd:BitmapData = new BitmapData(2,2,false); bmd.setPixels(bmd.rect, pixels); var floorMat:BitmapMaterial = new BitmapMaterial(bmd,true); floorMat.tiled = true; floorMat.maxU = 6, floorMat.maxV = 6; var objPlane:Plane = new Plane(floorMat, 1000, 1000, 200,200); scene.addChild(objPlane); objPlane.pitch(90); objPlane.meshSort = DisplayObject3D.MESH_SORT_FAR; } private function createTypo(e:SiONTrackEvent):void { if (e.note == 84) { for (var i:int = 0; i < totalTypo; i++) { typos[i].extra.vy = 50; typos[i].material.fillAlpha = 1; } setAlpha = 1; } else if (e.eventTriggerID == 0) { var r:Number = getTimer() * 2 * RADIAN; var vy:Number = (Math.random() * 0.08 + 0.92); var vx:Number = Math.sqrt(1 - vy * vy) * Math.cos(r); var vz:Number = Math.sqrt(1 - vy * vy) * Math.sin(r); var accel:Number = Math.random() * 3 + 42; vx *= accel * 0.4, vy *= accel, vz *= accel * 0.4; letterFont = new HelveticaBold(); letterMat = new Letter3DMaterial(0x00CCFF, setAlpha); letterMat.doubleSided = true; var letter:Text3D = new Text3D(words[bindNote[Math.floor(wordsCount%35)]], letterFont, letterMat); letter.letterSpacing = -10; scene.addChild(letter); letter.y = 60, letter.scale = 1.2, letter.scaleX = -1.2; letter.extra = {vx:vx, vy:vy, vz:vz}; typos.push(letter); wordsCount++; totalTypo++; } } private function updateTypo():void { for (var i:int = 0; i < totalTypo; i++) { typos[i].extra.vy -= 2; if (typos[i].y + typos[i].extra.vy < 50) { typos[i].extra.vy = -typos[i].extra.vy * 0.5; typos[i].x += typos[i].extra.vx; typos[i].y += typos[i].extra.vy; typos[i].z += typos[i].extra.vz; } typos[i].x += typos[i].extra.vx; typos[i].y += typos[i].extra.vy; typos[i].z += typos[i].extra.vz; typos[i].lookAt(camera); var rgb:int = typos[i].material.fillColor; typos[i].material.fillAlpha -= 0.005; if (totalTypo > MAXLETTER) { scene.removeChild(typos[0]); typos.shift(); totalTypo--; } } } override protected function onRenderTick(event:Event = null):void { var t:Number = getTimer(); var s:Number = Math.max(-80,Math.min(-t*0.01,-30)); camera.z = Math.sin(t * 0.001) * 200 + 800; camera.orbit(s, t*0.02, true, camera.target); updateTypo(); super.onRenderTick(event); } } } Code Fullscreen Preview Fullscreen writeInt fillAlpha letterSpacing fillColor meshSort target maxU maxV tiled getTimer ByteArray setPixels extra scale camera Event.ADDED_TO_STAGE doubleSided play Math.sqrt position