/// <summary> /// 繪製到Graphics /// </summary> /// <param name="g">Graphics物件</param> /// <param name="rectangle">繪製區域</param> protected override void OnDraw(Graphics g, Rectangle rectangle) { Rectangle drawRectangle = GetScaleRectangle(rectangle); SolidBrush brushBack = Colors.GetBrush("Back"); GetBackFrame(drawRectangle); g.FillPath(brushBack, _BackFrame); g.Clip = _BackRegion; if (DrawObjectInside != DrawNull.Value) { DrawObjectInside.Draw(g, drawRectangle); } SolidBrush brushText = Colors.GetBrush("Text"); SolidBrush brushShadow = Colors.GetBrush("Shadow"); Rectangle textRectangle = GetScaleRectangle(new Rectangle(rectangle.X + TextPadding.Left, rectangle.Y + TextPadding.Top, rectangle.Width - TextPadding.Horizontal, rectangle.Height - TextPadding.Vertical)); g.DrawString(Text, Font, brushShadow, new Rectangle(textRectangle.X + 1, textRectangle.Y + 1, textRectangle.Width, textRectangle.Height), DrawFormat); g.DrawString(Text, Font, brushText, textRectangle, DrawFormat); g.ResetClip(); if (BorderWidth > 0) { g.DrawPath(Colors.GetPen("Border", BorderWidth), _BackFrame); } }
/// <summary> /// 繪製到Graphics /// </summary> /// <param name="g">Graphics物件</param> /// <param name="rectangle">繪製區域</param> protected override void OnDraw(Graphics g, Rectangle rectangle) { Rectangle drawRectangle = GetScaleRectangle(rectangle); Brush brushBack = Colors.GetBrush("Back"); GetBackFrame(drawRectangle); g.FillPath(brushBack, _BackFrame); g.Clip = _BackRegion; if (DrawObjectInside != DrawNull.Value) { DrawObjectInside.Draw(g, drawRectangle); } if (Animation.IsFull && _LastTexts.Count > 0) { _LastText = _DisplayText; _DisplayText = _LastTexts.Dequeue(); Animation.Value = 0; } Animation.Value += Scene.IntervalOfRound; Brush brushText = Colors.GetBrush("Text"); Brush brushShadow = Colors.GetBrush("Shadow"); Rectangle textRectangle = GetScaleRectangle(new Rectangle(rectangle.X + TextPadding.Left, rectangle.Y + TextPadding.Top, rectangle.Width - TextPadding.Horizontal, rectangle.Height - TextPadding.Vertical)); if (Animation.IsFull) { textRectangle.Offset(1, 1); g.DrawString(_DisplayText, Font, brushShadow, textRectangle, DrawFormat); textRectangle.Offset(-1, -1); g.DrawString(_DisplayText, Font, brushText, textRectangle, DrawFormat); } else { int moveMaxY = textRectangle.Height + rectangle.Height / 2; textRectangle.Offset(1, (int)(1 - Animation.GetRatio() * moveMaxY)); g.DrawString(_LastText, Font, brushShadow, textRectangle, DrawFormat); textRectangle.Offset(-1, -1); g.DrawString(_LastText, Font, brushText, textRectangle, DrawFormat); textRectangle.Offset(1, moveMaxY); g.DrawString(_DisplayText, Font, brushShadow, textRectangle, DrawFormat); textRectangle.Offset(-1, -1); g.DrawString(_DisplayText, Font, brushText, textRectangle, DrawFormat); } g.ResetClip(); if (BorderWidth > 0) { g.DrawPath(Colors.GetPen("Border", BorderWidth), _BackFrame); } }
/// <summary> /// 繪製到Graphics /// </summary> /// <param name="g">Graphics物件</param> /// <param name="rectangle">繪製區域</param> protected override void OnDraw(Graphics g, Rectangle rectangle) { Rectangle drawRectangle = GetScaleRectangle(rectangle); GetBackFrame(drawRectangle); DrawSkillBase drawSkillBase = DrawObjectInside as DrawSkillBase; SkillBase bindingSkill = drawSkillBase == null ? null : drawSkillBase.BindingSkill; // 取得綁定技能 g.FillPath(Colors.GetBrush("Back"), _BackFrame); g.Clip = _BackRegion; if (bindingSkill != null && !StaticMode) { switch (bindingSkill.Status) { case SkillStatus.Disabled: if (bindingSkill.Owner != null && bindingSkill.Owner.Energy.Value < bindingSkill.CostEnergy) { g.FillRectangle(Brushes.LightPink, drawRectangle); } else { using (LinearGradientBrush brush2 = new LinearGradientBrush(drawRectangle, Color.FromArgb(255, 255, 200), Color.FromArgb(255, 255, 240), 315)) { g.FillRectangle(brush2, drawRectangle); } } break; case SkillStatus.Cooldown: float cooldownSize = (1F - bindingSkill.Cooldown.GetRatio()) * drawRectangle.Height; g.FillRectangle(Brushes.AliceBlue, drawRectangle); g.FillRectangle(Brushes.LightSlateGray, drawRectangle.X, drawRectangle.Y + drawRectangle.Height - cooldownSize, drawRectangle.Width, cooldownSize); break; case SkillStatus.Channeled: if (bindingSkill.Channeled.Limit < 0) { if (_Animation > 20) { _Animation %= 20; } int angle = _Animation * 18; using (LinearGradientBrush brush2 = new LinearGradientBrush(drawRectangle, GlobalColors.Channeled, Color.FromArgb(245, 255, 240), angle)) { g.FillRectangle(brush2, drawRectangle); } _Animation++; } else { float channeledSize = (1F - bindingSkill.Channeled.GetRatio()) * drawRectangle.Height; Brush brushChannel = Colors.GetBrush("Channel"); g.FillRectangle(brushChannel, drawRectangle.X, drawRectangle.Y + drawRectangle.Height - channeledSize, drawRectangle.Width, channeledSize); } break; } } if (DrawObjectInside != DrawNull.Value) { DrawObjectInside.Draw(g, drawRectangle); } g.ResetClip(); g.DrawPath(Colors.GetPen("Border", BorderWidth), _BackFrame); if (DrawButton != RunningBox.SkillKeyType.None) { Pen penBlack = Colors.GetPen("Button", 2); Rectangle keyRectangle = new Rectangle(drawRectangle.Left + drawRectangle.Width - 15, drawRectangle.Top + drawRectangle.Height - 15, 20, 25); g.FillEllipse(Brushes.White, keyRectangle); switch (DrawButton) { case RunningBox.SkillKeyType.MouseButtonLeft: g.FillPie(Brushes.SkyBlue, keyRectangle, 180, 90); break; case RunningBox.SkillKeyType.MouseButtonRight: g.FillPie(Brushes.SkyBlue, keyRectangle, 270, 90); break; } g.DrawEllipse(penBlack, keyRectangle); penBlack.Width = 1; g.DrawLine(penBlack, keyRectangle.Left, keyRectangle.Top + keyRectangle.Height / 2, keyRectangle.Left + keyRectangle.Width, keyRectangle.Top + keyRectangle.Height / 2); g.DrawLine(penBlack, keyRectangle.Left + keyRectangle.Width / 2, keyRectangle.Top, keyRectangle.Left + keyRectangle.Width / 2, keyRectangle.Top + keyRectangle.Height / 2); } }
/// <summary> /// 繪製到Graphics /// </summary> /// <param name="g">Graphics物件</param> /// <param name="rectangle">繪製區域</param> protected override void OnDraw(Graphics g, Rectangle rectangle) { Rectangle drawRectangle = GetScaleRectangle(rectangle); SolidBrush brushBack = Colors.GetBrush("Back"); GetBackFrame(drawRectangle); g.FillPath(brushBack, _BackFrame); g.Clip = _BackRegion; if (DrawObjectInside != DrawNull.Value) { DrawObjectInside.Draw(g, drawRectangle); } Rectangle insideRectangle = GetScaleRectangle(new Rectangle(rectangle.X + TextPadding.Left, rectangle.Y + TextPadding.Top, rectangle.Width - TextPadding.Horizontal, rectangle.Height - TextPadding.Vertical)); int insideLeft = insideRectangle.Left; int insideTop = insideRectangle.Top; int insideWidth = insideRectangle.Width; int insideHeight = insideRectangle.Height; Rectangle textRectangle = new Rectangle(insideLeft, insideTop, insideWidth, (int)(insideHeight * 0.7F)); string mainText = BindingSkill.Info; SolidBrush brushText = Colors.GetBrush("Text"); SolidBrush brushShadow = Colors.GetBrush("Shadow"); SolidBrush brushInfo1 = Colors.GetBrush("Info1"); SolidBrush brushInfo2 = Colors.GetBrush("Info2"); SolidBrush brushInfo3 = Colors.GetBrush("Info3"); textRectangle.Offset(-1, -1); g.DrawString(mainText, _MainFont, brushShadow, textRectangle, GlobalFormat.MiddleLeft); textRectangle.Offset(1, 1); g.DrawString(mainText, _MainFont, brushText, textRectangle, GlobalFormat.MiddleLeft); int infoLeft = insideLeft; int infoTop = insideTop + (int)(insideHeight * 0.7F); g.DrawString("能量", _InfoFont, brushInfo1, infoLeft, infoTop); infoLeft += (int)g.MeasureString("能量", _InfoFont).Width; string energyText = ""; if (BindingSkill.CostEnergy > 0) { energyText = (BindingSkill.CostEnergy / 100).ToString(); } if (BindingSkill.CostEnergyPerSec > 0) { energyText = (string.IsNullOrWhiteSpace(energyText) ? "" : energyText + "+") + (BindingSkill.CostEnergyPerSec / 100).ToString() + "/s"; } if (string.IsNullOrWhiteSpace(energyText)) { energyText = "無"; } g.DrawString(energyText, _InfoFont, brushInfo2, infoLeft, infoTop); infoLeft = insideLeft + insideWidth / 2 + 10; g.DrawString("冷卻", _InfoFont, brushInfo1, infoLeft, infoTop); infoLeft += (int)g.MeasureString("冷卻", _InfoFont).Width; string cooldownText = string.Format("{0:N1}秒", BindingSkill.Cooldown.Limit / (float)Scene.Sec(1)); g.DrawString(cooldownText, _InfoFont, brushInfo3, infoLeft, infoTop); g.ResetClip(); if (BorderWidth > 0) { g.DrawPath(Colors.GetPen("Border", BorderWidth), _BackFrame); } }