metaballs/Metaballs/ViewController.swift

71 lines
1.5 KiB
Swift
Raw Normal View History

2017-07-30 14:04:39 -07:00
//
// ViewController.swift
// Metaballs
//
// Created by Eryn Wells on 7/30/17.
// Copyright © 2017 Eryn Wells. All rights reserved.
//
import Cocoa
import MetalKit
import MetaballsKit
2017-07-30 14:04:39 -07:00
class ViewController: NSViewController, RendererDelegate {
internal var field = Field(size: CGSize()) {
didSet {
field.size = metalView.drawableSize
}
}
private var renderer: Renderer!
private var metalView: MTKView! {
return self.view as! MTKView
}
2017-07-30 14:04:39 -07:00
override func viewDidLoad() {
super.viewDidLoad()
guard let metalView = metalView else {
view = newErrorView()
print("self.view should be an MTKView; got \(type(of: self.view)) instead")
return
}
2017-07-30 14:04:39 -07:00
do {
renderer = try Renderer(view: metalView, field: field)
renderer.delegate = self
} catch let e {
print("\(e)")
view = newErrorView()
return
2017-07-30 14:04:39 -07:00
}
metalView.delegate = renderer
}
override func viewWillAppear() {
super.viewWillAppear()
renderer.mtkView(metalView, drawableSizeWillChange: metalView.drawableSize)
field.add(ballWithRadius: 10.0)
}
private func newErrorView() -> NSView {
let view = NSView()
view.layer?.backgroundColor = NSColor.red.cgColor
return view
2017-07-30 14:04:39 -07:00
}
// MARK: - RendererDelegate
2017-07-30 14:04:39 -07:00
var renderSize: CGSize {
get {
return field.size
}
set {
field.size = newValue
}
}
2017-07-30 14:04:39 -07:00
}