// ActionScript file package { //import mx.utils.Delegate; //import flash.display.BitmapData; import flash.events.*; import flash.display.*; import flash.ui.*; import sandy.core.data.*; import sandy.core.Scene3D; import sandy.core.scenegraph.*; import sandy.materials.*; import sandy.materials.attributes.*; import sandy.primitive.*; import sandy.util.*; import sandy.events.*; import flash.display.MovieClip; import mx.core.FlexSimpleButton; import flash.text.TextField; public class script_sandy_steve_Fps extends Sprite { private var scene:Scene3D; private var camera:Camera3D; private var container:MovieClip; //private var maze:Maze; private var ground:Plane3D; private var object:Max; private var app1:Appearance; private var app2:Appearance; private var text:TextField = new TextField(); private var activate:Boolean = false; private var start:Boolean = false; public function script_sandy_steve_Fps() : void { init(); addEventListener( Event.ENTER_FRAME, loop3D ); } private function loop3D(event:Event) : void { stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseLook); stage.addEventListener(KeyboardEvent.KEY_DOWN, navigate); stage.addEventListener(KeyboardEvent.KEY_DOWN, keyClick); object.container.addEventListener(MouseEvent.MOUSE_DOWN, mouseClick); object.container.addEventListener(Event.ENTER_FRAME, objectAnimate); scene.render(); } private function init() : void { camera = new Camera3D (500, 400); camera.x = 0; camera.z = -2000; var root:Group = createScene(); scene = new Scene3D("scene", this, camera, root); Key.initialize(stage); } private function createScene() : Group { var g:Group = new Group(); //maze = new Maze("maze"); object = new Max ("object"); object.container.buttonMode = true; ground = new Plane3D("groundPlane", 2000, 2000, 1, 1, Plane3D.ZX_ALIGNED); ground.y = -300; ground.enableBackFaceCulling = true; ground.enableNearClipping = true; materials(); object.appearance = app1; ground.appearance = app2; g.addChild(ground); g.addChild(object); return g; } private function materials() : void { var mat:MaterialAttributes = new MaterialAttributes (new LightAttributes (false, 0.3)); var material1:Material = new ColorMaterial(0x3344CC, 1, mat); material1.lightingEnable = true; app1 = new Appearance(material1); var material2:ZShaderMaterial = new ZShaderMaterial (); material2.lightingEnable = true; app2 = new Appearance(material2); } private function mouseLook(event:MouseEvent) : void { if (activate) { camera.pan = (event.stageX-600/2)/1; camera.tilt = (event.stageY-400/2)/6; } } private function keyClick(event:KeyboardEvent) : void { if (Key.isDown(Keyboard.SPACE)) { activate = !activate; } } private function navigate(event:KeyboardEvent) : void { if (Key.isDown(65)) { camera.moveSideways(-20); } if (Key.isDown(68)) { camera.moveSideways(20); } if (Key.isDown(87)) { camera.moveForward(20); } if (Key.isDown(83)) { camera.moveForward(-20); } } private function mouseClick(event:MouseEvent) : void { start = !start; } private function objectAnimate(event:Event) : void { if (start) { object.rotateY += 2; object.rotateX += 1; } } } }