Пример #1
0
        protected virtual void Update(int delta)
        {
            // every system update
            Input.Input.Instance.Update(delta);
            Util.Tween.Tweener.Instance.Update(delta);
            OnBeforeUpdate();
            Scene?.BeforeUpdate();
            OnUpdate(delta);
            Scene?.Update(delta);

            if (Physics.IsRunning)
            {
                Physics.Instance.PrepareUpdate(delta);

                if (Scene != null)
                {
                    for (int i = 0; i < Physics.Instance.Timesteps; i++)
                    {
                        Scene.BeforePhysicsStep();
                        Scene.PhysicsStep(delta);
                        Physics.Instance.Update();
                        Scene.LatePhysicsStep();
                    }
                }
                else
                {
                    for (int i = 0; i < Physics.Instance.Timesteps; i++)
                    {
                        Physics.Instance.Update();
                    }
                }

                Physics.Instance.CompleteUpdate();
            }

            Coroutines.Instance.Update(delta);
            OnLateUpdate();
            Scene?.LateUpdate();

#if DEBUG
            Debug.Instance.Update(delta);
#endif

            // fps
            if (Time.Subtract(_lastFpsTime).Seconds >= 1)
            {
                _lastFpsTime = Time;
                _fps         = _fpsCount;
                _fpsCount    = 0;
#if DEBUG
                FramerateValues.RemoveAt(0);
                FramerateValues.Add(_fps);
                Title = Title; // force update window title info
#endif
            }
        }
Пример #2
0
        private void InternalLoadContent()
        {
            // default content
            StdFont     = new Font(Resource._04b03, 0, 16f);
            BasicShader = new BasicShader(Resource.BasicShader)
            {
                DepthWriteEnabled = true
            };

            ScreenRenderer = new Renderer();
            DebugRenderer  = new Renderer(true)
            {
                SpriteBatchMode           = BatchMode.DepthBuffer,
                DepthStencilState         = DepthStencilState.Default,
                RecalculateProjectionSize = () => Math.Round(Size * KeepProportionsScale * PixelScale)
            };

            MainRenderer = new Renderer(autoHandleAlphaBlendedSprites: true)
            {
                SpriteBatchMode           = BatchMode.DepthBuffer,
                DepthStencilState         = DepthStencilState.Default,
                RecalculateProjectionSize = () => Size
            };

            InterfaceRenderer = new Renderer(autoHandleAlphaBlendedSprites: true)
            {
                SpriteBatchMode           = BatchMode.DepthBuffer,
                DepthStencilState         = DepthStencilState.Default,
                RecalculateProjectionSize = () => Size
            };

            GraphicsDevice.PresentationParameters.RenderTargetUsage = RenderTargetUsage.PreserveContents;

            MainCanvas = new Canvas(
                Width,
                Height,
                mipMap: false,
                surfaceFormat: SurfaceFormat.Color,
                depthFormat: DepthFormat.Depth24Stencil8,
                multiSampleCount: 0,
                usage: RenderTargetUsage.PreserveContents
                )
            {
                //InternalRenderer = MainRenderer
                InternalRenderer = null
            };

            AddRenderer(MainRenderer);
            AddRenderer(InterfaceRenderer);

#if DEBUG
            DebugCanvas = new Canvas(
                (int)Math.Floor(Width * KeepProportionsScale * PixelScale),
                (int)Math.Floor(Height * KeepProportionsScale * PixelScale),
                mipMap: false,
                surfaceFormat: SurfaceFormat.Color,
                depthFormat: DepthFormat.Depth24Stencil8,
                multiSampleCount: 0,
                usage: RenderTargetUsage.PreserveContents
                )
            {
                InternalRenderer = DebugRenderer
            };

            float monitorFrameWidth = ((FramerateMonitorValuesCount - 1) * FramerateMonitorDataSpacing) + 1;
            _framerateMonitorSize = new Size(monitorFrameWidth, 82);

            for (int i = 0; i < FramerateMonitorValuesCount; i++)
            {
                FramerateValues.Add(0);
            }
#endif

            MainRenderer.RecalculateProjection();
            InterfaceRenderer.RecalculateProjection();
            DebugRenderer.RecalculateProjection();
            ScreenRenderer.RecalculateProjection();

            Initialize();
        }