private MotionEntity CreateUnit(Vector2 position)
        {
            Vector3 translation = Common.Math.ToVector3(position);
            var     unit        = new MotionEntity
            {
                MainGraphic = new MetaModel
                {
                    SkinnedMesh = new SkinnedMeshFromFile("Models/Units/Brute1.x"),
                    Texture     = new TextureFromFile("Models/Units/Brute1.png"),
                    World       = SkinnedMesh.InitSkinnedMeshFromMaya * Matrix.Scaling(0.1f, 0.1f, 0.1f),
                    IsBillboard = false,
                },
                //Animation = "idle1",
                //AnimationLoop = true,
                Translation = translation
            };

            unit.MotionObject = new Common.Motion.Unit()
            {
                LocalBounding = new Common.Bounding.Cylinder(Vector3.Zero, 1.2f, 0.5f),
                Position      = translation
            };
            unit.VisibilityLocalBounding = unit.MotionObject.LocalBounding;
            return(unit);
        }
        private void InsertBulletMark(Vector3 position)
        {
            var me = new MotionEntity
            {
                MainGraphic = new MetaModel
                {
                    XMesh = new MeshFromFile("pebble3.x"),
                    //Texture = new TextureFromFile("pebble3.png"),
                    Texture = new TextureConcretizer {
                        TextureDescription = new global::Graphics.Software.Textures.SingleColorTexture(Color.Red)
                    },
                    World = SkinnedMesh.InitSkinnedMeshFromMaya * Matrix.Scaling(0.05f, 0.05f, 0.05f),
                },
                //Animation = "idle1",
                //AnimationLoop = true,
                Expires    = true,
                TimeToLive = 1f,
            };

            me.MotionObject = new Common.Motion.Object
            {
                LocalBounding = Vector3.Zero,
                Position      = position,
            };
            scene.Add(me);
        }
        private MotionEntity CreateBullet(Vector3 position, float speed, float orientation, Vector3 acceleration)
        {
            var velocity = new Vector3(
                speed * (float)Math.Cos(orientation),
                speed * (float)Math.Sin(orientation),
                0);
            var me = new MotionEntity
            {
                MainGraphic = new MetaModel
                {
                    SkinnedMesh = new SkinnedMeshFromFile("fireball1.x"),
                    Texture     = new TextureFromFile("fireball1.png"),
                    World       = SkinnedMesh.InitSkinnedMeshFromMaya * Matrix.Scaling(0.02f, 0.07f, 0.02f),
                    HasAlpha    = true,
                    Opacity     = 1.0f
                },
                //Animation = "idle1",
                //AnimationLoop = true,
                Expires    = true,
                TimeToLive = 40f
            };

            me.MotionObject = new Common.Motion.Projectile
            {
                Acceleration = acceleration,
                Rotation     = Quaternion.RotationAxis(Vector3.UnitZ, orientation),
                Position     = position,
                Velocity     = velocity,
                //LocalBounding = position
            };
            ((Common.Motion.Projectile)me.MotionObject).HitsObject += ((sender, e) =>
            {
                var o = e.IObject;
                InsertBulletMark(o.Position + new Vector3(0, 0, 2));
                if (!(o is Common.Motion.Unit))
                {
                    me.Remove();
                }
                else
                {
                    unitsHitLastShot++;
                }
            });
            return(me);
        }
        private MotionEntity CreateBlock(Vector3 position, Vector3 boxSize)
        {
            var block = new MotionEntity
            {
                MainGraphic = new MetaModel
                {
                    XMesh = new MeshConcretize
                    {
                        MeshDescription = new Graphics.Software.Meshes.BoxMesh
                        {
                            Min = new Vector3(-boxSize.X / 2f, -boxSize.Y / 2f, 0),
                            Max = new Vector3(boxSize.X / 2f, boxSize.Y / 2f, boxSize.Z),
                        },
                        Layout = Graphics.Software.Vertex.PositionNormalTexcoord.Instance
                    },
                    Texture = new TextureFromFile("Models/GroundTextures/Grass1.png"),
                },
                Translation = position
            };

            block.MotionObject = new Common.Motion.Static()
            {
                Position      = position,
                LocalBounding = new Common.Bounding.Chain
                {
                    Shallow   = true,
                    Boundings = new object[]
                    {
                        new MetaBoundingBox {
                            Mesh = ((MetaModel)block.MainGraphic).XMesh
                        },
                        new BoundingMetaMesh
                        {
                            Mesh           = ((MetaModel)block.MainGraphic).XMesh,
                            Transformation = Matrix.Identity
                        }
                    }
                }
                //LocalBounding = new BoundingMetaMesh
                //{
                //    Mesh = ((MetaModel)block.MainGraphic).XMesh
                //}
            };
            return(block);
        }
 private void InsertBulletMark(Vector3 position)
 {
     var me = new MotionEntity
     {
         MainGraphic = new MetaModel
         {
             XMesh = new MeshFromFile("pebble3.x"),
             //Texture = new TextureFromFile("pebble3.png"),
             Texture = new TextureConcretizer { TextureDescription = new global::Graphics.Software.Textures.SingleColorTexture(Color.Red) },
             World = SkinnedMesh.InitSkinnedMeshFromMaya * Matrix.Scaling(0.05f, 0.05f, 0.05f),
         },
         //Animation = "idle1",
         //AnimationLoop = true,
         Expires = true,
         TimeToLive = 1f,
     };
     me.MotionObject = new Common.Motion.Object
     {
         LocalBounding = Vector3.Zero,
         Position = position,
     };
     scene.Add(me);
 }
 private MotionEntity CreateUnit(Vector2 position)
 {
     Vector3 translation = Common.Math.ToVector3(position);
     var unit = new MotionEntity
     {
         MainGraphic = new MetaModel
         {
             SkinnedMesh = new SkinnedMeshFromFile("Models/Units/Brute1.x"),
             Texture = new TextureFromFile("Models/Units/Brute1.png"),
             World = SkinnedMesh.InitSkinnedMeshFromMaya * Matrix.Scaling(0.1f, 0.1f, 0.1f),
             IsBillboard = false,
         },
         //Animation = "idle1",
         //AnimationLoop = true,
         Translation = translation
     };
     unit.MotionObject = new Common.Motion.Unit()
     {
         LocalBounding = new Common.Bounding.Cylinder(Vector3.Zero, 1.2f, 0.5f),
         Position = translation
     };
     unit.VisibilityLocalBounding = unit.MotionObject.LocalBounding;
     return unit;
 }
        public override void Init()
        {
            Content.ContentPath = "Data";

            scene = new Scene();
            scene.View = this;

            scene.Camera = new LookatCartesianCamera()
            {
                Lookat = new Vector3(size.Width / 2f, size.Height / 2f, 0),
                Position = new Vector3(10, 10, 10),
                FOV = 0.5f,
                ZFar = 100,
                AspectRatio = AspectRatio
            };

            viewport = new Graphics.GraphicsDevice.Viewport(Device9.Viewport);

            InputHandler = new WalkaroundCameraInputHandler
            {
                Camera = (LookatCartesianCamera)scene.Camera,
                InputHandler = new InteractiveSceneManager { Scene = scene },
            };

            renderer = new Graphics.Renderer.Renderer(Device9) { Scene = scene, StateManager = new Graphics.GraphicsDevice.Device9StateManager(Device9), Settings = new Graphics.Renderer.Settings { WaterEnable = false } };
            //renderer = new Graphics.DummyRenderer.Renderer { Scene = scene, StateManager = new Graphics.GraphicsDevice.Device9StateManager(Device9), Settings = new Graphics.Renderer.Settings { WaterEnable = false } };
            renderer.Initialize(this);

            sceneRendererConnector = new SortedTestSceneRendererConnector
            {
                Renderer = renderer,
                Scene = scene
            };
            sceneRendererConnector.Initialize();

            motionSimulation = new Common.Motion.Simulation();

            scene.EntityAdded += new Action<Entity>(scene_EntityAdded);
            scene.EntityRemoved += new Action<Entity>(scene_EntityRemoved);

            var sim = (Common.Motion.Simulation)motionSimulation;

            npcs = new List<Common.IMotion.INPC>();
            Vector2 startingPosition = new Vector2(size.Width / 2f, size.Height / 2f);
            CreateGround(true);
            scene.Add(controlledUnit = CreateUnit(startingPosition));
            scene.Add(CreateBlock(Common.Math.ToVector3(startingPosition + new Vector2(2, -2)), new Vector3(1, 1, 1.5f)));
            scene.Add(CreateBlock(Common.Math.ToVector3(startingPosition + new Vector2(-4, 2)), new Vector3(1, 1, 1.5f)));
            scene.Add(CreateBlock(Common.Math.ToVector3(startingPosition + new Vector2(4, -2)), new Vector3(1, 1, 1.5f)));
            scene.Add(CreateBlock(Common.Math.ToVector3(startingPosition + new Vector2(7, -1)), new Vector3(1, 1, 1.5f)));
            //scene.Add(CreateNPC(startingPosition + new Vector2(3, 3)));
            scene.Add(CreateNPC(startingPosition + new Vector2(3, -1)));
            scene.Add(CreateNPC(startingPosition + new Vector2(-5, 3)));
            scene.Add(CreateNPC(startingPosition + new Vector2(-2, 1)));
            Vector2 unitGroupStartingPosition = startingPosition + new Vector2(3, 3);
            for (int y = 0; y < 5; y++)
            {
                for (int x = 0; x < 5; x++)
                {
                    scene.Add(CreateNPC(unitGroupStartingPosition + new Vector2(x, y)));
                }
            }

            BulletCreation = (() =>
            {
                scene.Add(CreateBullet(controlledUnit.Translation + Vector3.UnitZ,
                    bulletSpeed,
                    controlledUnit.MotionObject.Rotation.Angle,
                    bulletAcceleration));
            });

            foreach (var npc in npcs)
                npc.Pursue(controlledUnit.MotionObject, 1f);
        }
 private MotionEntity CreateBullet(Vector3 position, float speed, float orientation, Vector3 acceleration)
 {
     var velocity = new Vector3(
         speed * (float)Math.Cos(orientation),
         speed * (float)Math.Sin(orientation),
         0);
     var me = new MotionEntity
     {
         MainGraphic = new MetaModel
         {
             SkinnedMesh = new SkinnedMeshFromFile("fireball1.x"),
             Texture = new TextureFromFile("fireball1.png"),
             World = SkinnedMesh.InitSkinnedMeshFromMaya * Matrix.Scaling(0.02f, 0.07f, 0.02f),
             HasAlpha = true,
             Opacity = 1.0f
         },
         //Animation = "idle1",
         //AnimationLoop = true,
         Expires = true,
         TimeToLive = 40f
     };
     me.MotionObject = new Common.Motion.Projectile
     {
         Acceleration = acceleration,
         Rotation = Quaternion.RotationAxis(Vector3.UnitZ, orientation),
         Position = position,
         Velocity = velocity,
         //LocalBounding = position
     };
     ((Common.Motion.Projectile)me.MotionObject).HitsObject += ((sender, e) =>
         {
             var o = e.IObject;
             InsertBulletMark(o.Position + new Vector3(0, 0, 2));
             if (!(o is Common.Motion.Unit))
                 me.Remove();
             else
                 unitsHitLastShot++;
         });
     return me;
 }
 private MotionEntity CreateBlock(Vector3 position, Vector3 boxSize)
 {
     var block = new MotionEntity
     {
         MainGraphic = new MetaModel
         {
             XMesh = new MeshConcretize
             {
                 MeshDescription = new Graphics.Software.Meshes.BoxMesh
                 {
                     Min = new Vector3(-boxSize.X / 2f, -boxSize.Y / 2f, 0),
                     Max = new Vector3(boxSize.X / 2f, boxSize.Y / 2f, boxSize.Z),
                 },
                 Layout = Graphics.Software.Vertex.PositionNormalTexcoord.Instance
             },
             Texture = new TextureFromFile("Models/GroundTextures/Grass1.png"),
         },
         Translation = position
     };
     block.MotionObject = new Common.Motion.Static()
     {
         Position = position,
         LocalBounding = new Common.Bounding.Chain
         {
             Shallow = true,
             Boundings = new object[]
             {
                 new MetaBoundingBox { Mesh = ((MetaModel)block.MainGraphic).XMesh },
                 new BoundingMetaMesh
                 {
                     Mesh = ((MetaModel)block.MainGraphic).XMesh,
                     Transformation = Matrix.Identity
                 }
             }
         }
         //LocalBounding = new BoundingMetaMesh
         //{
         //    Mesh = ((MetaModel)block.MainGraphic).XMesh
         //}
     };
     return block;
 }