Пример #1
0
        protected override void Initialize()
        {
            //init services
            this.Services.AddService <Random>(new Random());
            this.Services.AddService <IRandom>(new ParticleRandom(this.Services.GetService <Random>()));
            this.Services.AddService <IMEHandler>(this.imeHelper);

            ServiceManager.Instance.AddService <IMEHandler>(this.imeHelper);

            //init components
            this.renderEnv = new RenderEnv(this, this.graphics);
            this.batcher   = new MeshBatcher(this.GraphicsDevice)
            {
                CullingEnabled = true
            };
            this.resLoader = new ResourceLoader(this.Services);
            this.ui        = new MapRenderUIRoot();
            this.BindingUIInput();
            this.tooltip = new Tooltip2(this.Content);
            this.tooltip.StringLinker = this.StringLinker;
            this.cm = new CoroutineManager(this);
            this.cm.StartCoroutine(OnStart()); //entry
            this.Components.Add(cm);
            this.fpsCounter = new FpsCounter(this)
            {
                UseStopwatch = true
            };
            this.Components.Add(fpsCounter);

            this.ApplySetting();
            SwitchResolution(Resolution.Window_800_600);
            base.Initialize();
        }
Пример #2
0
        void btnItem_Click(object sender, EventArgs e)
        {
            btnItemMapRender.Enabled = false;
            Wz_Node node = Context.SelectedNode1;

            if (node != null)
            {
                Wz_Image img    = node.Value as Wz_Image;
                Wz_File  wzFile = node.GetNodeWzFile();

                if (img != null && img.TryExtract())
                {
                    if (wzFile == null || wzFile.Type != Wz_Type.Map)
                    {
                        if (MessageBoxEx.Show("所选Img不属于Map.wz,是否继续?", "提示", MessageBoxButtons.OKCancel) != DialogResult.OK)
                        {
                            goto exit;
                        }
                    }

                    StringLinker sl = this.Context.DefaultStringLinker;
                    if (!sl.HasValues) //生成默认stringLinker
                    {
                        sl = new StringLinker();
                        sl.Load(PluginManager.FindWz(Wz_Type.String).GetValueEx <Wz_File>(null));
                    }

                    //开始绘制
                    Thread thread = new Thread(() =>
                    {
#if !DEBUG
                        try
                        {
#endif
                        FrmMapRender frm = new MapRender.FrmMapRender(img);
                        frm.StringLinker = sl;
                        frm.Run();

#if !DEBUG
                    }
                                               catch (Exception ex)
                    {
                        MessageBoxEx.Show(ex.ToString(), "MapRender");
                    }
#endif
                    });
                    thread.SetApartmentState(ApartmentState.STA);
                    thread.Start();
                    goto exit;
                }
            }

            MessageBoxEx.Show("没有选择一个map的img", "MapRender");

exit:
            btnItemMapRender.Enabled = true;
        }
        ///<inheritdoc/>
        public override void LoadMap(string imgText)
        {
            _currentMapImage = WzTreeSearcher.SearchForMap(_wzStructure.WzNode, imgText);
            Exception ex;

            _currentMapImage.TryExtract(out ex);
            if (ex != null)
            {
                throw ex;
            }
            _stringLinker = new StringLinker();
            _stringLinker.Load(PluginManager.FindWz(Wz_Type.String).GetValueEx <Wz_File>(null));
        }
Пример #4
0
        protected override void Initialize()
        {
            this.renderEnv = new RenderEnv(this, this.graphics);
            this.batcher   = new MeshBatcher(this.GraphicsDevice);
            this.resLoader = new ResourceLoader(this.Services);
            this.ui        = new MapRenderUIRoot();
            this.BindingUIInput();
            this.tooltip = new Tooltip2(this.GraphicsDevice);
            this.tooltip.StringLinker = this.StringLinker;
            this.cm = new CoroutineManager(this);
            this.cm.StartCoroutine(OnStart()); //entry
            this.Components.Add(cm);
            this.fpsCounter = new FpsCounter(this)
            {
                UseStopwatch = true
            };
            this.Components.Add(fpsCounter);

            this.ApplySetting();
            SwitchResolution(Resolution.Window_800_600);
            base.Initialize();
        }
Пример #5
0
 public DBConnection(StringLinker sl)
 {
     this.sl = sl;
 }
Пример #6
0
        void btnItem_Click(object sender, EventArgs e)
        {
            Wz_Node node = Context.SelectedNode1;

            if (node != null)
            {
                Wz_Image img    = node.Value as Wz_Image;
                Wz_File  wzFile = node.GetNodeWzFile();

                if (img != null && img.TryExtract())
                {
                    if (wzFile == null || wzFile.Type != Wz_Type.Map)
                    {
                        if (MessageBoxEx.Show("The selected Img does not belong to Map.wz. Continue?", "Message", MessageBoxButtons.OKCancel) != DialogResult.OK)
                        {
                            goto exit;
                        }
                    }

                    StringLinker sl = this.Context.DefaultStringLinker;
                    if (!sl.HasValues) //生成默认stringLinker
                    {
                        sl = new StringLinker();
                        sl.Load(PluginManager.FindWz(Wz_Type.String).GetValueEx <Wz_File>(null));
                    }

                    //开始绘制
                    Thread thread = new Thread(() =>
                    {
#if !DEBUG
                        try
                        {
#endif
#if MapRenderV1
                        if (sender == btnItemMapRender)
                        {
                            if (this.mapRenderGame1 != null)
                            {
                                return;
                            }
                            this.mapRenderGame1 = new FrmMapRender(img)
                            {
                                StringLinker = sl
                            };
                            try
                            {
                                using (this.mapRenderGame1)
                                {
                                    this.mapRenderGame1.Run();
                                }
                            }
                            finally
                            {
                                this.mapRenderGame1 = null;
                            }
                        }
                        else
#endif
                        {
                            if (this.mapRenderGame2 != null)
                            {
                                return;
                            }
                            this.mapRenderGame2 = new FrmMapRender2(img)
                            {
                                StringLinker = sl
                            };
                            this.mapRenderGame2.Window.Title = "MapRender " + this.Version;
                            try
                            {
                                using (this.mapRenderGame2)
                                {
                                    this.mapRenderGame2.Run();
                                }
                            }
                            finally
                            {
                                this.mapRenderGame2 = null;
                            }
                        }
#if !DEBUG
                    }
                                               catch (Exception ex)
                    {
                        PluginManager.LogError("MapRender", ex, "MapRender error:");
                        MessageBoxEx.Show(ex.ToString(), "MapRender");
                    }
#endif
                    });
                    thread.SetApartmentState(ApartmentState.STA);
                    thread.IsBackground = true;
                    thread.Start();
                    goto exit;
                }
            }

            MessageBoxEx.Show("Please select a Map Img.", "Message");

exit:
            return;
        }
Пример #7
0
        public void DrawTooltip(GameTime gameTime, RenderEnv env, StringLinker stringLinker)
        {
            if (tooltipTarget == null)
            {
                return;
            }

            StringResult     sr;
            List <TextBlock> blocks = new List <TextBlock>();
            Vector2          size   = Vector2.Zero;

            switch (tooltipTarget.ObjectType)
            {
            case RenderObjectType.Mob:
            {
                LifePatch p = tooltipTarget as LifePatch;
                stringLinker.StringMob.TryGetValue(p.LifeID, out sr);
                Vector2 current = Vector2.Zero;

                PrepareTextBlock(blocks, env.Fonts.TooltipTitleFont, sr == null ? "(null)" : sr.Name, ref current, Color.White);
                current += new Vector2(4, 4);
                PrepareTextBlock(blocks, env.Fonts.TooltipContentFont, "id:" + p.LifeID.ToString("d7"), ref current, Color.White);
                size.X  = Math.Max(size.X, current.X);
                current = new Vector2(0, current.Y + 16);

                LifeInfo info = p.LifeInfo;

                PrepareTextLine(blocks, env.Fonts.TooltipContentFont, "Level: " + info.level + (info.boss ? " (Boss)" : null), ref current, Color.White, ref size.X);
                PrepareTextLine(blocks, env.Fonts.TooltipContentFont, "HP/MP: " + info.maxHP + " / " + info.maxMP, ref current, Color.White, ref size.X);
                PrepareTextLine(blocks, env.Fonts.TooltipContentFont, "PAD/MAD: " + info.PADamage + " / " + info.MADamage, ref current, Color.White, ref size.X);
                PrepareTextLine(blocks, env.Fonts.TooltipContentFont, "PDr/MDr: " + info.PDRate + "% / " + info.MDRate + "%", ref current, Color.White, ref size.X);
                PrepareTextLine(blocks, env.Fonts.TooltipContentFont, "Acc/Eva: " + info.acc + " / " + info.eva, ref current, Color.White, ref size.X);
                PrepareTextLine(blocks, env.Fonts.TooltipContentFont, "KB: " + info.pushed, ref current, Color.White, ref size.X);
                PrepareTextLine(blocks, env.Fonts.TooltipContentFont, "Exp: " + info.exp, ref current, Color.White, ref size.X);
                if (info.undead)
                {
                    PrepareTextLine(blocks, env.Fonts.TooltipContentFont, "undead: 1", ref current, Color.White, ref size.X);
                }
                StringBuilder sb;
                if ((sb = GetLifeElemAttrString(ref info.elemAttr)).Length > 0)
                {
                    PrepareTextLine(blocks, env.Fonts.TooltipContentFont, "elem: " + sb.ToString(), ref current, Color.White, ref size.X);
                }
                size.Y = current.Y;
            }
            break;

            case RenderObjectType.Npc:
            {
                LifePatch p = tooltipTarget as LifePatch;
                stringLinker.StringNpc.TryGetValue(p.LifeID, out sr);
                Vector2 current = Vector2.Zero;

                PrepareTextBlock(blocks, env.Fonts.TooltipTitleFont, sr == null ? "(null)" : sr.Name, ref current, Color.White);
                current += new Vector2(4, 4);
                PrepareTextBlock(blocks, env.Fonts.TooltipContentFont, "id:" + p.LifeID.ToString("d7"), ref current, Color.White);
                size.X  = Math.Max(size.X, current.X);
                current = new Vector2(0, current.Y + 16);

                foreach (var kv in p.Actions)
                {
                    if (kv.Value == p.Frames)
                    {
                        PrepareTextLine(blocks, env.Fonts.TooltipContentFont, "action: " + kv.Key, ref current, Color.White, ref size.X);
                    }
                }
                size.Y = current.Y;
            }
            break;

            case RenderObjectType.Portal:
            {
                PortalPatch p       = tooltipTarget as PortalPatch;
                Vector2     current = Vector2.Zero;
                PrepareTextLine(blocks, env.Fonts.TooltipContentFont, "pName: " + p.PortalName, ref current, Color.White, ref size.X);
                string pTypeName = GetPortalTypeString(p.PortalType);
                PrepareTextLine(blocks, env.Fonts.TooltipContentFont, "pType: " + p.PortalType + (pTypeName == null ? null : (" (" + pTypeName + ")")), ref current, Color.White, ref size.X);
                stringLinker.StringMap.TryGetValue(p.ToMap, out sr);
                PrepareTextLine(blocks, env.Fonts.TooltipContentFont, "toMap: " + (sr == null ? "(null)" : sr.Name) + "(" + p.ToMap + ")", ref current, Color.White, ref size.X);
                PrepareTextLine(blocks, env.Fonts.TooltipContentFont, "toName: " + p.ToName, ref current, Color.White, ref size.X);
                if (!string.IsNullOrEmpty(p.Script))
                {
                    PrepareTextLine(blocks, env.Fonts.TooltipContentFont, "script: " + p.Script, ref current, Color.White, ref size.X);
                }
                size.Y = current.Y;
            }
            break;
            }

            if (blocks.Count > 0)
            {
                size += new Vector2(26, 26);
                Vector2 origin = new Vector2(env.Input.MousePosition.X, env.Input.MousePosition.Y);
                origin.X = MathHelper.Clamp(origin.X, 0, Math.Max(0, env.Camera.Width - size.X));
                origin.Y = MathHelper.Clamp(origin.Y, 0, Math.Max(0, env.Camera.Height - size.Y));
                this.DrawFrame(env, origin, size);

                origin += new Vector2(13, 13);
                foreach (TextBlock block in blocks)
                {
                    env.Sprite.DrawStringEx(block.Font, block.Text, block.Position, block.ForeColor, -origin);
                }
            }
        }
Пример #8
0
        public void DrawNameTooltip(GameTime gameTime, RenderEnv env, RenderPatch patch, StringLinker stringLinker)
        {
            StringResult sr;

            switch (patch.ObjectType)
            {
            case RenderObjectType.Mob:
            {
                LifePatch p    = patch as LifePatch;
                string    name = "lv." + p.LifeInfo.level + " ";
                if (stringLinker != null && stringLinker.StringMob.TryGetValue(p.LifeID, out sr))
                {
                    name += sr.Name;
                }
                else
                {
                    name += p.LifeID.ToString();
                }
                DrawNameTooltip(env, name, env.Fonts.MobNameFont, p.Position, Color.White);
            }
            break;

            case RenderObjectType.Npc:
            {
                LifePatch p = patch as LifePatch;
                string    name;
                if (stringLinker != null && stringLinker.StringNpc.TryGetValue(p.LifeID, out sr))
                {
                    name = sr.Name;
                }
                else
                {
                    name = p.LifeID.ToString();
                }
                DrawNameTooltip(env, name, env.Fonts.NpcNameFont, p.Position, Color.Yellow);
            }
            break;
            }
        }
Пример #9
0
        public void DrawTooltip(GameTime gameTime, RenderEnv env, StringLinker stringLinker)
        {
            if (tooltipTarget == null)
            {
                return;
            }

            StringResult     sr;
            List <TextBlock> blocks = new List <TextBlock>();
            Vector2          size   = Vector2.Zero;

            switch (tooltipTarget.ObjectType)
            {
            case RenderObjectType.Mob:
            {
                LifePatch p = tooltipTarget as LifePatch;
                stringLinker.StringMob.TryGetValue(p.LifeID, out sr);
                Vector2 current = Vector2.Zero;

                blocks.Add(PrepareTextBlock(env.Fonts.TooltipTitleFont, sr == null ? "(null)" : sr.Name, ref current, Color.White));
                current += new Vector2(4, 4);
                blocks.Add(PrepareTextBlock(env.Fonts.TooltipContentFont, "id:" + p.LifeID.ToString("d7"), ref current, Color.White));
                size.X  = Math.Max(size.X, current.X);
                current = new Vector2(0, current.Y + 16);

                LifeInfo info = p.LifeInfo;
                Vector2  size2;
                var      blocks2 = TooltipHelper.Prepare(info, env.Fonts, out size2);
                for (int i = 0; i < blocks2.Length; i++)
                {
                    blocks2[i].Position.Y += current.Y;
                    blocks.Add(blocks2[i]);
                }
                size.X = Math.Max(size.X, size2.X);
                size.Y = current.Y + size2.Y;
            }
            break;

            case RenderObjectType.Npc:
            {
                LifePatch p = tooltipTarget as LifePatch;
                stringLinker.StringNpc.TryGetValue(p.LifeID, out sr);
                Vector2 current = Vector2.Zero;

                blocks.Add(PrepareTextBlock(env.Fonts.TooltipTitleFont, sr == null ? "(null)" : sr.Name, ref current, Color.White));
                current += new Vector2(4, 4);
                blocks.Add(PrepareTextBlock(env.Fonts.TooltipContentFont, "id:" + p.LifeID.ToString("d7"), ref current, Color.White));
                size.X  = Math.Max(size.X, current.X);
                current = new Vector2(0, current.Y + 16);

                foreach (var kv in p.Actions)
                {
                    if (kv.Value == p.Frames)
                    {
                        blocks.Add(PrepareTextLine(env.Fonts.TooltipContentFont, "action: " + kv.Key, ref current, Color.White, ref size.X));
                    }
                }
                size.Y = current.Y;
            }
            break;

            case RenderObjectType.Portal:
            {
                PortalPatch p       = tooltipTarget as PortalPatch;
                Vector2     current = Vector2.Zero;
                blocks.Add(PrepareTextLine(env.Fonts.TooltipContentFont, "pName: " + p.PortalName, ref current, Color.White, ref size.X));
                string pTypeName = GetPortalTypeString(p.PortalType);
                blocks.Add(PrepareTextLine(env.Fonts.TooltipContentFont, "pType: " + p.PortalType + (pTypeName == null ? null : (" (" + pTypeName + ")")), ref current, Color.White, ref size.X));
                stringLinker.StringMap.TryGetValue(p.ToMap, out sr);
                blocks.Add(PrepareTextLine(env.Fonts.TooltipContentFont, "toMap: " + (sr == null ? "(null)" : sr.Name) + "(" + p.ToMap + ")", ref current, Color.White, ref size.X));
                blocks.Add(PrepareTextLine(env.Fonts.TooltipContentFont, "toName: " + p.ToName, ref current, Color.White, ref size.X));
                if (!string.IsNullOrEmpty(p.Script))
                {
                    blocks.Add(PrepareTextLine(env.Fonts.TooltipContentFont, "script: " + p.Script, ref current, Color.White, ref size.X));
                }
                size.Y = current.Y;
            }
            break;
            }

            if (blocks.Count > 0)
            {
                size += new Vector2(26, 26);
                Vector2 origin = new Vector2(env.Input.MousePosition.X, env.Input.MousePosition.Y);
                origin.X = MathHelper.Clamp(origin.X, 0, Math.Max(0, env.Camera.Width - size.X));
                origin.Y = MathHelper.Clamp(origin.Y, 0, Math.Max(0, env.Camera.Height - size.Y));
                this.DrawFrame(env, origin, size);

                origin += new Vector2(13, 13);
                foreach (TextBlock block in blocks)
                {
                    env.Sprite.DrawStringEx(block.Font, block.Text, block.Position, block.ForeColor, -origin);
                }
            }
        }