diff --git a/Cube4Fun/Animations.swift b/Cube4Fun/Animations.swift new file mode 100644 index 0000000..28bcbef --- /dev/null +++ b/Cube4Fun/Animations.swift @@ -0,0 +1,230 @@ +// +// Animations.swift +// Cube4Fun +// +// Created by Nik on 07.04.15. +// Copyright (c) 2015 DerNik. All rights reserved. +// + +// Constants +let AnimName = "AnimName" +let AnimKey = "AnimKey" +let AnimDuration = "AnimDur" +let AnimSpeed = "AnimSpeed" +let AnimFrames = "AnimData" + +class Animations: NSObject { + + let _emptyFrame: [UInt8] = [ + 255,255,255,255, + 255,255,255,255, + 255,255,255,255, + 255,255,255,255, + 255,255,255,255, + 255,255,255,255, + 255,255,255,255, + 255,255,255,255, + 255,255,255,255, + 255,255,255,255, + 255,255,255,255, + 255,255,255,255, + 255,255,255,255, + 255,255,255,255, + 255,255,255,255, + 255,255,255,255] + + var _displayedFrame: Int = 1; +// var _frameCount: UInt32 = 1; +// var _oneFrame: NSMutableData = NSMutableData() // == byte[] array +// var _emptyAnimation: NSMutableDictionary = NSMutableDictionary() + var _animationArray: [NSMutableDictionary] = [NSMutableDictionary]() + var _animationSelected: Int = 0 + let _minSendDelay: NSTimeInterval = 0.200 // fastes speed 200 milliseconds + let maxFrameSpeed = 3000 // the lowest possible speed allowed + let minFrameSpeed = 200 // the fastest possible speed allowed + let frameSpeedStep = 100 // how fast increase or decrease speed +// var _playSendDelay: NSTimeInterval = 0.5 // 500 milliseconds as default + + override init() { + super.init() + // Show the first frame + _displayedFrame = 1 + // Append empty animation + self.addAnimation() + // Set visible animation + _animationSelected = 0 + } + + // How much animations do we have + func count() -> (Int) { + return _animationArray.count + } + + func getAnimation(id: Int) -> (NSDictionary) { + let myAnimation = _animationArray[id] as NSDictionary + return myAnimation + } + + func getAnimationName(id: Int) -> (String) { + let value = (self.getAnimation(id)).objectForKey(AnimName) as! String + return value + } + func setAnimationName(id: Int, value: String) { + (self.getAnimation(id)).setValue(value, forKey: AnimName) + } + + func getAnimationKey(id: Int) -> (String) { + let value = (self.getAnimation(id)).objectForKey(AnimKey) as! String + return value + } + func setAnimationKey(id: Int, value: String) { + (self.getAnimation(id)).setValue(value, forKey: AnimKey) + } + + func getAnimationDuration(id: Int) -> (Int) { + let value = (self.getAnimation(id)).objectForKey(AnimDuration) as! Int + return value + } + func setAnimationDuration(id: Int, value: Int) { + (self.getAnimation(id)).setValue(value, forKey: AnimDuration) + } + + func getAnimationSpeed(id: Int) -> (Int) { + let value = (self.getAnimation(id)).objectForKey(AnimSpeed) as! Int + return value + } + func setAnimationSpeed(id: Int, value: Int) { + (self.getAnimation(id)).setValue(value, forKey: AnimSpeed) + } + + func getAnimationFrameCount() -> (Int) { + return self.getAnimationFrameCount(_animationSelected) + } + func getAnimationFrameCount(id: Int) -> (Int) { + let myFrames: NSMutableData = (self.getAnimation(id)).objectForKey(AnimFrames) as! NSMutableData + return myFrames.length / 64 + //let value = (self.getAnimation(id)).objectForKey("AnimFrames") as Int + //return value + } + func getAnimationFrameID() -> Int { + return _displayedFrame + } + func setAnimationFrameID(id: Int) { + _displayedFrame = id + } + + func setSelectedAnimationID(id: Int) { + if id >= 0 { + _animationSelected = id + _displayedFrame = 1 + } + } + func getSelectedAnimationID() -> (Int) { + return _animationSelected + } + func deleteSelected() { + _animationArray.removeAtIndex(_animationSelected) + if ( _animationSelected == 0 && _animationArray.count == 0 ) { // last Frame + self.addAnimation() + } + } + func moveUpSelected() { + if ( _animationSelected > 0 ) { + _animationArray.insert(_animationArray[_animationSelected], atIndex: _animationSelected-1) + _animationArray.removeAtIndex(_animationSelected+1) + } + } + func moveDownSelected() { + if (_animationSelected < _animationArray.count - 1) { + _animationArray.insert(_animationArray[_animationSelected+1], atIndex: _animationSelected) + _animationArray.removeAtIndex(_animationSelected+2) + } + } + + func addAnimation() { + _animationArray.append(self.newAnimation()) + println("append Animation count: \(_animationArray.count)") + } + func newAnimation() -> (NSMutableDictionary) { + println("create new animation") + return [AnimName: "Animation1", AnimKey: "1=anim1", AnimDuration: 1, AnimSpeed: 500, AnimFrames: self.newFrame()] + } + func newFrame() -> (NSMutableData) { + println("create new frame") + return NSMutableData(bytes: _emptyFrame, length: 64) + } + func addFrame() { + let myData: NSMutableData = (self.getAnimation(_animationSelected)).objectForKey(AnimFrames) as! NSMutableData + myData.appendBytes(_emptyFrame, length: 64) + } + func removeFrame() { + if self.getAnimationFrameCount() > 1 { + let myData: NSMutableData = (self.getAnimation(_animationSelected)).objectForKey(AnimFrames) as! NSMutableData + let myLength = myData.length + myData.length = myLength - 64 // remove one frame + } + } + + func animationSpeedInt() -> Int { + let frameSpeed: Int = (self.getAnimation(_animationSelected)).objectForKey(AnimSpeed) as! Int + return frameSpeed + } + func animationSpeedFloat() -> NSTimeInterval { + let frameSpeed: Int = (self.getAnimation(_animationSelected)).objectForKey(AnimSpeed) as! Int + let mySpeed: NSTimeInterval = NSTimeInterval(Float(frameSpeed)/1000) + return mySpeed + } + func increaseSpeed() { + let frameSpeed: Int = (self.getAnimation(_animationSelected)).objectForKey(AnimSpeed) as! Int + if frameSpeed < maxFrameSpeed { + (self.getAnimation(_animationSelected)).setValue(frameSpeed+frameSpeedStep, forKey: AnimSpeed) + } + } + func decreaseSpeed() { + let frameSpeed: Int = (self.getAnimation(_animationSelected)).objectForKey(AnimSpeed) as! Int + if frameSpeed > minFrameSpeed { + (self.getAnimation(_animationSelected)).setValue(frameSpeed-frameSpeedStep, forKey: AnimSpeed) + } + } + + func gotoLastFrame() { + self.setAnimationFrameID(self.getAnimationFrameCount()) + } + func gotoFirstFrame() { + self.setAnimationFrameID(1) + } + func gotoNextFrame() { + if self.getAnimationFrameID() < self.getAnimationFrameCount() { + self.setAnimationFrameID(self.getAnimationFrameID()+1) + } + } + func gotoPrevFrame() { + if self.getAnimationFrameID() > 1 { + self.setAnimationFrameID(self.getAnimationFrameID()-1) + } + } + + + func getMinSendDelay() -> (NSTimeInterval) { + return _minSendDelay + } + + func getAnimData() -> (UnsafePointer) { + let myData: NSMutableData = (self.getAnimation(_animationSelected)).objectForKey(AnimFrames) as! NSMutableData + let byteArray = UnsafePointer(myData.bytes) + return byteArray + } + + func setLEDColor(color: UInt8, led: Int) { + var myByte: [UInt8] = [color] + let myData: NSMutableData = (self.getAnimation(_animationSelected)).objectForKey(AnimFrames) as! NSMutableData + myData.replaceBytesInRange(NSMakeRange(((self.getAnimationFrameID()-1)*64)+led, 1), withBytes: myByte) + } + + func clearLEDColor() { + var myByte: [UInt8] = [255] + let myData: NSMutableData = (self.getAnimation(_animationSelected)).objectForKey(AnimFrames) as! NSMutableData + myData.replaceBytesInRange(NSMakeRange((self.getAnimationFrameID()-1)*64, 64), withBytes: _emptyFrame) + } + +} diff --git a/Cube4Fun/AnimationsController.swift b/Cube4Fun/AnimationsController.swift index d2b67ac..5797b32 100644 --- a/Cube4Fun/AnimationsController.swift +++ b/Cube4Fun/AnimationsController.swift @@ -9,7 +9,6 @@ import Cocoa import Foundation - //let _emptyAnimation: NSMutableDictionary = ["AnimName": "Animation1", "AnimKey": "1=anim1", "AnimDur": 1, "AnimSpeed": 500, "AnimFrames": 1] /* @@ -21,48 +20,47 @@ var dataArray: [NSMutableDictionary] = [["AnimName": "Animation1", "AnimKey": "1 ["AnimName": "Animation6", "AnimKey": "1=anim6", "AnimDur": 2, "AnimSpeed": 1000, "AnimFrames": 52]]; */ -var _animationArray: [NSMutableDictionary] = [NSMutableDictionary](); +//var _animationArray: [NSMutableDictionary] = [NSMutableDictionary](); +//var _selectedAnimation: Int = 0; class AnimationsController: NSObject, NSTableViewDataSource, NSTableViewDelegate { @IBOutlet weak var myTableView: NSTableView! - var _selectedRow: Int = -1 - - override func awakeFromNib() { - _animationArray.append(_emptyAnimation) - } - func numberOfRowsInTableView(tableView: NSTableView) -> Int { - let numberOfRows:Int = _animationArray.count + let numberOfRows:Int = __animations.count() // _animationArray.count return numberOfRows } func tableView(tableView: NSTableView, objectValueForTableColumn tableColumn: NSTableColumn?, row: Int) -> AnyObject? { - //println("Display: \(row)") - let object: NSDictionary = _animationArray[row] as NSDictionary + //let object: NSDictionary = __animations.getAnimation(row) //_animationArray[row] as NSDictionary //println(object) let column: String = tableColumn?.identifier as String! if column == "AnimName" { - let value = object.objectForKey(column) as String - return value + return __animations.getAnimationName(row) + //let value = object.objectForKey(column) as String + //return value } if column == "AnimKey" { - let value = object.objectForKey(column) as String - return value + return __animations.getAnimationKey(row) + //let value = object.objectForKey(column) as String + //return value } if column == "AnimDur" { - let value = object.objectForKey(column) as Int - return value + return __animations.getAnimationDuration(row) + //let value = object.objectForKey(column) as Int + //return value } if column == "AnimSpeed" { - let value = object.objectForKey(column) as Int - return value + return __animations.getAnimationSpeed(row) + //let value = object.objectForKey(column) as Int + //return value } if column == "AnimFrames" { - let value = object.objectForKey(column) as Int - return value + return __animations.getAnimationFrameCount(row) + //let value = object.objectForKey(column) as Int + //return value } return column @@ -70,8 +68,15 @@ class AnimationsController: NSObject, NSTableViewDataSource, NSTableViewDelegate func tableViewSelectionDidChange(notification: NSNotification) { - let view: NSTableView = notification.object as NSTableView - _selectedRow = view.selectedRow + let view: NSTableView = notification.object as! NSTableView + __animations.setSelectedAnimationID(view.selectedRow) + + _gameView.resetView() + //let myCubeController: GameViewController = _animationsWindow.contentViewController as! GameViewController + //let myCubeView: GameView = myCubeController.view as! GameView + //myCubeView.resetView() + + //_selectedAnimation = view.selectedRow //println("klicked \(view.selectedRow)") } @@ -80,54 +85,54 @@ class AnimationsController: NSObject, NSTableViewDataSource, NSTableViewDelegate let column: String = tableColumn?.identifier as String! //println("Object: \(object) Key: \((tableColumn?.identifier)!)" ) - let value = object! as NSString + let value = object! as! NSString if column == "AnimName" { - _animationArray[row].setObject(value, forKey: (tableColumn?.identifier)!) + __animations.setAnimationName(row, value: value as String) + //_animationArray[row].setObject(value, forKey: (tableColumn?.identifier)!) } if column == "AnimKey" { - _animationArray[row].setObject(value, forKey: (tableColumn?.identifier)!) + __animations.setAnimationKey(row, value: value as String) + //_animationArray[row].setObject(value, forKey: (tableColumn?.identifier)!) } if column == "AnimDur" { - _animationArray[row].setObject(value.integerValue, forKey: (tableColumn?.identifier)!) + __animations.setAnimationDuration(row, value: value.integerValue) + //_animationArray[row].setObject(value.integerValue, forKey: (tableColumn?.identifier)!) } if column == "AnimSpeed" { - _animationArray[row].setObject(value.integerValue, forKey: (tableColumn?.identifier)!) - } - if column == "AnimFrames" { - _animationArray[row].setObject(value.integerValue, forKey: (tableColumn?.identifier)!) + __animations.setAnimationSpeed(row, value: value.integerValue) + //_animationArray[row].setObject(value.integerValue, forKey: (tableColumn?.identifier)!) } + + _gameView.resetView() + + //if column == "AnimFrames" { + // _animationArray[row].setObject(value.integerValue, forKey: (tableColumn?.identifier)!) + //} } @IBAction func addNewAnimation(sender: AnyObject) { - _animationArray.append(_emptyAnimation) + __animations.addAnimation() myTableView.reloadData() - // println("Adding new Item") } @IBAction func delNewAnimation(sender: AnyObject) { - if ( _selectedRow >= 0 ) { - _animationArray.removeAtIndex(_selectedRow) - myTableView.reloadData() - } -// println("Deleting selected Item") + __animations.deleteSelected() + myTableView.reloadData() } @IBAction func moveUpItem(send: AnyObject) { - if ( _selectedRow > 0 ) { - _animationArray.insert(_animationArray[_selectedRow], atIndex: _selectedRow-1) - _animationArray.removeAtIndex(_selectedRow+1) + if ( __animations.getSelectedAnimationID() > 0 ) { + __animations.moveUpSelected() myTableView.reloadData() - myTableView.selectRowIndexes(NSIndexSet(index: _selectedRow-1), byExtendingSelection: false) -// let save: NSMutableDictionary = dataArray. + myTableView.selectRowIndexes(NSIndexSet(index: __animations.getSelectedAnimationID()-1), byExtendingSelection: false) } } @IBAction func moveDownItem(send: AnyObject) { - if (_selectedRow < _animationArray.count - 1) { - _animationArray.insert(_animationArray[_selectedRow+1], atIndex: _selectedRow) - _animationArray.removeAtIndex(_selectedRow+2) + if (__animations.getSelectedAnimationID() < __animations.count() - 1) { + __animations.moveDownSelected() myTableView.reloadData() - myTableView.selectRowIndexes(NSIndexSet(index: _selectedRow+1), byExtendingSelection: false) + myTableView.selectRowIndexes(NSIndexSet(index: __animations.getSelectedAnimationID()+1), byExtendingSelection: false) } } diff --git a/Cube4Fun/AppDelegate.swift b/Cube4Fun/AppDelegate.swift index b231416..c9064e9 100644 --- a/Cube4Fun/AppDelegate.swift +++ b/Cube4Fun/AppDelegate.swift @@ -9,6 +9,8 @@ import Cocoa var _animationsWindow: NSWindow = NSWindow() +var _cubeWindow: NSWindow = NSWindow() +var __animations: Animations = Animations() @NSApplicationMain class AppDelegate: NSObject, NSApplicationDelegate { @@ -19,6 +21,8 @@ class AppDelegate: NSObject, NSApplicationDelegate { func applicationDidFinishLaunching(aNotification: NSNotification) { // Insert code here to initialize your application _animationsWindow = animationsWindow + _cubeWindow = window + //__animations.initialize() } func applicationShouldTerminate(sender: NSApplication) -> NSApplicationTerminateReply { diff --git a/Cube4Fun/Base.lproj/MainMenu.xib b/Cube4Fun/Base.lproj/MainMenu.xib index 79083ef..847f09a 100644 --- a/Cube4Fun/Base.lproj/MainMenu.xib +++ b/Cube4Fun/Base.lproj/MainMenu.xib @@ -1,8 +1,8 @@ - + - - + + @@ -684,10 +684,10 @@ - + - + @@ -842,7 +842,7 @@ - + diff --git a/Cube4Fun/GameView.swift b/Cube4Fun/GameView.swift index 656f1bb..2bba0b3 100644 --- a/Cube4Fun/GameView.swift +++ b/Cube4Fun/GameView.swift @@ -10,12 +10,20 @@ import SceneKit var lastMousePos: NSPoint = NSPoint() var startAngle: CGFloat = CGFloat() -var klickedColor: Byte = Byte(1) +var klickedColor: UInt8 = UInt8(1) let relativeBarPosition: CGFloat = 500.0 class GameView: SCNView { + func resetView() { + // goto first frame + self.firstButtonPressed() + + // Update speed + self.updateSpeedText() + } + func updateButtonVisibility() { // init var nextFrame = false; @@ -26,7 +34,7 @@ class GameView: SCNView { // first Frame, only one Frame // -> no button visible - if myFrameCount == 1 && myMaxFrameCount == 1 { + if __animations.getAnimationFrameID() == 1 && __animations.getAnimationFrameCount() == 1 { nextFrame = false; lastFrame = false; prevFrame = false; @@ -35,7 +43,7 @@ class GameView: SCNView { } // first Frame, second exists. - if myFrameCount == 1 && myMaxFrameCount > 1 { + if __animations.getAnimationFrameID() == 1 && __animations.getAnimationFrameCount() > 1 { // Visible: nextFrame = true; lastFrame = true; @@ -46,7 +54,7 @@ class GameView: SCNView { } // previous Frame exists, no more Frames - if myFrameCount > 1 && myFrameCount == myMaxFrameCount { + if __animations.getAnimationFrameID() > 1 && __animations.getAnimationFrameID() == __animations.getAnimationFrameCount() { // Visible: prevFrame = true; firstFrame = true; @@ -57,7 +65,7 @@ class GameView: SCNView { } // previous Frame exists and next Frame exists { - if myFrameCount > 1 && myFrameCount < myMaxFrameCount { + if __animations.getAnimationFrameID() > 1 && __animations.getAnimationFrameID() < __animations.getAnimationFrameCount() { // Visible: prevFrame = true; firstFrame = true; @@ -68,7 +76,7 @@ class GameView: SCNView { if let rootNode = self.scene?.rootNode { for childNode in rootNode.childNodes { - let buttonNode: SCNNode = childNode as SCNNode + let buttonNode: SCNNode = childNode as! SCNNode if buttonNode.name == "myNextFrameButton" { buttonNode.hidden = !nextFrame; } @@ -85,8 +93,8 @@ class GameView: SCNView { buttonNode.hidden = !delFrame } if buttonNode.name == "myFrameText" { - let geometry:SCNText = buttonNode.geometry as SCNText - geometry.string = "Frame: \(myFrameCount)/\(myMaxFrameCount)" + let geometry:SCNText = buttonNode.geometry as! SCNText + geometry.string = "Frame: \(__animations.getAnimationFrameID())/\(__animations.getAnimationFrameCount())" } } @@ -97,7 +105,8 @@ class GameView: SCNView { func updateLEDFrame() { // get actuall frame data - let data : UnsafePointer = UnsafePointer(myFrames.mutableBytes) +// let data : UnsafePointer = UnsafePointer(myFrames.mutableBytes) + let data = __animations.getAnimData() //NSMutableData if let rootNode = self.scene?.rootNode { if let cubeNode = rootNode.childNodeWithName("cubeNode", recursively: true) { @@ -108,8 +117,8 @@ class GameView: SCNView { let ledID: Int = Int(name.integerValue) if let material: SCNMaterial = geometry.firstMaterial { var color: NSColor = NSColor() - let colorPosition: Int = ((myFrameCount-1)*64) + ledID - let savedColor: Byte = data[colorPosition] + let colorPosition: Int = ((__animations.getAnimationFrameID()-1)*64) + ledID + let savedColor: UInt8 = data[colorPosition] if data[colorPosition] == 255 { color = NSColor.grayColor() }else{ @@ -130,13 +139,15 @@ class GameView: SCNView { func plusButtonPressed() { // Extend the data array with one frame - myFrames.appendBytes(emptyFrame, length: 64) + //myFrames.appendBytes(emptyFrame, length: 64) + __animations.addFrame() // Add frame - myMaxFrameCount++; + //myMaxFrameCount++; // Goto new frame - myFrameCount = myMaxFrameCount; + //myFrameCount = __animations.getAnimationFrameCount(); + __animations.gotoLastFrame() // Update LEDs updateLEDFrame() @@ -150,21 +161,24 @@ class GameView: SCNView { // TODO! // Remove frame - if myMaxFrameCount > 1 { - myMaxFrameCount--; - } - if myFrameCount > 1 { - myFrameCount--; - } + __animations.removeFrame() +// if __animations.getAnimationFrameCount() > 1 { +// myMaxFrameCount--; +// } +// if myFrameCount > 1 { +// myFrameCount--; +// } // Update control button visibility updateButtonVisibility() } func prevButtonPressed() { - if myFrameCount > 1 { - myFrameCount-- - } +// if myFrameCount > 1 { +// myFrameCount-- +// } + __animations.gotoPrevFrame() + // Update LEDs updateLEDFrame() @@ -173,9 +187,10 @@ class GameView: SCNView { } func nextButtonPressed() { - if myFrameCount < myMaxFrameCount { - myFrameCount++ - } +// if myFrameCount < myMaxFrameCount { +// myFrameCount++ +// } + __animations.gotoNextFrame() // Update LEDs updateLEDFrame() @@ -185,7 +200,8 @@ class GameView: SCNView { } func firstButtonPressed() { - myFrameCount = 1; + //myFrameCount = 1; + __animations.gotoFirstFrame() // Update LEDs updateLEDFrame() @@ -195,7 +211,7 @@ class GameView: SCNView { } func lastButtonPressed() { - myFrameCount = myMaxFrameCount + __animations.gotoLastFrame() // Update LEDs updateLEDFrame() @@ -205,27 +221,29 @@ class GameView: SCNView { } func plusSpeedButtonPressed() { - if ( _playSendDelay <= 3 ) { // 3 seconds slowest fps - _playSendDelay = _playSendDelay + 0.1 + __animations.increaseSpeed() +// if ( _playSendDelay <= 3 ) { // 3 seconds slowest fps +// _playSendDelay = _playSendDelay + 0.1 updateSpeedText() - } +// } } func minusSpeedButtonPressed() { - println(_playSendDelay) - if ( _playSendDelay > 0.2 ) { // 100ms fastest fps - _playSendDelay = _playSendDelay - 0.1 + //println(_playSendDelay) + __animations.decreaseSpeed() +// if ( _playSendDelay > 0.2 ) { // 100ms fastest fps +// _playSendDelay = _playSendDelay - 0.1 updateSpeedText() - } +// } } func updateSpeedText() { if let rootNode = self.scene?.rootNode { for childNode in rootNode.childNodes { - let buttonNode: SCNNode = childNode as SCNNode + let buttonNode: SCNNode = childNode as! SCNNode if buttonNode.name == "mySpeedText" { - let geometry:SCNText = buttonNode.geometry as SCNText - geometry.string = "Speed: \(Int(_playSendDelay*1000)) ms" + let geometry:SCNText = buttonNode.geometry as! SCNText + geometry.string = "Speed: \(__animations.animationSpeedInt()) ms" } } @@ -272,14 +290,14 @@ class GameView: SCNView { if let geom = node.geometry { if let name:NSString = geom.name { if name.integerValue >= 0 && name.integerValue < 64 { // LED lamps - let color: NSColor = geom.firstMaterial?.diffuse.contents as NSColor + let color: NSColor = geom.firstMaterial?.diffuse.contents as! NSColor if color != NSColor.grayColor() { // Make sure we are in range of 0...255 let ledColor = (color.hueComponent * 255) % 255 if ( ledColor >= 0 && ledColor < 255 ) { - klickedColor = Byte(ledColor) + klickedColor = UInt8(ledColor) } - klickedColor = Byte (color.hueComponent * 255) + klickedColor = UInt8 (color.hueComponent * 255) moveArrows(Int(klickedColor)) //println(klickedColor) } @@ -314,7 +332,7 @@ class GameView: SCNView { if clickedNode.name == "myBox" { anim = false } - if clickedNode.name == "myPlayButton" && myMaxFrameCount > 1 { + if clickedNode.name == "myPlayButton" && __animations.getAnimationFrameCount() > 1 { playButtonPressed() anim = false } @@ -357,7 +375,7 @@ class GameView: SCNView { if colorInt > 253 { klickedColor = 253 // Maximum value }else{ - klickedColor = Byte(colorInt) + klickedColor = UInt8(colorInt) println(klickedColor) } } @@ -376,11 +394,11 @@ class GameView: SCNView { if let node = result.node { if let geom = node.geometry { if let name:NSString = geom.name { - let myGeometry:SCNText = self.scene!.rootNode.childNodeWithName("myDescr", recursively: true)?.geometry as SCNText + let myGeometry:SCNText = self.scene!.rootNode.childNodeWithName("myDescr", recursively: true)?.geometry as! SCNText // Show touched led myGeometry.string = name // Check for previously color - let prevColor = geom.firstMaterial?.diffuse.contents as NSColor + let prevColor = geom.firstMaterial?.diffuse.contents as! NSColor if prevColor != NSColor.grayColor() { geom.firstMaterial?.diffuse.contents = NSColor.grayColor() ledColorOn = false @@ -443,13 +461,14 @@ class GameView: SCNView { SCNTransaction.commit() // Update the LED frame - var myByte: [Byte] + var myByte: UInt8 if ledColorOn { - myByte = [klickedColor] + myByte = klickedColor }else{ - myByte = [255] // Off + myByte = 255 // Off } - myFrames.replaceBytesInRange(NSMakeRange(((myFrameCount-1)*64)+ledPressed, 1), withBytes: myByte) + __animations.setLEDColor(myByte, led: ledPressed) + //myFrames.replaceBytesInRange(NSMakeRange(((myFrameCount-1)*64)+ledPressed, 1), withBytes: myByte) } @@ -518,7 +537,8 @@ class GameView: SCNView { break; case 17: // t - Key // Reset the frame color on the Cube - myFrames.replaceBytesInRange(NSMakeRange(myFrameCount-1, 64), withBytes: emptyFrame) + //myFrames.replaceBytesInRange(NSMakeRange(myFrameCount-1, 64), withBytes: emptyFrame) + __animations.clearLEDColor() // Reset the frame color in 3D if let rootNode = self.scene?.rootNode { diff --git a/Cube4Fun/GameViewController.swift b/Cube4Fun/GameViewController.swift index d13a7bb..40b3441 100644 --- a/Cube4Fun/GameViewController.swift +++ b/Cube4Fun/GameViewController.swift @@ -9,7 +9,7 @@ import SceneKit import QuartzCore - +/* var myFrameCount: UInt32 = 1; var myMaxFrameCount: UInt32 = 1; var myFrames: NSMutableData = NSMutableData() // == byte[] array @@ -33,12 +33,15 @@ let emptyFrame: [Byte] = [ 255,255,255,255, 255,255,255,255] -var _previousUpdateTime: NSTimeInterval = NSTimeInterval() -var _deltaTime: NSTimeInterval = NSTimeInterval() let _minSendDelay: NSTimeInterval = 0.200 // 200 milliseconds let _frameSendDelay: NSTimeInterval = 0.2 // one second var _playSendDelay: NSTimeInterval = 0.5 // 500 milliseconds as default +*/ + +var _previousUpdateTime: NSTimeInterval = NSTimeInterval() +var _deltaTime: NSTimeInterval = NSTimeInterval() var _playAllFrames = false +var _gameView: GameView = GameView(); class GameViewController: NSViewController { // SCNSceneRendererDelegate @@ -73,18 +76,18 @@ class GameViewController: NSViewController { // SCNSceneRendererDelegate //var ms = Int((time % 1) * 1000) if ( _playAllFrames ) { - if ( _deltaTime >= _playSendDelay ){ - if myFrameCount >= myMaxFrameCount { + if ( _deltaTime >= __animations.animationSpeedFloat() ){ + if (__animations.getAnimationFrameID() >= __animations.getAnimationFrameCount()) { self.gameView!.firstButtonPressed() }else{ self.gameView!.nextButtonPressed() } - CubeNetworkObj.updateFrame(UnsafePointer(myFrames.bytes), count: myFrameCount) + CubeNetworkObj.updateFrame(__animations.getAnimData(), count: UInt32(__animations.getAnimationFrameID())) _previousUpdateTime = time; } }else{ - if ( _deltaTime >= _minSendDelay ) { - CubeNetworkObj.updateFrame(UnsafePointer(myFrames.bytes), count: myFrameCount) + if ( _deltaTime >= __animations.getMinSendDelay() ) { + CubeNetworkObj.updateFrame(__animations.getAnimData(), count: UInt32(__animations.getAnimationFrameID())) //println("SendFrame: \(_deltaTime)") _previousUpdateTime = time; } @@ -94,18 +97,19 @@ class GameViewController: NSViewController { // SCNSceneRendererDelegate override func awakeFromNib(){ + _gameView = gameView; //NSTimer.scheduledTimerWithTimeInterval(_frameSendDelay, invocation: CubeNetworkObj.initObjects(), repeats: true) // CubeNetworkObj.initObjects(); // Init first frame - myFrames = NSMutableData(bytes: emptyFrame, length: 64) - myFrameCount = 1 +// myFrames = NSMutableData(bytes: emptyFrame, length: 64) +// myFrameCount = 1 // Open connection to the LED cube CubeNetworkObj.openConnection() // Fallback timer if nothing render at the moment - NSTimer.scheduledTimerWithTimeInterval(_frameSendDelay, target: self, selector: Selector("sendFrame"), userInfo: nil, repeats: true) + NSTimer.scheduledTimerWithTimeInterval(__animations.getMinSendDelay(), target: self, selector: Selector("sendFrame"), userInfo: nil, repeats: true) diff --git a/Cube4Fun/Images.xcassets/AppIcon.appiconset/Contents.json b/Cube4Fun/Images.xcassets/AppIcon.appiconset/Contents.json index 66257b0..4ae3a01 100644 --- a/Cube4Fun/Images.xcassets/AppIcon.appiconset/Contents.json +++ b/Cube4Fun/Images.xcassets/AppIcon.appiconset/Contents.json @@ -3,43 +3,43 @@ { "size" : "16x16", "idiom" : "mac", - "filename" : "Cube4Fun-Icon-16.png", + "filename" : "Cube6-16j.png", "scale" : "1x" }, { "size" : "16x16", "idiom" : "mac", - "filename" : "Cube4Fun-Icon-32.png", + "filename" : "Cube6-32j-1.png", "scale" : "2x" }, { "size" : "32x32", "idiom" : "mac", - "filename" : "Cube4Fun-Icon-32-1.png", + "filename" : "Cube6-32j.png", "scale" : "1x" }, { "size" : "32x32", "idiom" : "mac", - "filename" : "Cube4Fun-Icon-64.png", + "filename" : "Cube6-64j.png", "scale" : "2x" }, { "size" : "128x128", "idiom" : "mac", - "filename" : "Cube4Fun-Icon-128.png", + "filename" : "Cube6-128j.png", "scale" : "1x" }, { "size" : "128x128", "idiom" : "mac", - "filename" : "Cube4Fun-Icon-256.png", + "filename" : "Cube6-256j-1.png", "scale" : "2x" }, { "size" : "256x256", "idiom" : "mac", - "filename" : "Cube4Fun-Icon-256-1.png", + "filename" : "Cube6-256j.png", "scale" : "1x" }, { diff --git a/Cube4Fun/Images.xcassets/AppIcon.appiconset/Cube6-128j.png b/Cube4Fun/Images.xcassets/AppIcon.appiconset/Cube6-128j.png new file mode 100644 index 0000000..01c096e Binary files /dev/null and b/Cube4Fun/Images.xcassets/AppIcon.appiconset/Cube6-128j.png differ diff --git a/Cube4Fun/Images.xcassets/AppIcon.appiconset/Cube6-16j.png b/Cube4Fun/Images.xcassets/AppIcon.appiconset/Cube6-16j.png new file mode 100644 index 0000000..0cefcf4 Binary files /dev/null and b/Cube4Fun/Images.xcassets/AppIcon.appiconset/Cube6-16j.png differ diff --git a/Cube4Fun/Images.xcassets/AppIcon.appiconset/Cube6-256j-1.png b/Cube4Fun/Images.xcassets/AppIcon.appiconset/Cube6-256j-1.png new file mode 100644 index 0000000..f2242de Binary files /dev/null and b/Cube4Fun/Images.xcassets/AppIcon.appiconset/Cube6-256j-1.png differ diff --git a/Cube4Fun/Images.xcassets/AppIcon.appiconset/Cube6-256j.png b/Cube4Fun/Images.xcassets/AppIcon.appiconset/Cube6-256j.png new file mode 100644 index 0000000..f2242de Binary files /dev/null and b/Cube4Fun/Images.xcassets/AppIcon.appiconset/Cube6-256j.png differ diff --git a/Cube4Fun/Images.xcassets/AppIcon.appiconset/Cube6-32j-1.png b/Cube4Fun/Images.xcassets/AppIcon.appiconset/Cube6-32j-1.png new file mode 100644 index 0000000..d688034 Binary files /dev/null and b/Cube4Fun/Images.xcassets/AppIcon.appiconset/Cube6-32j-1.png differ diff --git a/Cube4Fun/Images.xcassets/AppIcon.appiconset/Cube6-32j.png b/Cube4Fun/Images.xcassets/AppIcon.appiconset/Cube6-32j.png new file mode 100644 index 0000000..d688034 Binary files /dev/null and b/Cube4Fun/Images.xcassets/AppIcon.appiconset/Cube6-32j.png differ diff --git a/Cube4Fun/Images.xcassets/AppIcon.appiconset/Cube6-64j.png b/Cube4Fun/Images.xcassets/AppIcon.appiconset/Cube6-64j.png new file mode 100644 index 0000000..3b3e0a3 Binary files /dev/null and b/Cube4Fun/Images.xcassets/AppIcon.appiconset/Cube6-64j.png differ diff --git a/Cube4Fun/PrimitivesScene.swift b/Cube4Fun/PrimitivesScene.swift index a1b3ffb..228ae63 100644 --- a/Cube4Fun/PrimitivesScene.swift +++ b/Cube4Fun/PrimitivesScene.swift @@ -31,7 +31,7 @@ class PrimitivesScene: SCNScene { pauseImageNode.name = "myPauseButton" pauseImageNode.position = SCNVector3(x:0, y:14, z:0) pauseImageNode.hidden = true - if myFrameCount == 1 && myMaxFrameCount == 1 { + if __animations.getAnimationFrameID() == 1 && __animations.getAnimationFrameCount() == 1 { pauseImageNode.hidden = true } self.rootNode.addChildNode(pauseImageNode) @@ -42,7 +42,7 @@ class PrimitivesScene: SCNScene { let nextFrameImageNode = SCNNode(geometry: nextFrameImage) nextFrameImageNode.name = "myNextFrameButton" nextFrameImageNode.position = SCNVector3(x:2, y:14, z:0) - if myFrameCount == 1 && myMaxFrameCount == 1 { + if __animations.getAnimationFrameID() == 1 && __animations.getAnimationFrameCount() == 1 { nextFrameImageNode.hidden = true } self.rootNode.addChildNode(nextFrameImageNode) @@ -53,7 +53,7 @@ class PrimitivesScene: SCNScene { let prevFrameImageNode = SCNNode(geometry: prevFrameImage) prevFrameImageNode.name = "myPrevFrameButton" prevFrameImageNode.position = SCNVector3(x:-2, y:14, z:0) - if myFrameCount == 1 { + if __animations.getAnimationFrameID() == 1 { prevFrameImageNode.hidden = true } self.rootNode.addChildNode(prevFrameImageNode) @@ -64,7 +64,7 @@ class PrimitivesScene: SCNScene { let startFrameImageNode = SCNNode(geometry: startFrameImage) startFrameImageNode.name = "myStartFrameButton" startFrameImageNode.position = SCNVector3(x:-5, y:14, z:0) - if myFrameCount == 1 { + if __animations.getAnimationFrameID() == 1 { startFrameImageNode.hidden = true } self.rootNode.addChildNode(startFrameImageNode) @@ -75,7 +75,7 @@ class PrimitivesScene: SCNScene { let lastFrameImageNode = SCNNode(geometry: lastFrameImage) lastFrameImageNode.name = "myLastFrameButton" lastFrameImageNode.position = SCNVector3(x:5, y:14, z:0) - if myFrameCount == myMaxFrameCount { + if __animations.getAnimationFrameID() == __animations.getAnimationFrameCount() { lastFrameImageNode.hidden = true } self.rootNode.addChildNode(lastFrameImageNode) @@ -84,7 +84,7 @@ class PrimitivesScene: SCNScene { func createSpeedButtons() { // Frame - let textSpeed = SCNText(string: "Speed: \(Int(_playSendDelay*1000)) ms", extrusionDepth: 0) + let textSpeed = SCNText(string: "Speed: \(__animations.animationSpeedInt()) ms", extrusionDepth: 0) textSpeed.font = NSFont(name: "Arial", size: 1.2) let textSpeedNode = SCNNode(geometry: textSpeed) textSpeedNode.name = "mySpeedText" @@ -109,7 +109,7 @@ class PrimitivesScene: SCNScene { } func createFrameButtons() { - let textFrame = SCNText(string: "Frame: \(myFrameCount)/\(myMaxFrameCount)", extrusionDepth: 0) + let textFrame = SCNText(string: "Frame: \(__animations.getAnimationFrameID())/\(__animations.getAnimationFrameCount())", extrusionDepth: 0) textFrame.font = NSFont(name: "Arial", size: 1.2) let textFrameNode = SCNNode(geometry: textFrame) textFrameNode.name = "myFrameText" @@ -131,7 +131,7 @@ class PrimitivesScene: SCNScene { delFrameImageNode.name = "myDelFrameButton" delFrameImageNode.position = SCNVector3(x:-18.7, y:12, z:0) // for first frame, there is nothing to delete - if ( myFrameCount == 1 ) { + if ( __animations.getAnimationFrameID() == 1 ) { delFrameImageNode.hidden = true } self.rootNode.addChildNode(delFrameImageNode)