// // GameViewController.swift // Terrain2 // // Created by Eryn Wells on 11/3/18. // Copyright © 2018 Eryn Wells. All rights reserved. // import Cocoa import MetalKit // Our macOS specific view controller class GameViewController: NSViewController { var renderer: Renderer! var mtkView: MTKView! override func viewDidLoad() { super.viewDidLoad() guard let mtkView = self.view as? MTKView else { print("View attached to GameViewController is not an MTKView") return } // Select the device to render with. We choose the default device guard let defaultDevice = MTLCreateSystemDefaultDevice() else { print("Metal is not supported on this device") return } mtkView.device = defaultDevice guard let newRenderer = Renderer(metalKitView: mtkView) else { print("Renderer cannot be initialized") return } renderer = newRenderer renderer.mtkView(mtkView, drawableSizeWillChange: mtkView.drawableSize) mtkView.delegate = renderer } override func viewWillAppear() { super.viewWillAppear() view.window?.makeFirstResponder(self) } override var acceptsFirstResponder: Bool { return true } override func keyDown(with event: NSEvent) { switch event.charactersIgnoringModifiers { case .some("n"): renderer.scheduleAlgorithmIteration() case .some("z"): renderer.drawLines = !renderer.drawLines default: print("key down: \(String(describing: event.charactersIgnoringModifiers))") super.keyDown(with: event) } } }