Exemple #1
0
        public override void Exit()
        {
            Program.Instance.ProgramEvent -= new ProgramEventHandler(Instance_ProgramEvent);

            if (Replay != null)
            {
                Replay.Close();
            }

            if (Mechanics.MotionSimulation is Common.Motion.ThreadSimulationProxy)
            {
                ((Common.Motion.ThreadSimulationProxy)Mechanics.MotionSimulation).Shutdown();
            }

            Scene.Root.ClearChildren();
            ChangeState(null);
            Program.Instance.SoundManager.StopAllChannels();
            Program.Instance.Interface.ClearInterface();
            SceneRendererConnector.Release();
            Renderer.Release(Scene.View.Content);
            Map.Release();
#if BETA_RELEASE
            dtimeLog.Close();
#endif

            Program.Instance.Content.Release();
            var mainCharSkinMesh = Program.Instance.Content.Acquire <SkinnedMesh>(
                new SkinnedMeshFromFile("Models/Units/MainCharacter1.x"));
            mainCharSkinMesh.RemoveMeshContainerByFrameName("sword1");
            mainCharSkinMesh.RemoveMeshContainerByFrameName("sword2");
            mainCharSkinMesh.RemoveMeshContainerByFrameName("rifle");

            musicChannel1 = ambienceChannel1 = null;
            Instance      = null;
        }
Exemple #2
0
        public override void PreRender(float dtime)
        {
            Graphics.Renderer.Renderer renderer = (Graphics.Renderer.Renderer)Game.Instance.Renderer;

            renderer.CalcShadowmapCamera(renderer.Settings.LightDirection, 0f);
#if BETA_RELEASE
            ClientProfilers.Culling.Start();
#endif
            if (Client.Game.Game.Instance.sceneQuadtree != null)
            {
                SceneRendererConnector.CullScene(Client.Game.Game.Instance.sceneQuadtree);
            }
#if BETA_RELEASE
            ClientProfilers.Culling.Stop();
#endif
            state.PreRender(dtime);
        }
        public override void Update(float dtime)
        {
            Renderer.Settings.WaterLevel     = MainWindow.Instance.CurrentMap.Settings.WaterHeight;
            Renderer.Settings.AmbientColor   = MainWindow.Instance.CurrentMap.Settings.AmbientColor;
            Renderer.Settings.DiffuseColor   = MainWindow.Instance.CurrentMap.Settings.DiffuseColor;
            Renderer.Settings.FogColor       = MainWindow.Instance.CurrentMap.Settings.FogColor;
            Renderer.Settings.SpecularColor  = MainWindow.Instance.CurrentMap.Settings.SpecularColor;
            Renderer.Settings.LightDirection = MainWindow.Instance.CurrentMap.Settings.LightDirection;
            if (FogEnabled)
            {
                Renderer.Settings.FogDistance = MainWindow.Instance.CurrentMap.Settings.FogDistance;
                Renderer.Settings.FogExponent = MainWindow.Instance.CurrentMap.Settings.FogExponent;
            }
            else
            {
                Renderer.Settings.FogDistance = 100000;
                Renderer.Settings.FogExponent = 100000;
            }

            Renderer.CalcShadowmapCamera(Renderer.Settings.LightDirection, 0);

            if (sceneQuadtree != null)
            {
                SceneRendererConnector.CullScene(sceneQuadtree);
            }

            SceneRendererConnector.UpdateAnimations(dtime);

            if (InputHandler != null)
            {
                InputHandler.ProcessMessage(MessageType.Update, new UpdateEventArgs {
                    Dtime = dtime
                });
            }

            Renderer.PreRender(dtime);

            Device9.Clear(ClearFlags.Target | ClearFlags.ZBuffer, new Color4(Renderer.Settings.FogColor), 1.0f, 0);
            Device9.BeginScene();

            if (Wireframe)
            {
                Device9.SetRenderState(RenderState.FillMode, FillMode.Wireframe);
            }
            else
            {
                Device9.SetRenderState(RenderState.FillMode, FillMode.Solid);
            }

            Renderer.Render(dtime);
            state.OnRender();

            bvRenderer.Begin(Scene.Camera);

            if (Program.Settings.DisplayGroundBoundings)
            {
                foreach (var v in MainWindow.Instance.CurrentMap.Ground.quadtree.All)
                {
                    var b = MainWindow.Instance.CurrentMap.Ground.quadtree.GetBounding(v);
                    bvRenderer.Draw(Matrix.Identity, b, Color.Yellow);
                }
            }

            if (MainWindow.Instance.placementBoundingsToolStripMenuItem.Checked)
            {
                foreach (var v in PlacementBoundings.All)
                {
                    var b = ((Client.Game.Map.GameEntity)v).EditorPlacementWorldBounding;
                    bvRenderer.Draw(Matrix.Identity, b, Color.Yellow);
                }
            }

            helperVisualizations.Settings.PhysicsBoundings           = MainWindow.Instance.physicsBoundingsToolStripMenuItem.Checked;
            helperVisualizations.Settings.PhysicsBoundingsFullChains = MainWindow.Instance.showFullChainsToolStripMenuItem.Checked;
            helperVisualizations.Settings.PhysicsBoundingsHideGround = MainWindow.Instance.physicsBoundingsHideGroundToolStripMenuItem.Checked;
            helperVisualizations.Settings.AggroRange      = MainWindow.Instance.aggroRangeToolStripMenuItem.Checked;
            helperVisualizations.Settings.VisualBoundings = MainWindow.Instance.visualBoundingsToolStripMenuItem.Checked;

            helperVisualizations.Render(bvRenderer,
                                        this,
                                        Scene,
                                        MainWindow.Instance.CurrentMap.NavMesh,
                                        Renderer.Frame);

            if (MainWindow.Instance.mapBoundsToolStripMenuItem.Checked)
            {
                float border = 20;
                bvRenderer.Draw(Matrix.Identity, new BoundingBox(
                                    new Vector3(border, border, 0),
                                    new Vector3(MainWindow.Instance.CurrentMap.Settings.Size.Width - border,
                                                MainWindow.Instance.CurrentMap.Settings.Size.Height - border, 0)
                                    ), Color.Black);
            }

            if (MainWindow.Instance.pickingBoundingsToolStripMenuItem.Checked)
            {
                foreach (var v in Scene.AllEntities)
                {
                    if (v is Client.Game.Map.GameEntity)
                    {
                        bvRenderer.Draw(Matrix.Identity,
                                        v.PickingWorldBounding,
                                        Color.Orange);
                    }
                }
            }

            bvRenderer.End();

            Device9.EndScene();
            Device9.Present();
        }
        public override void Init()
        {
            if (DesignMode)
            {
                return;
            }

            Content.ContentPath = "Data(.kel)";
            Client.Game.Map.GameEntity.ContentPool = Content;

            Scene.View   = this;
            Scene.Camera = new LookatSphericalCamera()
            {
                FOV  = 0.5f,
                ZFar = 50,
                SphericalCoordinates = Program.ClientDefaultSettings.CameraSphericalCoordinates,
                AspectRatio          = this.AspectRatio
            };
            Controller = new InteractiveSceneManager {
                Scene = Scene
            };
            StateManager = new DummyDevice9StateManager(Device9);
            InputHandler = inputHandlersRoot;

            cameraInputHandler = new CameraInputHandler
            {
                Camera = (LookatSphericalCamera)Scene.Camera,
                View   = this,
            };
            Scene.Camera.ZFar = 50;
            inputHandlersRoot.InputHandlers.Add(cameraInputHandler);
            cameraInputHandler.InputHandler = Controller;

            if (Program.Settings.UseDummyRenderer)
            {
                throw new NotSupportedException("Dummy renderer is no longer supported.");
                //Renderer = new Graphics.DummyRenderer.Renderer { Scene = Scene, StateManager = StateManager };
            }
            else
            {
                Renderer = new Graphics.Renderer.Renderer(Device9)
                {
                    Scene        = Scene,
                    StateManager = StateManager,
                    Settings     = new Graphics.Renderer.Settings
                    {
                        ShadowQuality   = Graphics.Renderer.Settings.ShadowQualities.Medium,
                        LightingQuality = Graphics.Renderer.Settings.LightingQualities.High
                    }
                };
                SceneRendererConnector = new SortedTestSceneRendererConnector
                {
                    Scene    = Scene,
                    Renderer = Renderer
                };
            }

            Renderer.Settings.TerrainQuality  = Graphics.Renderer.Settings.TerrainQualities.High;
            Renderer.Settings.LightingQuality = Graphics.Renderer.Settings.LightingQualities.High;
            Renderer.Settings.ShadowQuality   = Graphics.Renderer.Settings.ShadowQualities.Low;

            SceneRendererConnector.Initialize();
            Renderer.Initialize(Scene.View);

            if (Program.Settings.DeveloperSettings)
            {
                p1 = new System.Windows.Forms.PropertyGrid {
                    SelectedObject = Renderer.Settings, Dock = System.Windows.Forms.DockStyle.Fill
                };
                form1.Controls.Add(p1);
                form1.Show();
            }

            bvRenderer = new BoundingVolumesRenderer
            {
                StateManager = StateManager,
                View         = this
            };

            tooltip = new System.Windows.Forms.ToolTip();

            StartDefaultMode();
        }
Exemple #5
0
        void Setup()
        {
            Scene                = new Scene();
            GameState            = GameState.Playing;
            InterfaceIngameScene = new Scene();
            Scene.View           = InterfaceIngameScene.View = Program.Instance;
            Scene.Camera         = InterfaceIngameScene.Camera = new LookatSphericalCamera()
            {
                Lookat      = new Vector3(0, 0, 0),
                Position    = new Vector3(10, 10, 10),
                FOV         = Program.Settings.CameraFOV,
                ZFar        = 20,
                ZNear       = Program.Settings.CameraZNear,
                AspectRatio = Program.Instance.AspectRatio
            };
            CameraController = new CameraController {
                Camera = (LookatSphericalCamera)Scene.Camera
            };
            Scene.EntityAdded += scene_EntityAdded;

            Program.Instance.Interface.Layer1.AddChild(
                SceneControl = new GameSceneControl
            {
                InnerScene = Scene,
                Size       = Program.Instance.Interface.Size
            });

            InterfaceIngameRenderer = new Graphics.Interface.InterfaceRenderer9(Program.Instance.Device9)
            {
                Scene        = InterfaceIngameScene,
                StateManager = Program.Instance.StateManager,
            };
            InterfaceIngameRenderer.Initialize(Scene.View);

            if (Program.Settings.OutputPNGSequence)
            {
                Directory.CreateDirectory(OutputPNGSequencePath);
            }

            if (Program.Settings.UseDummyRenderer)
            {
                throw new NotSupportedException("Dummy renderer is no longer supported.");
            }
            else
            {
                Renderer = new Graphics.Renderer.Renderer(Program.Instance.Device9)
                {
                    Scene        = Scene,
                    StateManager = Program.Instance.StateManager,
                    Settings     = Program.Settings.RendererSettings,
                };
                SceneRendererConnector = new SortedTestSceneRendererConnector
                {
                    Scene    = Scene,
                    Renderer = Renderer
                };
            }

            Graphics.Renderer.Results result = Renderer.Initialize(Scene.View);
            SceneRendererConnector.Initialize();
            if (result == Graphics.Renderer.Results.OutOfVideoMemory)
            {
                System.Windows.Forms.MessageBox.Show(Locale.Resource.ErrorOutOfVideoMemory);
                Application.Log("User ran out of video memory according to renderer. This is probably due to having too high shadow quality.");
                System.Windows.Forms.Application.Exit();
            }

            RendererSettingsController = new RendererSettingsController();

            var s = Program.Settings.GraphicsDeviceSettings.Resolution;

            Program.Instance.Interface.Layer1.AddChild(Interface = new Interface.Interface
            {
                Size    = new Vector2(s.Width, s.Height),
                Visible = false
            });
        }