// // Block.swift // Privyet // // Created by Amy Bowersox on 5/23/20. // Copyright © 2020 Erbosoft Metaverse Design Solutions. All rights reserved. // import Foundation import SpriteKit // Colors that may be applied to blocks (whcih controls the sprite image they use) enum BlockColor: Int, CustomStringConvertible, CaseIterable { case Blue = 0, Orange, Purple, Red, Teal, Yellow, Green var spriteName: String { switch self { case .Blue: return "blue" case .Orange: return "orange" case .Purple: return "purple" case .Red: return "red" case .Teal: return "teal" case .Yellow: return "yellow" case .Green: return "green" } } var description: String { return self.spriteName } } // Rectangles in block coordinates class BlockRect { var left: Int var top: Int var right: Int var bottom: Int init(left: Int, top: Int, right: Int, bottom: Int) { self.left = left self.top = top self.right = right self.bottom = bottom } convenience init(x: Int, y: Int) { self.init(left: x, top: y, right: x, bottom: y) } var width: Int { return right - left + 1 } var height: Int { return bottom - top + 1 } static func +(lhs: BlockRect, rhs: BlockRect) -> BlockRect { return BlockRect(left: min(lhs.left, rhs.left), top: min(lhs.top, rhs.top), right: max(lhs.right, rhs.right), bottom: max(lhs.bottom, rhs.bottom)) } static func +=(lhs: BlockRect, rhs: BlockRect) -> BlockRect { lhs.left = min(lhs.left, rhs.left) lhs.top = min(lhs.top, rhs.top) lhs.right = max(lhs.right, rhs.right) lhs.bottom = max(lhs.bottom, rhs.bottom) return lhs } } // Represents a single block in the game. class Block: Hashable, CustomStringConvertible { // Constants let color: BlockColor // Properties var column: Int var row: Int var sprite: SKSpriteNode? var spriteName: String { return color.spriteName } static func == (lhs: Block, rhs: Block) -> Bool { return lhs.column == rhs.column && lhs.row == rhs.row && lhs.color.rawValue == rhs.color.rawValue } func hash(into hasher: inout Hasher) { hasher.combine(column) hasher.combine(row) } var description: String { return "\(color): [\(column), \(row)]" } init(column: Int, row: Int, color: BlockColor) { self.column = column self.row = row self.color = color } }