@objc dynamic var slotItemController = NSObjectController()
@objc dynamic var slotItemLevel: NSNumber? {
- didSet { needsDisplay = true }
+ didSet { needsDisplayInMainThread() }
}
@objc dynamic var slotItemAlv: NSNumber? {
- didSet { needsDisplay = true }
+ didSet { needsDisplayInMainThread() }
}
-
@objc var slotItemID: NSNumber? {
didSet {
slotItemController.content = nil
- guard let itemId = slotItemID as? Int
- else { return }
+ guard let itemId = slotItemID as? Int else { return }
slotItemController.content = ServerDataStore.default.slotItem(by: itemId)
- needsDisplay = true
+ needsDisplayInMainThread()
}
}
return SlotItemLevelView.sCharacterProtrudeMaskImageMaskImage!
}
- private var levelOneBezierPath: NSBezierPath? {
+ private var levelOneBezierPath: Polygon {
let width = bounds.width
let height = bounds.height
- let path = multiline(lines: [
- (
- NSPoint(x: width - offset, y: 0),
- NSPoint(x: width - offset, y: height)
- )
- ])
- path.lineWidth = 1.0
-
- return path
+ return Polygon(lineWidth: 1.0)
+ .move(to: NSPoint(x: width - offset, y: 0))
+ .line(to: NSPoint(x: width - offset, y: height))
}
- private var levelTwoBezierPath: NSBezierPath? {
+ private var levelTwoBezierPath: Polygon {
let width = bounds.width
let height = bounds.height
- let path = multiline(lines:
- [
- (
- NSPoint(x: width - offset, y: 0),
- NSPoint(x: width - offset, y: height)
- ),
- (
- NSPoint(x: width - offset - padding, y: 0),
- NSPoint(x: width - offset - padding, y: height)
- )
- ])
- path.lineWidth = 1.0
-
- return path
+ return Polygon(lineWidth: 1.0)
+ .move(to: NSPoint(x: width - offset, y: 0))
+ .line(to: NSPoint(x: width - offset, y: height))
+ .move(to: NSPoint(x: width - offset - padding, y: 0))
+ .line(to: NSPoint(x: width - offset - padding, y: height))
}
- private var levelThreeBezierPath: NSBezierPath? {
+ private var levelThreeBezierPath: Polygon {
let width = bounds.width
let height = bounds.height
- let path = multiline(lines:
- [
- (
- NSPoint(x: width - offset, y: 0),
- NSPoint(x: width - offset, y: height)
- ),
- (
- NSPoint(x: width - offset - padding, y: 0),
- NSPoint(x: width - offset - padding, y: height)
- ),
- (
- NSPoint(x: width - offset - padding * 2, y: 0),
- NSPoint(x: width - offset - padding * 2, y: height)
- )
- ])
- path.lineWidth = 1.0
-
- return path
+ return Polygon(lineWidth: 1.0)
+ .move(to: NSPoint(x: width - offset, y: 0))
+ .line(to: NSPoint(x: width - offset, y: height))
+ .move(to: NSPoint(x: width - offset - padding, y: 0))
+ .line(to: NSPoint(x: width - offset - padding, y: height))
+ .move(to: NSPoint(x: width - offset - padding * 2, y: 0))
+ .line(to: NSPoint(x: width - offset - padding * 2, y: height))
}
- private var levelFourBezierPath: NSBezierPath? {
+ private var levelFourBezierPath: Polygon {
let width = bounds.width
let height = bounds.height
- let path = multiline(lines:
- [
- (
- NSPoint(x: width - offset - slideOffset, y: 0),
- NSPoint(x: width - offset, y: height)
- )
- ])
- path.lineWidth = 2.0
-
- return path
+ return Polygon(lineWidth: 2.0)
+ .move(to: NSPoint(x: width - offset - slideOffset, y: 0))
+ .line(to: NSPoint(x: width - offset, y: height))
}
- private var levelFiveBezierPath: NSBezierPath? {
+ private var levelFiveBezierPath: Polygon {
let width = bounds.width
let height = bounds.height
- let path = multiline(lines:
- [
- (
- NSPoint(x: width - offset - slideOffset, y: 0),
- NSPoint(x: width - offset, y: height)
- ),
- (
- NSPoint(x: width - offset - padding - slideOffset, y: 0),
- NSPoint(x: width - offset - padding, y: height)
- )
- ])
- path.lineWidth = 2.0
-
- return path
+ return Polygon(lineWidth: 2.0)
+ .move(to: NSPoint(x: width - offset - slideOffset, y: 0))
+ .line(to: NSPoint(x: width - offset, y: height))
+ .move(to: NSPoint(x: width - offset - padding - slideOffset, y: 0))
+ .line(to: NSPoint(x: width - offset - padding, y: height))
}
- private var levelSixBezierPath: NSBezierPath? {
+ private var levelSixBezierPath: Polygon {
let width = bounds.width
let height = bounds.height
- let path = multiline(lines:
- [
- (
- NSPoint(x: width - offset - slideOffset, y: 0),
- NSPoint(x: width - offset, y: height)
- ),
- (
- NSPoint(x: width - offset - padding - slideOffset, y: 0),
- NSPoint(x: width - offset - padding, y: height)
- ),
- (
- NSPoint(x: width - offset - padding * 2 - slideOffset, y: 0),
- NSPoint(x: width - offset - padding * 2, y: height)
- )
- ])
- path.lineWidth = 2.0
-
- return path
+ return Polygon(lineWidth: 2.0)
+ .move(to: NSPoint(x: width - offset - slideOffset, y: 0))
+ .line(to: NSPoint(x: width - offset, y: height))
+ .move(to: NSPoint(x: width - offset - padding - slideOffset, y: 0))
+ .line(to: NSPoint(x: width - offset - padding, y: height))
+ .move(to: NSPoint(x: width - offset - padding * 2 - slideOffset, y: 0))
+ .line(to: NSPoint(x: width - offset - padding * 2, y: height))
}
- private var levelSevenBezierPath: NSBezierPath? {
+ private var levelSevenBezierPath: Polygon {
let width = bounds.width
let height = bounds.height
- let path = polyline(points:
- [
- NSPoint(x: width - offset - slideOffset, y: 0),
- NSPoint(x: width - offset, y: height * 0.5),
- NSPoint(x: width - offset - anglePoint, y: height)
- ])
- polyline(points:
- [
- NSPoint(x: width - offset - padding - slideOffset, y: 0),
- NSPoint(x: width - offset - padding, y: height * 0.5),
- NSPoint(x: width - offset - padding - anglePoint, y: height)
- ])
- .map { path?.append($0) }
- path?.lineWidth = 2.0
-
- return path
+ return Polygon(lineWidth: 2.0)
+ .move(to: NSPoint(x: width - offset - slideOffset, y: 0))
+ .line(to: NSPoint(x: width - offset, y: height * 0.5))
+ .line(to: NSPoint(x: width - offset - anglePoint, y: height))
+ .move(to: NSPoint(x: width - offset - padding - slideOffset, y: 0))
+ .line(to: NSPoint(x: width - offset - padding, y: height * 0.5))
+ .line(to: NSPoint(x: width - offset - padding - anglePoint, y: height))
}
private var levelFont: NSFont {
- return NSFont.monospacedDigitSystemFont(ofSize: NSFont.smallSystemFontSize, weight: .regular)
+ return .monospacedDigitSystemFont(ofSize: NSFont.smallSystemFontSize, weight: .regular)
}
private var levelColor: NSColor {
// MARK: - Function
override func draw(_ dirtyRect: NSRect) {
- guard let context = NSGraphicsContext.current?.cgContext
- else { fatalError("Con not get current CGContext") }
+ guard let context = NSGraphicsContext.current?.cgContext else { fatalError("Con not get current CGContext") }
context.saveGState()
maskImage.map { context.clip(to: bounds, mask: $0) }
drawAirLevel()
}
- private func bezierPathForALevel(level: Int) -> NSBezierPath? {
+ private func bezierPathForALevel(level: Int) -> Polygon? {
switch level {
case 1: return levelOneBezierPath
case 4, 5, 6, 7:
let shadow = NSShadow()
- shadow.shadowColor = NSColor.yellow
+ shadow.shadowColor = .yellow
shadow.shadowBlurRadius = 3.0
return shadow
private func drawAirLevel() {
- guard let alv = slotItemAlv as? Int
- else { return }
+ guard let alv = slotItemAlv as? Int else { return }
colorForALevel(level: alv)?.set()
shadowForALevel(level: alv)?.set()
private func drawLevel() {
- guard let lv = slotItemLevel as? Int, lv != 0
- else { return }
+ guard let lv = slotItemLevel as? Int, lv != 0 else { return }
- let string: String = lv == 10 ? "max" : "★+\(lv)"
+ let string = (lv == 10 ? "max" : "★+\(lv)")
let attr: [NSAttributedStringKey: Any] = [.font: levelFont,
.foregroundColor: levelColor]
let attributedString = NSAttributedString(string: string, attributes: attr)