diff --git a/Metaballs/ViewController.swift b/Metaballs/ViewController.swift index 6303d8a..1d1febf 100644 --- a/Metaballs/ViewController.swift +++ b/Metaballs/ViewController.swift @@ -40,7 +40,10 @@ class ViewController: NSViewController, RendererDelegate { override func viewWillAppear() { super.viewWillAppear() renderer.mtkView(metalView, drawableSizeWillChange: metalView.drawableSize) - field.add(ballWithRadius: 10.0) + for _ in 1...10 { + let r = Float(20 + arc4random_uniform(50)) + field.add(ballWithRadius: r) + } } private func newErrorView() -> NSView { diff --git a/MetaballsKit/Metaballs.swift b/MetaballsKit/Metaballs.swift index f046a0b..a0769a9 100644 --- a/MetaballsKit/Metaballs.swift +++ b/MetaballsKit/Metaballs.swift @@ -87,15 +87,21 @@ public class Field { } } } + populateBallBuffer() } public func add(ballWithRadius radius: Float) { let insetBounds = bounds.insetBy(dx: CGFloat(radius), dy: CGFloat(radius)) -// let x = CGFloat(UInt32(insetBounds.minX) + arc4random_uniform(UInt32(insetBounds.width))) -// let y = CGFloat(UInt32(insetBounds.minY) + arc4random_uniform(UInt32(insetBounds.height))) - let position = Point(x: Float(insetBounds.midX), y: Float(insetBounds.midY)) - // TODO: Randomly generate velocity too. - let ball = Ball(radius: radius, position: position, velocity: Vector()) + + let x = Float(UInt32(insetBounds.minX) + arc4random_uniform(UInt32(insetBounds.width))) + let y = Float(UInt32(insetBounds.minY) + arc4random_uniform(UInt32(insetBounds.height))) + let position = Point(x: x, y: y) + + let dx = Float(5 - Int(arc4random_uniform(10))) + let dy = Float(5 - Int(arc4random_uniform(10))) + let velocity = Vector(dx: dx, dy: dy) + + let ball = Ball(radius: radius, position: position, velocity: velocity) balls.append(ball) NSLog("Added ball \(ball); fieldSize=\(size)")