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(); }
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)); }
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(); }
public DBConnection(StringLinker sl) { this.sl = sl; }
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; }
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); } } }
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; } }
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); } } }