package { import flare.basic.*; import flare.collisions.*; import flare.core.*; import flare.primitives.*; import flare.system.*; import flare.utils.*; import flash.display.*; import flash.events.*; import flash.geom.*; public class Main extends Sprite { private var _scene:Scene3D; private var hero:Pivot3D; private var heroCollision:SphereCollision; private var _level:Pivot3D; public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); _scene = new Viewer3D(this); _level = _scene.addChildFromFile("assets/test.f3d"); _scene.addEventListener(Scene3D.COMPLETE_EVENT, onSceneComplete); } private function onSceneComplete(e:Event):void { _scene.removeEventListener(Scene3D.COMPLETE_EVENT, onSceneComplete); var cube:Pivot3D = _level.addChild(new Cube("Collision", 50, 50, 50)); cube.setPosition( -50, 0, 200); _createHero(); _createCamera(); _scene.addEventListener(Scene3D.UPDATE_EVENT, onSceneUpdate); } private function _createCamera():void { _scene.camera = new Camera3D( "myOwnCamera" ); _scene.camera.setPosition( 0, 1000, 0 ); _scene.camera.lookAt(hero.x, hero.y, hero.z); _scene.camera.fieldOfView = 60; } private function _createHero():void { var pos:Point = new Point(0, 215); var rad:Number = 5; hero = _scene.addChild(new Sphere("hero", rad)); hero.x = pos.x; hero.z = pos.y; var offset:Vector3D = new Vector3D(0, 0, 0); heroCollision = new SphereCollision(hero, rad, offset); heroCollision.addCollisionWith(_level, true); heroCollision.reset(); var sphere:Pivot3D = new Sphere("", rad); sphere.setPosition(offset.x, offset.y, offset.z); hero.addChild(sphere); } private function onSceneUpdate(e:Event):void { var speed:Number = 1; if ( Input3D.keyDown( Input3D.UP ) ) hero.translateZ( speed ); if ( Input3D.keyDown( Input3D.DOWN ) ) hero.translateZ( -speed ); if ( Input3D.keyDown( Input3D.LEFT ) ) hero.translateX( -speed ); if ( Input3D.keyDown( Input3D.RIGHT ) ) hero.translateX( speed ); trace(heroCollision.slider()); Pivot3DUtils.setPositionWithReference( _scene.camera, 0, 50, 0, hero ); } } }