66 lines
1.7 KiB
Swift
66 lines
1.7 KiB
Swift
//
|
|
// 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)
|
|
}
|
|
}
|
|
}
|