[all] Add a ball on click; regenerate the field on right click
This commit is contained in:
parent
9297302a75
commit
357db9a248
2 changed files with 25 additions and 2 deletions
|
@ -41,17 +41,36 @@ class ViewController: NSViewController, RendererDelegate {
|
||||||
super.viewWillAppear()
|
super.viewWillAppear()
|
||||||
renderer.mtkView(metalView, drawableSizeWillChange: metalView.drawableSize)
|
renderer.mtkView(metalView, drawableSizeWillChange: metalView.drawableSize)
|
||||||
for _ in 1...10 {
|
for _ in 1...10 {
|
||||||
let r = Float(20 + arc4random_uniform(50))
|
addBallWithRandomRadius()
|
||||||
field.add(ballWithRadius: r)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override func mouseDown(with event: NSEvent) {
|
||||||
|
addBallWithRandomRadius()
|
||||||
|
}
|
||||||
|
|
||||||
|
override func rightMouseDown(with event: NSEvent) {
|
||||||
|
field.clear()
|
||||||
|
for _ in 1...10 {
|
||||||
|
addBallWithRandomRadius()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Private
|
||||||
|
|
||||||
private func newErrorView() -> NSView {
|
private func newErrorView() -> NSView {
|
||||||
let view = NSView()
|
let view = NSView()
|
||||||
view.layer?.backgroundColor = NSColor.red.cgColor
|
view.layer?.backgroundColor = NSColor.red.cgColor
|
||||||
return view
|
return view
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private func addBallWithRandomRadius() {
|
||||||
|
let base = UInt32(view.bounds.width * 0.05)
|
||||||
|
let variance = UInt32(base * 2)
|
||||||
|
let r = Float(base + arc4random_uniform(variance))
|
||||||
|
field.add(ballWithRadius: r)
|
||||||
|
}
|
||||||
|
|
||||||
// MARK: - RendererDelegate
|
// MARK: - RendererDelegate
|
||||||
|
|
||||||
var renderSize: CGSize {
|
var renderSize: CGSize {
|
||||||
|
|
|
@ -110,6 +110,10 @@ public class Field {
|
||||||
populateBallBuffer()
|
populateBallBuffer()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public func clear() {
|
||||||
|
balls.removeAll(keepingCapacity: true)
|
||||||
|
}
|
||||||
|
|
||||||
// MARK: - Metal Configuration
|
// MARK: - Metal Configuration
|
||||||
|
|
||||||
private var device: MTLDevice?
|
private var device: MTLDevice?
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue