private Bitmap RenderSkill(out int picH) { //int h = 128; Bitmap bitmap = new Bitmap(290, DefaultPicHeight); Graphics g = Graphics.FromImage(bitmap); picH = 33; //iconY StringResult sr; if (!StringLinker.StringSkill.TryGetValue(skill.SkillID, out sr)) { sr = new StringResultSkill(); sr.Name = "(null)"; } StringFormat format = new StringFormat(); format.Alignment = StringAlignment.Center; g.DrawString(sr.Name, GearGraphics.ItemNameFont, Brushes.White, 143, 10, format);//绘制标题 if (skill.Icon.Bitmap != null) { g.DrawImage(GearGraphics.EnlargeBitmap(skill.Icon.Bitmap), 14 + (1 - skill.Icon.Origin.X) * 2, picH + (33 - skill.Icon.Bitmap.Height) * 2);//绘制图标 } //绘制desc picH = 35; GearGraphics.DrawString(g, "[Master Level: " + skill.MaxLevel + "]", GearGraphics.ItemDetailFont, 90, 270, ref picH, 16); if (sr.Desc != null) { GearGraphics.DrawString(g, sr.Desc, GearGraphics.ItemDetailFont, 90, 270, ref picH, 16); } picH = Math.Max(picH, 114); g.DrawLine(Pens.White, 6, picH, 283, picH); //分割线 picH += 5; if (skill.Level > 0) { string hStr = null; if (skill.PreBBSkill) { if (sr.SkillH.Count >= skill.Level) { hStr = sr.SkillH[skill.Level - 1]; } } else { if (sr.SkillH.Count > 0) { hStr = SummaryParser.GetSkillSummary(skill, skill.Level, sr, SummaryParams.Default); } } picH += 4; GearGraphics.DrawString(g, "[Current Level " + skill.Level + "]", GearGraphics.ItemDetailFont, 8, 272, ref picH, 16); GearGraphics.DrawString(g, hStr, GearGraphics.ItemDetailFont, 8, 272, ref picH, 16); } if (skill.Level < skill.MaxLevel) { string hStr = null; if (skill.PreBBSkill) { if (sr.SkillH.Count >= skill.Level + 1) { hStr = sr.SkillH[skill.Level]; } } else { if (sr.SkillH.Count > 0) { hStr = SummaryParser.GetSkillSummary(skill, skill.Level + 1, sr, SummaryParams.Default); } } picH += 4; GearGraphics.DrawString(g, "[Next Level " + (skill.Level + 1) + "]", GearGraphics.ItemDetailFont, 8, 272, ref picH, 16); GearGraphics.DrawString(g, hStr, GearGraphics.ItemDetailFont, 8, 272, ref picH, 16); } picH += 9; g.Dispose(); return(bitmap); }
private Bitmap RenderSkill(CanvasRegion region, out int picH) { Bitmap bitmap = new Bitmap(region.Width, DefaultPicHeight); Graphics g = Graphics.FromImage(bitmap); StringFormat format = (StringFormat)StringFormat.GenericDefault.Clone(); picH = 0; //获取文字 StringResult sr; if (StringLinker == null || !StringLinker.StringSkill.TryGetValue(Skill.SkillID, out sr)) { sr = new StringResultSkill(); sr.Name = "(null)"; } //绘制技能名称 format.Alignment = StringAlignment.Center; g.DrawString(sr.Name, GearGraphics.ItemNameFont2, Brushes.White, region.TitleCenterX, 10, format); //绘制图标 picH = 33; g.FillRectangle(GearGraphics.GearIconBackBrush2, 14, picH, 68, 68); if (Skill.Icon.Bitmap != null) { g.DrawImage(GearGraphics.EnlargeBitmap(Skill.Icon.Bitmap), 14 + (1 - Skill.Icon.Origin.X) * 2, picH + (33 - Skill.Icon.Bitmap.Height) * 2); } //绘制desc picH = 35; if (!Skill.PreBBSkill) { GearGraphics.DrawString(g, "[Max Level:" + Skill.MaxLevel + "]", GearGraphics.ItemDetailFont2, region.SkillDescLeft, region.TextRight, ref picH, 16); } if (sr.Desc != null) { string hdesc = SummaryParser.GetSkillSummary(sr.Desc, Skill.Level, Skill.Common, SummaryParams.Default); //string hStr = SummaryParser.GetSkillSummary(skill, skill.Level, sr, SummaryParams.Default); GearGraphics.DrawString(g, hdesc, GearGraphics.ItemDetailFont2, region.SkillDescLeft, region.TextRight, ref picH, 16); } if (Skill.ReqLevel > 0) { GearGraphics.DrawString(g, "#c[Requires: " + Skill.ReqLevel.ToString() + "]#", GearGraphics.ItemDetailFont2, region.SkillDescLeft, region.TextRight, ref picH, 16); } if (Skill.ReqAmount > 0) { GearGraphics.DrawString(g, "#c" + ItemStringHelper.GetSkillReqAmount(Skill.SkillID, Skill.ReqAmount) + "#", GearGraphics.ItemDetailFont2, region.SkillDescLeft, region.TextRight, ref picH, 16); } //分割线 picH = Math.Max(picH, 114); g.DrawLine(Pens.White, region.SplitterX1, picH, region.SplitterX2, picH); picH += 9; if (Skill.Level > 0) { string hStr = SummaryParser.GetSkillSummary(Skill, Skill.Level, sr, SummaryParams.Default, new SkillSummaryOptions { ConvertCooltimeMS = this.DisplayCooltimeMSAsSec, ConvertPerM = this.DisplayPermyriadAsPercent }); GearGraphics.DrawString(g, "[Level " + Skill.Level + "]", GearGraphics.ItemDetailFont, region.LevelDescLeft, region.TextRight, ref picH, 16); if (hStr != null) { GearGraphics.DrawString(g, hStr, GearGraphics.ItemDetailFont2, region.LevelDescLeft, region.TextRight, ref picH, 16); } } if (Skill.Level < Skill.MaxLevel) { string hStr = SummaryParser.GetSkillSummary(Skill, Skill.Level + 1, sr, SummaryParams.Default, new SkillSummaryOptions { ConvertCooltimeMS = this.DisplayCooltimeMSAsSec, ConvertPerM = this.DisplayPermyriadAsPercent }); GearGraphics.DrawString(g, "[Next Level " + (Skill.Level + 1) + "]", GearGraphics.ItemDetailFont, region.LevelDescLeft, region.TextRight, ref picH, 16); if (hStr != null) { GearGraphics.DrawString(g, hStr, GearGraphics.ItemDetailFont2, region.LevelDescLeft, region.TextRight, ref picH, 16); } } picH += 9; List <string> skillDescEx = new List <string>(); if (ShowProperties) { List <string> attr = new List <string>(); if (Skill.Invisible) { attr.Add("Invisible"); } if (Skill.Hyper != HyperSkillType.None) { attr.Add("Hyper: " + Skill.Hyper); } if (Skill.CombatOrders) { attr.Add("Combat Orders"); } if (Skill.NotRemoved) { attr.Add("Not Removed"); } if (Skill.MasterLevel > 0 && Skill.MasterLevel < Skill.MaxLevel) { attr.Add("Inital Mastery LVL: " + Skill.MasterLevel); } if (attr.Count > 0) { skillDescEx.Add("#c" + string.Join(", ", attr.ToArray()) + "#"); } } if (ShowDelay && Skill.Action.Count > 0) { foreach (string action in Skill.Action) { skillDescEx.Add("#c[Delay] " + action + ": " + CharaSimLoader.GetActionDelay(action) + " ms#"); } } if (ShowReqSkill && Skill.ReqSkill.Count > 0) { foreach (var kv in Skill.ReqSkill) { string skillName; if (this.StringLinker != null && this.StringLinker.StringSkill.TryGetValue(kv.Key, out sr)) { skillName = sr.Name; } else { skillName = kv.Key.ToString(); } skillDescEx.Add("#c[Requires] " + skillName + ": " + kv.Value + "#"); } } if (skillDescEx.Count > 0) { g.DrawLine(Pens.White, region.SplitterX1, picH, region.SplitterX2, picH); picH += 9; foreach (var descEx in skillDescEx) { GearGraphics.DrawString(g, descEx, GearGraphics.ItemDetailFont, region.LevelDescLeft, region.TextRight, ref picH, 16); } picH += 9; } format.Dispose(); g.Dispose(); return(bitmap); }
private Bitmap RenderSkill(out int picH) { Bitmap bitmap = new Bitmap(290, DefaultPicHeight); Graphics g = Graphics.FromImage(bitmap); StringFormat format = (StringFormat)StringFormat.GenericDefault.Clone(); picH = 0; //获取文字 StringResult sr; if (StringLinker == null || !StringLinker.StringSkill.TryGetValue(Skill.SkillID, out sr)) { sr = new StringResultSkill(); sr.Name = "(null)"; } //绘制技能名称 format.Alignment = StringAlignment.Center; g.DrawString(sr.Name, GearGraphics.ItemNameFont2, Brushes.White, 144, 10, format); //绘制图标 picH = 33; g.FillRectangle(GearGraphics.GearIconBackBrush2, 14, picH, 68, 68); if (Skill.Icon.Bitmap != null) { g.DrawImage(GearGraphics.EnlargeBitmap(Skill.Icon.Bitmap), 14 + (1 - Skill.Icon.Origin.X) * 2, picH + (33 - Skill.Icon.Bitmap.Height) * 2); } //绘制desc picH = 35; if (!Skill.PreBBSkill) { GearGraphics.DrawString(g, "[Master Level: " + Skill.MaxLevel + "]", GearGraphics.ItemDetailFont2, 90, 270, ref picH, 16); } if (sr.Desc != null) { string hdesc = SummaryParser.GetSkillSummary(sr.Desc, Skill.Level, Skill.Common, SummaryParams.Default); //string hStr = SummaryParser.GetSkillSummary(skill, skill.Level, sr, SummaryParams.Default); GearGraphics.DrawString(g, hdesc, GearGraphics.ItemDetailFont2, 90, 270, ref picH, 16); } if (Skill.ReqLevel > 0) { GearGraphics.DrawString(g, "#c[Required Level:" + Skill.ReqLevel.ToString() + "]#", GearGraphics.ItemDetailFont2, 90, 270, ref picH, 16); } if (Skill.ReqAmount > 0) { GearGraphics.DrawString(g, "#c" + ItemStringHelper.GetSkillReqAmount(Skill.SkillID, Skill.ReqAmount) + "#", GearGraphics.ItemDetailFont2, 90, 270, ref picH, 16); } //分割线 picH = Math.Max(picH, 114); g.DrawLine(Pens.White, 6, picH, 283, picH); picH += 9; if (Skill.Level > 0) { string hStr = SummaryParser.GetSkillSummary(Skill, Skill.Level, sr, SummaryParams.Default); GearGraphics.DrawString(g, "[Current Level " + Skill.Level + "]", GearGraphics.ItemDetailFont, 8, 272, ref picH, 16); if (hStr != null) { GearGraphics.DrawString(g, hStr, GearGraphics.ItemDetailFont2, 8, 272, ref picH, 16); } } if (Skill.Level < Skill.MaxLevel) { string hStr = SummaryParser.GetSkillSummary(Skill, Skill.Level + 1, sr, SummaryParams.Default); GearGraphics.DrawString(g, "[Next Level " + (Skill.Level + 1) + "]", GearGraphics.ItemDetailFont, 8, 272, ref picH, 16); if (hStr != null) { GearGraphics.DrawString(g, hStr, GearGraphics.ItemDetailFont2, 8, 272, ref picH, 16); } } picH += 9; List <string> skillDescEx = new List <string>(); if (ShowProperties) { List <string> attr = new List <string>(); if (Skill.Invisible) { attr.Add("[Hidden Skill]"); } if (Skill.Hyper != HyperSkillType.None) { attr.Add("[Hyper Skill: " + Skill.Hyper + "]"); } if (Skill.CombatOrders) { attr.Add("[Can pass Master Level with Combat Orders]"); } if (Skill.NotRemoved) { attr.Add("[Cannot be canceled]"); } if (Skill.MasterLevel > 0 && Skill.MasterLevel < Skill.MaxLevel) { attr.Add("[Requires Mastery Book to pass Lv. " + Skill.MasterLevel + "]"); } if (Skill.NotIncBuffDuration) { attr.Add("[Not affected by Buff Duration increases]"); } if (Skill.NotCooltimeReset) { attr.Add("[Not affected by Cooldown reductions/resets]"); } if (attr.Count > 0) { skillDescEx.Add("#c" + string.Join("\n", attr.ToArray()) + "#"); } } if (ShowDelay && Skill.Action.Count > 0) { foreach (string action in Skill.Action) { skillDescEx.Add("#c[Skill Delay] " + action + ": " + CharaSimLoader.GetActionDelay(action) + " ms#"); } } if (ShowReqSkill && Skill.ReqSkill.Count > 0) { foreach (var kv in Skill.ReqSkill) { string skillName; if (this.StringLinker != null && this.StringLinker.StringSkill.TryGetValue(kv.Key, out sr)) { skillName = sr.Name; } else { skillName = kv.Key.ToString(); } skillDescEx.Add("#c[Required Skill]: " + skillName + ": " + kv.Value + " #"); } } if (skillDescEx.Count > 0) { g.DrawLine(Pens.White, 6, picH, 283, picH); picH += 9; foreach (var descEx in skillDescEx) { GearGraphics.DrawString(g, descEx, GearGraphics.ItemDetailFont, 8, 272, ref picH, 16); } picH += 9; } format.Dispose(); g.Dispose(); return(bitmap); }