/// <summary>
        /// Creates a New Instance of the Base Ship Class
        /// </summary>
        /// <param name="AssetPath"></param>
        public vxWaterEntity(vxEngine Engine, Vector3 StartPosition, Vector3 WaterScale)
            : base(Engine, Engine.Assets.Models.WaterPlane, StartPosition)
        {
            Engine.Current3DSceneBase.waterItems.Add(this);

            waterBumpMap       = vxEngine.Assets.Textures.Texture_WaterWaves;
            waterDistortionMap = vxEngine.Assets.Textures.Texture_WaterDistort;

            //Render even in debug mode
            RenderEvenInDebug = true;

            this.WaterScale = WaterScale;

            WrknPlane = new Plane(0, 1, 0, StartPosition.Y);
            Position  = StartPosition;

            World  = Matrix.CreateScale(WaterScale);
            World *= Matrix.CreateTranslation(Position);



            //Set up Scale Cubes
            scPosition        = new vxScaleCube(vxEngine, StartPosition);
            scPosition.Moved += ScPosition_Moved;

            scLeft         = new vxScaleCube(vxEngine, StartPosition + Vector3.Backward * WaterScale.Z);
            scLeft.Moved  += Sc_Moved;
            scRight        = new vxScaleCube(vxEngine, StartPosition - Vector3.Backward * WaterScale.Z);
            scRight.Moved += Sc_Moved;

            scForward        = new vxScaleCube(vxEngine, StartPosition + Vector3.Right * WaterScale.X);
            scForward.Moved += Sc_Moved;
            scBack           = new vxScaleCube(vxEngine, StartPosition - Vector3.Right * WaterScale.X);
            scBack.Moved    += Sc_Moved;


            //
            //Physics Body
            //
            var tris = new List <Vector3[]>();

            //Remember, the triangles composing the surface need to be coplanar with the surface.  In this case, this means they have the same height.
            tris.Add(new[]
            {
                new Vector3(Position.X - WaterScale.X, Position.Y, Position.Z - WaterScale.Z),
                new Vector3(Position.X + WaterScale.X, Position.Y, Position.Z - WaterScale.Z),
                new Vector3(Position.X - WaterScale.X, Position.Y, Position.Z + WaterScale.Z),
            });
            tris.Add(new[]
            {
                new Vector3(Position.X - WaterScale.X, Position.Y, Position.Z + WaterScale.Z),
                new Vector3(Position.X + WaterScale.X, Position.Y, Position.Z - WaterScale.Z),
                new Vector3(Position.X + WaterScale.X, Position.Y, Position.Z + WaterScale.Z),
            });
            fluidVolume = new FluidVolume(Vector3.Up, -9.81f, tris, WaterScale.Y, density, 0.9f, .4f);

            Current3DScene.BEPUPhyicsSpace.Add(fluidVolume);
        }
示例#2
0
        public override void LoadContent()
        {
            InitialiseLevel();

            vxScaleCube center = new vxScaleCube(vxEngine, Vector3.One * 1000);

            base.LoadContent();

            InitialiseCamera();

            Cursor = new vxCursor3D(vxEngine);

            //
            //Grabbers
            //
            grabber = new MotorizedGrabSpring();
            BEPUPhyicsSpace.Add(grabber);
            rayCastFilter = RayCastFilter;

            workingPlane = new vxWorkingPlane(vxEngine, vxEngine.Model_Sandbox_WorkingPlane, new Vector3(0, WrkngPln_HeightDelta, 0));

            for (int i = 0; i < Items.Count; i++)
            {
                Items[i].Index = i;
            }
            ConnectedMatrix      = Matrix.Identity;
            CurrentlySelectedKey = "";

            if (this.SandboxGameState == vxEnumSandboxGameState.EditMode)
            {
                this.vxEngine.InputManager.ShowCursor = true;
            }

            vxTabPage tabPage_EngineItems = new vxTabPage(vxEngine, tabControl, "General Items");

            tabControl.AddItem(tabPage_EngineItems);

            ScrollPanel_EngineItems = new vxScrollPanel(new Vector2(0, 0),
                                                        vxEngine.GraphicsDevice.Viewport.Width - 150, vxEngine.GraphicsDevice.Viewport.Height - 75);
            tabPage_EngineItems.AddItem(ScrollPanel_EngineItems);

            RegisterSandboxEntities();
        }