Example #1
0
        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();
            }
        }
Example #2
0
        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;
            }
        }
Example #3
0
        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;
        }
Example #4
0
        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;
        }
Example #5
0
        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;
        }