private static void RenderGame() { try { if (Target.ClientSize.Width == 0 || Target.ClientSize.Height == 0) { Thread.Sleep(1); return; } if (DXManager.DeviceLost) { DXManager.AttemptReset(); Thread.Sleep(1); return; } DXManager.Device.Clear(ClearFlags.Target, Color.Black, 1, 0); DXManager.Device.BeginScene(); DXManager.Sprite.Begin(SpriteFlags.AlphaBlend); DXControl.ActiveScene?.Draw(); DXManager.Sprite.End(); DXManager.Device.EndScene(); DXManager.Device.Present(); FPSCounter++; } catch (Direct3D9Exception) { DXManager.DeviceLost = true; } catch (Exception ex) { SaveError(ex.ToString()); DXManager.AttemptRecovery(); } }
private static void UpdateGame() { Now = Time.Now; DXControl.ActiveScene?.OnMouseMove(new MouseEventArgs(MouseButtons.None, 0, MouseLocation.X, MouseLocation.Y, 0)); if (Time.Now >= _FPSTime) { _FPSTime = Time.Now.AddSeconds(1); FPSCount = FPSCounter; FPSCounter = 0; DPSCount = DPSCounter; DPSCounter = 0; DXManager.MemoryClear(); } Connection?.Process(); // DXControl.ActiveScene?.Process(); DXControl.ActiveScene?.Process(); string debugText = $"FPS: {FPSCount}"; if (DXControl.MouseControl != null) { debugText += $", Mouse Control: {DXControl.MouseControl.GetType().Name}"; } if (DXControl.FocusControl != null) { debugText += $", Focus Control: {DXControl.FocusControl.GetType().Name}"; } if (GameScene.Game != null) { if (DXControl.MouseControl is MapControl) { debugText += $", Co Ords: {GameScene.Game.MapControl.MapLocation}"; } debugText += $", Objects: {GameScene.Game.MapControl.Objects.Count}"; if (MapObject.MouseObject != null) { debugText += $", Mouse Object: {MapObject.MouseObject.Name}"; } } debugText += $", DPS: {DPSCount}"; DXControl.DebugLabel.Text = debugText; if (Connection != null) { const decimal KB = 1024; const decimal MB = KB * 1024; string sent, received; if (Connection.TotalBytesSent > MB) { sent = $"{Connection.TotalBytesSent/MB:#,##0.0}MB"; } else if (Connection.TotalBytesSent > KB) { sent = $"{Connection.TotalBytesSent/KB:#,##0}KB"; } else { sent = $"{Connection.TotalBytesSent:#,##0}B"; } if (Connection.TotalBytesReceived > MB) { received = $"{Connection.TotalBytesReceived/MB:#,##0.0}MB"; } else if (Connection.TotalBytesReceived > KB) { received = $"{Connection.TotalBytesReceived/KB:#,##0}KB"; } else { received = $"{Connection.TotalBytesReceived:#,##0}B"; } DXControl.PingLabel.Text = $"Ping: {Connection.Ping}, Sent: {sent}, Received: {received}"; DXControl.PingLabel.Location = new Point(DXControl.DebugLabel.DisplayArea.Right + 5, DXControl.DebugLabel.DisplayArea.Y); } else { DXControl.PingLabel.Text = String.Empty; } if (DXControl.MouseControl != null && DXControl.ActiveScene != null) { DXControl.HintLabel.Text = DXControl.MouseControl.Hint; Point location = new Point(MouseLocation.X, MouseLocation.Y + 17); if (location.X + DXControl.HintLabel.Size.Width > DXControl.ActiveScene.Size.Width) { location.X = DXControl.ActiveScene.Size.Width - DXControl.HintLabel.Size.Width - 1; } if (location.Y + DXControl.HintLabel.Size.Height > DXControl.ActiveScene.Size.Height) { location.Y = DXControl.ActiveScene.Size.Height - DXControl.HintLabel.Size.Height - 1; } if (location.X < 0) { location.X = 0; } if (location.Y < 0) { location.Y = 0; } DXControl.HintLabel.Location = location; } else { DXControl.HintLabel.Text = null; } }
public void DrawBlend(int index, float size, Color4 colour, float x, float y, float angle, float opacity, ImageType type, bool useOffSet = false, byte shadow = 0) { if (!CheckImage(index)) { return; } MirImage image = Images[index]; Texture texture; switch (type) { case ImageType.Image: if (!image.ImageValid) { image.CreateImage(_BReader); } texture = image.Image; if (useOffSet) { x += image.OffSetX; y += image.OffSetY; } break; case ImageType.Shadow: return; /* if (!image.ShadowValid) image.CreateShadow(_BReader); * texture = image.Shadow; * * if (useOffSet) * { * x += image.ShadowOffSetX; * y += image.ShadowOffSetY; * } * break;*/ case ImageType.Overlay: if (!image.OverlayValid) { image.CreateOverlay(_BReader); } texture = image.Overlay; if (useOffSet) { x += image.OffSetX; y += image.OffSetY; } break; default: return; } if (texture == null) { return; } bool oldBlend = DXManager.Blending; float oldRate = DXManager.BlendRate; DXManager.SetBlend(true, opacity); var scaling = Matrix.Scaling(size, size, 0f); var rotationZ = Matrix.RotationZ(angle); var translation = Matrix.Translation(x + (image.Width / 2), y + (image.Height / 2), 0); DXManager.Sprite.Transform = scaling * rotationZ * translation; DXManager.Sprite.Draw(texture, Vector3.Zero, new Vector3((image.Width / 2) * -1, (image.Height / 2) * -1, 0), colour); DXManager.Sprite.Transform = Matrix.Identity; CEnvir.DPSCounter++; DXManager.SetBlend(oldBlend, oldRate); image.ExpireTime = Time.Now + Config.CacheDuration; }
public void DrawBlend(int index, float x, float y, Color4 colour, bool useOffSet, float rate, ImageType type, byte shadow = 0) { if (!CheckImage(index)) { return; } MirImage image = Images[index]; Texture texture; switch (type) { case ImageType.Image: if (!image.ImageValid) { image.CreateImage(_BReader); } texture = image.Image; if (useOffSet) { x += image.OffSetX; y += image.OffSetY; } break; case ImageType.Shadow: return; /* if (!image.ShadowValid) image.CreateShadow(_BReader); * texture = image.Shadow; * * if (useOffSet) * { * x += image.ShadowOffSetX; * y += image.ShadowOffSetY; * } * break;*/ case ImageType.Overlay: if (!image.OverlayValid) { image.CreateOverlay(_BReader); } texture = image.Overlay; if (useOffSet) { x += image.OffSetX; y += image.OffSetY; } break; default: return; } if (texture == null) { return; } bool oldBlend = DXManager.Blending; float oldRate = DXManager.BlendRate; DXManager.SetBlend(true, rate); DXManager.Sprite.Draw(texture, Vector3.Zero, new Vector3(x, y, 0), colour); CEnvir.DPSCounter++; DXManager.SetBlend(oldBlend, oldRate); image.ExpireTime = Time.Now + Config.CacheDuration; }
public void Draw(int index, float x, float y, Color4 colour, bool useOffSet, float opacity, ImageType type) { if (!CheckImage(index)) { return; } MirImage image = Images[index]; Texture texture; float oldOpacity = DXManager.Opacity; switch (type) { case ImageType.Image: if (!image.ImageValid) { image.CreateImage(_BReader); } texture = image.Image; if (useOffSet) { x += image.OffSetX; y += image.OffSetY; } break; case ImageType.Shadow: if (!image.ShadowValid) { image.CreateShadow(_BReader); } texture = image.Shadow; if (useOffSet) { x += image.ShadowOffSetX; y += image.ShadowOffSetY; } if (texture == null) { if (!image.ImageValid) { image.CreateImage(_BReader); } texture = image.Image; switch (image.ShadowType) { case 177: case 176: case 49: Matrix m = Matrix.Scaling(1F, 0.5f, 0); m.M21 = -0.50F; DXManager.Sprite.Transform = m * Matrix.Translation(x + image.Height / 2, y, 0); DXManager.Device.SetSamplerState(0, SamplerState.MinFilter, TextureFilter.None); if (oldOpacity != 0.5F) { DXManager.SetOpacity(0.5F); } DXManager.Sprite.Draw(texture, Vector3.Zero, Vector3.Zero, Color.Black); CEnvir.DPSCounter++; DXManager.SetOpacity(oldOpacity); DXManager.Sprite.Transform = Matrix.Identity; DXManager.Device.SetSamplerState(0, SamplerState.MinFilter, TextureFilter.Point); image.ExpireTime = Time.Now + Config.CacheDuration; break; case 50: if (oldOpacity != 0.5F) { DXManager.SetOpacity(0.5F); } DXManager.Sprite.Draw(texture, Vector3.Zero, new Vector3(x, y, 0), Color.Black); CEnvir.DPSCounter++; DXManager.SetOpacity(oldOpacity); image.ExpireTime = Time.Now + Config.CacheDuration; break; } return; } break; case ImageType.Overlay: if (!image.OverlayValid) { image.CreateOverlay(_BReader); } texture = image.Overlay; if (useOffSet) { x += image.OffSetX; y += image.OffSetY; } break; default: return; } if (texture == null) { return; } DXManager.SetOpacity(opacity); DXManager.Sprite.Draw(texture, Vector3.Zero, new Vector3(x, y, 0), colour); CEnvir.DPSCounter++; DXManager.SetOpacity(oldOpacity); image.ExpireTime = Time.Now + Config.CacheDuration; }