Learn-iOS-Swift-by-Examples/Badger/Common/View.swift

107 lines
3.0 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
Copyright (C) 2016 Apple Inc. All Rights Reserved.
See LICENSE.txt for this samples licensing information
Abstract:
An SCNView used to relay keyboard controls on OSX, and present
setup the 2D overlay.
*/
import GameKit
class View: SCNView {
// MARK: Mouse and Keyboard Events
#if os(OSX)
var eventsDelegate: KeyboardEventsDelegate?
override func keyDown(with event: NSEvent) {
guard let eventsDelegate = eventsDelegate, eventsDelegate.keyDown(in: self, with: event) else {
super.keyDown(with: event)
return
}
}
override func keyUp(with event: NSEvent) {
guard let eventsDelegate = eventsDelegate, eventsDelegate.keyUp(in: self, with: event) else {
super.keyUp(with: event)
return
}
}
#endif
// Resizing
#if os(iOS) || os(tvOS)
override func layoutSubviews() {
super.layoutSubviews()
update2DOverlays()
}
#elseif os(OSX)
override func setFrameSize(_ newSize: NSSize) {
super.setFrameSize(newSize)
update2DOverlays()
}
#endif
// MARK: Overlays
private let _overlayNode = SKNode()
private let _scaleNode = SKNode()
private let _collectedItemsCountLabel = SKLabelNode(fontNamed: "Superclarendon")
private func update2DOverlays() {
_overlayNode.position = CGPoint(x: 0.0, y: bounds.size.height)
}
func setup2DOverlay() {
let w = bounds.size.width
let h = bounds.size.height
// Setup the game overlays using SpriteKit.
let skScene = SKScene(size: CGSize(width: w, height: h))
skScene.scaleMode = .resizeFill
skScene.addChild(_scaleNode)
_scaleNode.addChild(_overlayNode)
_overlayNode.position = CGPoint(x: 0.0, y: h)
#if os(OSX)
_scaleNode.xScale = layer!.contentsScale
_scaleNode.yScale = layer!.contentsScale
#endif
// The Bob icon.
let bobSprite = SKSpriteNode(imageNamed: "BobHUD.png")
bobSprite.position = CGPoint(x: 70, y:-50)
bobSprite.xScale = 0.5
bobSprite.yScale = 0.5
_overlayNode.addChild(bobSprite)
_collectedItemsCountLabel.text = "x0"
_collectedItemsCountLabel.horizontalAlignmentMode = .left
_collectedItemsCountLabel.position = CGPoint(x: 135, y:-63)
_overlayNode.addChild(_collectedItemsCountLabel)
// Assign the SpriteKit overlay to the SceneKit view.
self.overlaySKScene = skScene
skScene.isUserInteractionEnabled = false
}
var collectedItemsCount = 0 {
didSet {
_collectedItemsCountLabel.text = "x\(collectedItemsCount)"
}
}
func didCollectItem() {
collectedItemsCount = collectedItemsCount + 1
}
func didCollectBigItem() {
collectedItemsCount = collectedItemsCount + 10
}
}