public void SetNDockLabels(NameAndTimer[] ndock)\r
{\r
for (var i = 0; i < _ndockLabels.Length; i++)\r
- _ndockLabels[i][1].SetName("", ndock[i].Name, "", ShipNameWidth.NDock);\r
+ _ndockLabels[i][1].SetName(ndock[i].Name, ShipNameWidth.NDock);\r
}\r
\r
public void SetNDockTimer(int dock, RingTimer timer, bool finishTime)\r
public bool AnchorRight { get; set; }\r
private int _right = int.MinValue;\r
private int _left;\r
+ private SlotStatus _slotStatus;\r
+\r
+ [Flags]\r
+ private enum SlotStatus\r
+ {\r
+ Equipped = 0,\r
+ NormalEmpty = 1,\r
+ ExtraEmpty = 2\r
+ }\r
\r
public ShipLabel()\r
{\r
\r
public void SetName(ShipStatus status, ShipNameWidth width = ShipNameWidth.Max)\r
{\r
- var empty = status.Id != -1 && status.Slot.All(e => e.Id == -1) ? "▫" : "";\r
+ SlotStatus empty = SlotStatus.Equipped;\r
+ if (status.Id != -1)\r
+ {\r
+ if (status.Slot.All(item => item.Id == -1))\r
+ empty |= SlotStatus.NormalEmpty;\r
+ if (status.SlotEx.Id == -1)\r
+ empty |= SlotStatus.ExtraEmpty;\r
+ }\r
var dc = status.PreparedDamageControl;\r
var dcname = dc == 42 ? "[ダ]" : dc == 43 ? "[メ]" : "";\r
SetName((status.Escaped ? "[避]" : dcname), status.Name, empty, width);\r
\r
public void SetName(string name)\r
{\r
- SetName("", name, "");\r
+ SetName("", name, SlotStatus.Equipped);\r
+ }\r
+\r
+ public void SetName(string name, ShipNameWidth width)\r
+ {\r
+ SetName("", name, SlotStatus.Equipped, width);\r
}\r
\r
- public void SetName(string prefix, string name, string suffix, ShipNameWidth width = ShipNameWidth.Max)\r
+ private void SetName(string prefix, string name, SlotStatus slotStatus, ShipNameWidth width = ShipNameWidth.Max)\r
{\r
if (name == null)\r
return;\r
+ _slotStatus = slotStatus;\r
var lu = new Regex(@"^\p{Lu}").IsMatch(name);\r
var shift = (int)Round(ScaleFactor.Height);\r
if (lu && Font.Equals(Parent.Font))\r
Location += new Size(0, shift);\r
Font = Parent.Font;\r
}\r
- var result = prefix + name + suffix;\r
+ var result = prefix + name;\r
var measured = TextRenderer.MeasureText(result, Font).Width;\r
if (measured <= (int)width)\r
{\r
Text = result;\r
+ Invalidate(); // 必ずOnPaintを実行させるため\r
return;\r
}\r
var truncated = "";\r
break;\r
truncated = tmp;\r
}\r
- Text = prefix + truncated.TrimEnd(' ') + suffix;\r
+ Text = prefix + truncated.TrimEnd(' ');\r
+ Invalidate();\r
}\r
\r
public void SetHp(ShipStatus status)\r
Location = new Point(_left, Top);\r
}\r
\r
+ protected override void OnPaint(PaintEventArgs e)\r
+ {\r
+ base.OnPaint(e);\r
+ if ((_slotStatus & SlotStatus.NormalEmpty) != 0)\r
+ {\r
+ e.Graphics.DrawRectangle(\r
+ Pens.Black,\r
+ ClientSize.Width - 3 * ScaleFactor.Width, 1 * ScaleFactor.Height,\r
+ 2 * ScaleFactor.Width, 4 * ScaleFactor.Height);\r
+ }\r
+ if ((_slotStatus & SlotStatus.ExtraEmpty) != 0)\r
+ {\r
+ e.Graphics.DrawRectangle(\r
+ Pens.Black,\r
+ ClientSize.Width - 3 * ScaleFactor.Width, 7 * ScaleFactor.Height,\r
+ 2 * ScaleFactor.Width, 3 * ScaleFactor.Height);\r
+ }\r
+ }\r
+\r
public void Scale()\r
{\r
Scale(ScaleFactor);\r