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 } }
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(); }