package { import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.Event; import flash.events.KeyboardEvent; import flash.events.MouseEvent; import flash.utils.Timer; import org.papervision3d.core.math.Number3D; import org.papervision3d.core.proto.MaterialObject3D; import org.papervision3d.lights.PointLight3D; import org.papervision3d.materials.shadematerials.FlatShadeMaterial; import org.papervision3d.materials.utils.MaterialsList; import org.papervision3d.objects.DisplayObject3D; import org.papervision3d.objects.primitives.Cube; import org.papervision3d.view.BasicView; [SWF( backgroundColor='0xFFFFFF', frameRate='10')] public class talkstimer extends BasicView { public var START_TIME:Number = (1) * 1000 public var TALK_TIME_1:Number = (4 * 60) * 1000 public var TALK_TIME_2:Number = (1 * 60) * 1000 public var CHANGE_TIME:Number = (20) * 1000 public var chars:Object public var start_time:Date public var fulltime_old:String public var cameraPosition:Number3D = new Number3D(0, 1000, -1000) public function talkstimer() { stage.align = StageAlign.TOP_LEFT stage.scaleMode = StageScaleMode.NO_SCALE chars = new Object(); chars["0"] = [ 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1 ]; chars["1"] = [ 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1 ]; chars["2"] = [ 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1 ]; chars["3"] = [ 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1 ]; chars["4"] = [ 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1 ]; chars["5"] = [ 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1 ]; chars["6"] = [ 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1 ]; chars["7"] = [ 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0 ]; chars["8"] = [ 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1 ]; chars["9"] = [ 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1 ]; chars[":"] = [ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 ] sceneSetup() start_time = new Date() var timer:Timer = new Timer(100) timer.addEventListener( "timer", updateClock ) timer.start() startRendering() stage.addEventListener(MouseEvent.MOUSE_WHEEL, mouseWheel) stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDown) } public function keyDown(event:KeyboardEvent):void { start_time = new Date() } public function mouseWheel(event:MouseEvent):void { camera.zoom += event.delta / 10 if (camera.zoom < 1) { camera.zoom = 1 } } protected override function onRenderTick(event:Event = null):void { cameraPosition.x = (stage.stageWidth / 2 - mouseX) / stage.stageWidth * 1000 cameraPosition.z = -(stage.stageHeight - mouseY) / stage.stageHeight * 1000 moveCameraPosition(); super.onRenderTick(event); } public function moveCameraPosition():void { camera.x += ( cameraPosition.x - camera.x ) * .05; camera.y += ( cameraPosition.y - camera.y ) * .05; camera.z += ( cameraPosition.z - camera.z ) * .05; } public function sceneSetup():void { camera.x = cameraPosition.x camera.y = cameraPosition.y camera.z = cameraPosition.z camera.zoom = 10 var light:PointLight3D = new PointLight3D() light.z = 600 light.x = -700 light.y = 800 var material:MaterialObject3D = new FlatShadeMaterial(light) var mlist:MaterialsList = new MaterialsList({all:material}) for (var i:Number = 0; i < 4; i++) { var char3D:DisplayObject3D = new DisplayObject3D() char3D.name = "char" + i for (var c:Number = 0; c < 15; c ++) { var dot:Cube = new Cube(mlist, 100, 100, 100, 2, 2, 2) dot.x = (c % 3) * 100 dot.z = - int(c / 3) * 100 dot.name = "dot" + c char3D.addChild(dot) } char3D.x = (i - 2) * 350 + 100 char3D.z = 200 scene.addChild(char3D) } } public function updateChar3D(i:Number,char:String):void { var char3D:DisplayObject3D = scene.getChildByName("char"+i); for (var c:Number = 0; c < 15; c ++) { var dot3D:DisplayObject3D = char3D.getChildByName("dot"+c); dot3D.visible = (chars[char][c] == 1) } } public function to_msec(date:Date):Number { return ((date.getMinutes() * 60) + date.getSeconds()) * 1000 + date.getMilliseconds() } public function updateClock(e:Event):void { var diff:Number = (to_msec(new Date()) - to_msec(start_time)) % (START_TIME + TALK_TIME_1 + TALK_TIME_2 + CHANGE_TIME) var h:Number var c:Number var t:Date = new Date() if (diff < START_TIME) { h = height * (1 - diff / START_TIME) c = 0x00ffff t.setTime(START_TIME + TALK_TIME_1 + TALK_TIME_2 - diff) } else if (diff < START_TIME + TALK_TIME_1) { h = height * (diff - START_TIME) / (TALK_TIME_1 + TALK_TIME_2) c = 0x00ffff t.setTime(START_TIME + TALK_TIME_1 + TALK_TIME_2 - diff) } else if (diff < TALK_TIME_1 + TALK_TIME_2) { h = height * (diff - START_TIME) / (TALK_TIME_1 + TALK_TIME_2) c = 0x008000 t.setTime(START_TIME + TALK_TIME_1 + TALK_TIME_2 - diff) } else { h = height * (1 - (diff - (START_TIME + TALK_TIME_1 + TALK_TIME_2)) / CHANGE_TIME) c = 0xff0000 t.setTime(0) } graphics.clear() graphics.beginFill(c) graphics.drawRect(0, height - h, width, h) graphics.endFill() var m:Number = t.getMinutes() var s:Number = t.getSeconds() var fulltime:String = String(m % 10) + ":" + String(int(s / 10)) + String(s % 10) if (fulltime != fulltime_old) { fulltime_old = fulltime for (var i:Number = 0; i < 4; i++) { var char:String = fulltime.substr(i,1); updateChar3D(i, char); } } } } }