├── .gitignore ├── AppIOS ├── AppDelegate.swift ├── AppIOS.entitlements ├── Base.lproj │ └── LaunchScreen.storyboard ├── GameViewController.swift ├── Info.plist └── SceneDelegate.swift ├── AppMac ├── AppDelegate.swift ├── AppMac.entitlements ├── Base.lproj │ └── Main.storyboard ├── GameNSView.swift ├── GameNSWindow.swift ├── Info.plist ├── NSEvent+KeyCode.swift ├── PlayerMenu.swift └── sounds.txt ├── AppShared ├── AppColor.swift ├── AppConstant.swift ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ ├── 1024.png │ │ ├── 128.png │ │ ├── 16.png │ │ ├── 256-1.png │ │ ├── 256.png │ │ ├── 32-1.png │ │ ├── 32.png │ │ ├── 512-1.png │ │ ├── 512.png │ │ ├── 64.png │ │ ├── Contents.json │ │ ├── Icon.png │ │ ├── icon_20pt.png │ │ ├── icon_20pt@2x-1.png │ │ ├── icon_20pt@2x.png │ │ ├── icon_20pt@3x.png │ │ ├── icon_29pt.png │ │ ├── icon_29pt@2x-1.png │ │ ├── icon_29pt@2x.png │ │ ├── icon_29pt@3x.png │ │ ├── icon_40pt.png │ │ ├── icon_40pt@2x-1.png │ │ ├── icon_40pt@2x.png │ │ ├── icon_40pt@3x.png │ │ ├── icon_60pt@2x.png │ │ ├── icon_60pt@3x.png │ │ ├── icon_76pt.png │ │ ├── icon_76pt@2x.png │ │ └── icon_83.5@2x.png │ ├── Contents.json │ ├── LevelSelector │ │ ├── Contents.json │ │ ├── levelSelector_background.colorset │ │ │ └── Contents.json │ │ └── levelSelector_border.colorset │ │ │ └── Contents.json │ ├── Player │ │ ├── Contents.json │ │ ├── player1_plannedPath.colorset │ │ │ └── Contents.json │ │ ├── player1_snakeBody.colorset │ │ │ └── Contents.json │ │ ├── player1_snakeBody_dead.colorset │ │ │ └── Contents.json │ │ ├── player2_plannedPath.colorset │ │ │ └── Contents.json │ │ ├── player2_snakeBody.colorset │ │ │ └── Contents.json │ │ └── player2_snakeBody_dead.colorset │ │ │ └── Contents.json │ ├── Theme1 │ │ ├── Contents.json │ │ ├── theme1_floor.colorset │ │ │ └── Contents.json │ │ ├── theme1_food.colorset │ │ │ └── Contents.json │ │ └── theme1_wall.colorset │ │ │ └── Contents.json │ ├── exitGameButton_fill.colorset │ │ └── Contents.json │ ├── exitGameButton_text.colorset │ │ └── Contents.json │ ├── ingame_background.colorset │ │ └── Contents.json │ ├── ingame_pauseButton.colorset │ │ └── Contents.json │ └── ingame_pauseButton_image.imageset │ │ ├── Contents.json │ │ ├── PauseButton.png │ │ ├── PauseButton@2x.png │ │ └── PauseButton@3x.png ├── Core │ ├── SystemInfo.swift │ └── VerboseInfoProvider.swift ├── IngameView │ ├── FoodView.swift │ ├── GestureIndicatorView.swift │ ├── IngameGridComputer.swift │ ├── IngameView.swift │ ├── IngameViewModel.swift │ ├── LevelView.swift │ ├── MailButtonView.swift │ ├── MailView.swift │ ├── PauseSheetView.swift │ ├── PlannedPathView.swift │ └── SnakeBodyView.swift ├── RootView │ ├── LevelSelectorDataSource.swift │ ├── LevelSelectorGridComputer.swift │ ├── LevelSelectorView.swift │ ├── LevelSelectorViewModel.swift │ ├── MyContentView.swift │ └── RootView.swift ├── Settings │ ├── SettingPlayerMode.swift │ ├── SettingPlayerRole.swift │ ├── SettingSelectedLevel.swift │ ├── SettingShowPlannedPath.swift │ ├── SettingSoundEffect.swift │ ├── SettingStepMode.swift │ └── SettingStore.swift └── Sounds │ ├── SoundManager.swift │ ├── snake_dies.wav │ ├── snake_eats.wav │ └── snake_step.wav ├── EngineIOS ├── EngineIOS.h └── Info.plist ├── EngineMac ├── EngineMac.h └── Info.plist ├── EngineMacTests ├── Info.plist ├── T1000_Sigmoid.swift ├── T1001_IntVec2.swift ├── T1002_UIntVec2.swift ├── T1003_Array2.swift ├── T1004_BoundingBox.swift ├── T1005_DataSHA1.swift ├── T1006_MeasureTurnCount.swift ├── T1007_SnakeFifo.swift ├── T1008_ValidateDistance.swift ├── T1009_PrettyPrintArray.swift ├── T1010_URLTemporaryFile.swift ├── T1011_Softmax.swift ├── T1100_SeededGenerator.swift ├── T1200_ComputeShortestPath.swift ├── T2000_SnakeHeadDirection.swift ├── T2001_SnakeBodyMovement.swift ├── T2002_SnakeHead.swift ├── T2003_SnakeBody.swift ├── T2004_SnakeBodyAdvancedCreate.swift ├── T2005_SnakePlayerRole.swift ├── T2006_PositionArrayToPath.swift ├── T2007_SnakePlayer.swift ├── T3000_SnakeLevel.swift ├── T3001_SnakeLevel_Cluster.swift ├── T3002_SnakeGameState_Grid.swift ├── T3100_StuckSnakeDetector.swift ├── T3200_SnakeLevelManager.swift ├── T3300_SnakeCollisionDetector.swift ├── T3400_GameEnvironmentInteractive.swift ├── T3400_SnakeGameEnvironmentInteractive.swift ├── T4000_SnakeDatasetBundle.swift ├── T4001_Dataset.swift └── swift-algorithm-club │ ├── GraphTests.swift │ └── SSSPTests.swift ├── EngineShared ├── Bot │ ├── SnakeBot.swift │ ├── SnakeBot1.swift │ ├── SnakeBot4.swift │ ├── SnakeBot5.swift │ ├── SnakeBot6.swift │ ├── SnakeBot7.swift │ ├── SnakeBot8.swift │ ├── SnakeBot8_bias.csv │ ├── SnakeBot8_weight.csv │ └── SnakeBot_MoveForward.swift ├── Common │ ├── Array2.swift │ ├── BoundingBox.swift │ ├── ComputeShortestPath.swift │ ├── Dashboard.swift │ ├── Data+SHA1.swift │ ├── FloatFormatting.swift │ ├── IntVec2+CGPoint.swift │ ├── IntVec2.swift │ ├── Logging.swift │ ├── MeasureAreaSize.swift │ ├── MeasureTurnCount.swift │ ├── OSLogDestination.swift │ ├── PositionArrayToPath.swift │ ├── PrettyPrintArray.swift │ ├── SeededGenerator.swift │ ├── Softmax.swift │ ├── UIntVec2.swift │ ├── URL+temporaryFile.swift │ ├── ValidateDistance.swift │ ├── remap.swift │ ├── sigmoid.swift │ └── swift-algorithm-club │ │ ├── Graph │ │ ├── AdjacencyListGraph.swift │ │ ├── AdjacencyMatrixGraph.swift │ │ ├── Edge.swift │ │ ├── Graph.swift │ │ └── Vertex.swift │ │ └── SSSP │ │ ├── BellmanFord.swift │ │ └── SSSP.swift ├── Dataset │ ├── DatasetCompiler1.swift │ ├── DatasetLoader.swift │ ├── DatasetSaver.swift │ ├── SnakeDataset.bundle │ │ ├── duel0.snakeDataset │ │ ├── duel1.snakeDataset │ │ ├── duel2.snakeDataset │ │ ├── duel3.snakeDataset │ │ ├── duel4.snakeDataset │ │ ├── solo0.snakeDataset │ │ ├── solo1.snakeDataset │ │ ├── solo2.snakeDataset │ │ ├── solo3.snakeDataset │ │ └── solo4.snakeDataset │ ├── SnakeDataset.pb.swift │ ├── SnakeDataset.proto │ ├── SnakeDatasetBundle.swift │ └── readme.md ├── Environment │ ├── GameEnvironment.swift │ ├── GameEnvironmentInteractive.swift │ ├── GameEnvironmentPreview.swift │ ├── GameEnvironmentReplay.swift │ ├── GameEnvironmentSaveDataset.swift │ └── GameHeadless.swift ├── Level │ ├── SnakeLevel+Load.swift │ ├── SnakeLevel.swift │ ├── SnakeLevelBuilder.swift │ ├── SnakeLevelCacheModel.pb.swift │ ├── SnakeLevelCacheModel.proto │ ├── SnakeLevelDistanceMap.swift │ ├── SnakeLevelManager.swift │ ├── SnakeLevel_Cluster.swift │ └── SnakeLevels.bundle │ │ ├── Level 0.cache │ │ ├── Level 0.csv │ │ ├── Level 1.cache │ │ ├── Level 1.csv │ │ ├── Level 10.cache │ │ ├── Level 10.csv │ │ ├── Level 11.cache │ │ ├── Level 11.csv │ │ ├── Level 2.cache │ │ ├── Level 2.csv │ │ ├── Level 3.cache │ │ ├── Level 3.csv │ │ ├── Level 4.cache │ │ ├── Level 4.csv │ │ ├── Level 5.cache │ │ ├── Level 5.csv │ │ ├── Level 6.cache │ │ ├── Level 6.csv │ │ ├── Level 7.cache │ │ ├── Level 7.csv │ │ ├── Level 8.cache │ │ ├── Level 8.csv │ │ ├── Level 9.cache │ │ └── Level 9.csv └── Snake │ ├── SnakeBody.swift │ ├── SnakeBodyAdvancedCreate.swift │ ├── SnakeBodyMovement.swift │ ├── SnakeCauseOfDeath.swift │ ├── SnakeCollisionDetector.swift │ ├── SnakeFifo.swift │ ├── SnakeFoodGenerator.swift │ ├── SnakeGameState+Create.swift │ ├── SnakeGameState+Grid.swift │ ├── SnakeGameState+IsWaitingForHumanInput.swift │ ├── SnakeGameState+PreventHumanCollisions.swift │ ├── SnakeGameState.swift │ ├── SnakeHead.swift │ ├── SnakeHeadDirection.swift │ ├── SnakePlayer.swift │ ├── SnakePlayerRole.swift │ └── StuckSnakeDetector.swift ├── Gemfile ├── Gemfile.lock ├── LICENSE ├── Podfile ├── Podfile.lock ├── Pods ├── Local Podspecs │ ├── SSEventFlow.podspec.json │ ├── SwiftCSV.podspec.json │ ├── SwiftProtobuf.podspec.json │ ├── SwiftyBeaver.podspec.json │ └── SwiftySound.podspec.json ├── Manifest.lock ├── Pods.xcodeproj │ └── project.pbxproj ├── SSEventFlow │ ├── LICENSE │ ├── README.md │ └── SSEventFlow_Framework │ │ └── Classes │ │ └── Flow.swift ├── SwiftCSV │ ├── LICENSE │ ├── README.md │ └── SwiftCSV │ │ ├── CSV.swift │ │ ├── Description.swift │ │ ├── EnumeratedView.swift │ │ ├── NamedView.swift │ │ ├── Parser.swift │ │ ├── ParsingState.swift │ │ └── String+Lines.swift ├── SwiftProtobuf │ ├── LICENSE.txt │ ├── README.md │ └── Sources │ │ └── SwiftProtobuf │ │ ├── AnyMessageStorage.swift │ │ ├── AnyUnpackError.swift │ │ ├── BinaryDecoder.swift │ │ ├── BinaryDecodingError.swift │ │ ├── BinaryDecodingOptions.swift │ │ ├── BinaryDelimited.swift │ │ ├── BinaryEncoder.swift │ │ ├── BinaryEncodingError.swift │ │ ├── BinaryEncodingSizeVisitor.swift │ │ ├── BinaryEncodingVisitor.swift │ │ ├── CustomJSONCodable.swift │ │ ├── Data+Extensions.swift │ │ ├── Decoder.swift │ │ ├── DoubleParser.swift │ │ ├── Enum.swift │ │ ├── ExtensibleMessage.swift │ │ ├── ExtensionFieldValueSet.swift │ │ ├── ExtensionFields.swift │ │ ├── ExtensionMap.swift │ │ ├── FieldTag.swift │ │ ├── FieldTypes.swift │ │ ├── Google_Protobuf_Any+Extensions.swift │ │ ├── Google_Protobuf_Any+Registry.swift │ │ ├── Google_Protobuf_Duration+Extensions.swift │ │ ├── Google_Protobuf_FieldMask+Extensions.swift │ │ ├── Google_Protobuf_ListValue+Extensions.swift │ │ ├── Google_Protobuf_Struct+Extensions.swift │ │ ├── Google_Protobuf_Timestamp+Extensions.swift │ │ ├── Google_Protobuf_Value+Extensions.swift │ │ ├── Google_Protobuf_Wrappers+Extensions.swift │ │ ├── HashVisitor.swift │ │ ├── Internal.swift │ │ ├── JSONDecoder.swift │ │ ├── JSONDecodingError.swift │ │ ├── JSONDecodingOptions.swift │ │ ├── JSONEncoder.swift │ │ ├── JSONEncodingError.swift │ │ ├── JSONEncodingOptions.swift │ │ ├── JSONEncodingVisitor.swift │ │ ├── JSONMapEncodingVisitor.swift │ │ ├── JSONScanner.swift │ │ ├── MathUtils.swift │ │ ├── Message+AnyAdditions.swift │ │ ├── Message+BinaryAdditions.swift │ │ ├── Message+JSONAdditions.swift │ │ ├── Message+JSONArrayAdditions.swift │ │ ├── Message+TextFormatAdditions.swift │ │ ├── Message.swift │ │ ├── MessageExtension.swift │ │ ├── NameMap.swift │ │ ├── ProtoNameProviding.swift │ │ ├── ProtobufAPIVersionCheck.swift │ │ ├── ProtobufMap.swift │ │ ├── SelectiveVisitor.swift │ │ ├── SimpleExtensionMap.swift │ │ ├── StringUtils.swift │ │ ├── TextFormatDecoder.swift │ │ ├── TextFormatDecodingError.swift │ │ ├── TextFormatEncoder.swift │ │ ├── TextFormatEncodingOptions.swift │ │ ├── TextFormatEncodingVisitor.swift │ │ ├── TextFormatScanner.swift │ │ ├── TimeUtils.swift │ │ ├── UnknownStorage.swift │ │ ├── UnsafeBufferPointer+Shims.swift │ │ ├── UnsafeRawPointer+Shims.swift │ │ ├── Varint.swift │ │ ├── Version.swift │ │ ├── Visitor.swift │ │ ├── WireFormat.swift │ │ ├── ZigZag.swift │ │ ├── any.pb.swift │ │ ├── api.pb.swift │ │ ├── descriptor.pb.swift │ │ ├── duration.pb.swift │ │ ├── empty.pb.swift │ │ ├── field_mask.pb.swift │ │ ├── source_context.pb.swift │ │ ├── struct.pb.swift │ │ ├── timestamp.pb.swift │ │ ├── type.pb.swift │ │ └── wrappers.pb.swift ├── SwiftyBeaver │ ├── LICENSE │ ├── README.md │ └── Sources │ │ ├── AES256CBC.swift │ │ ├── Base64.swift │ │ ├── BaseDestination.swift │ │ ├── ConsoleDestination.swift │ │ ├── Extensions.swift │ │ ├── FileDestination.swift │ │ ├── Filter.swift │ │ ├── FilterValidator.swift │ │ ├── GoogleCloudDestination.swift │ │ ├── SBPlatformDestination.swift │ │ └── SwiftyBeaver.swift ├── SwiftySound │ ├── LICENSE │ ├── README.md │ └── Sources │ │ └── Sound.swift └── Target Support Files │ ├── Pods-BasePodsIOS-AppIOS │ ├── Pods-BasePodsIOS-AppIOS-Info.plist │ ├── Pods-BasePodsIOS-AppIOS-acknowledgements.markdown │ ├── Pods-BasePodsIOS-AppIOS-acknowledgements.plist │ ├── Pods-BasePodsIOS-AppIOS-dummy.m │ ├── Pods-BasePodsIOS-AppIOS-frameworks-Debug-input-files.xcfilelist │ ├── Pods-BasePodsIOS-AppIOS-frameworks-Debug-output-files.xcfilelist │ ├── Pods-BasePodsIOS-AppIOS-frameworks-Release-input-files.xcfilelist │ ├── Pods-BasePodsIOS-AppIOS-frameworks-Release-output-files.xcfilelist │ ├── Pods-BasePodsIOS-AppIOS-frameworks.sh │ ├── Pods-BasePodsIOS-AppIOS-umbrella.h │ ├── Pods-BasePodsIOS-AppIOS.debug.xcconfig │ ├── Pods-BasePodsIOS-AppIOS.modulemap │ └── Pods-BasePodsIOS-AppIOS.release.xcconfig │ ├── Pods-BasePodsIOS-EngineIOS │ ├── Pods-BasePodsIOS-EngineIOS-Info.plist │ ├── Pods-BasePodsIOS-EngineIOS-acknowledgements.markdown │ ├── Pods-BasePodsIOS-EngineIOS-acknowledgements.plist │ ├── Pods-BasePodsIOS-EngineIOS-dummy.m │ ├── Pods-BasePodsIOS-EngineIOS-umbrella.h │ ├── Pods-BasePodsIOS-EngineIOS.debug.xcconfig │ ├── Pods-BasePodsIOS-EngineIOS.modulemap │ └── Pods-BasePodsIOS-EngineIOS.release.xcconfig │ ├── Pods-BasePodsMAC-AppMac │ ├── Pods-BasePodsMAC-AppMac-Info.plist │ ├── Pods-BasePodsMAC-AppMac-acknowledgements.markdown │ ├── Pods-BasePodsMAC-AppMac-acknowledgements.plist │ ├── Pods-BasePodsMAC-AppMac-dummy.m │ ├── Pods-BasePodsMAC-AppMac-frameworks-Debug-input-files.xcfilelist │ ├── Pods-BasePodsMAC-AppMac-frameworks-Debug-output-files.xcfilelist │ ├── Pods-BasePodsMAC-AppMac-frameworks-Release-input-files.xcfilelist │ ├── Pods-BasePodsMAC-AppMac-frameworks-Release-output-files.xcfilelist │ ├── Pods-BasePodsMAC-AppMac-frameworks.sh │ ├── Pods-BasePodsMAC-AppMac-umbrella.h │ ├── Pods-BasePodsMAC-AppMac.debug.xcconfig │ ├── Pods-BasePodsMAC-AppMac.modulemap │ └── Pods-BasePodsMAC-AppMac.release.xcconfig │ ├── Pods-BasePodsMAC-EngineMac │ ├── Pods-BasePodsMAC-EngineMac-Info.plist │ ├── Pods-BasePodsMAC-EngineMac-acknowledgements.markdown │ ├── Pods-BasePodsMAC-EngineMac-acknowledgements.plist │ ├── Pods-BasePodsMAC-EngineMac-dummy.m │ ├── Pods-BasePodsMAC-EngineMac-umbrella.h │ ├── Pods-BasePodsMAC-EngineMac.debug.xcconfig │ ├── Pods-BasePodsMAC-EngineMac.modulemap │ └── Pods-BasePodsMAC-EngineMac.release.xcconfig │ ├── Pods-BasePodsMAC-EngineMacTests │ ├── Pods-BasePodsMAC-EngineMacTests-Info.plist │ ├── Pods-BasePodsMAC-EngineMacTests-acknowledgements.markdown │ ├── Pods-BasePodsMAC-EngineMacTests-acknowledgements.plist │ ├── Pods-BasePodsMAC-EngineMacTests-dummy.m │ ├── Pods-BasePodsMAC-EngineMacTests-frameworks-Debug-input-files.xcfilelist │ ├── Pods-BasePodsMAC-EngineMacTests-frameworks-Debug-output-files.xcfilelist │ ├── Pods-BasePodsMAC-EngineMacTests-frameworks-Release-input-files.xcfilelist │ ├── Pods-BasePodsMAC-EngineMacTests-frameworks-Release-output-files.xcfilelist │ ├── Pods-BasePodsMAC-EngineMacTests-frameworks.sh │ ├── Pods-BasePodsMAC-EngineMacTests-umbrella.h │ ├── Pods-BasePodsMAC-EngineMacTests.debug.xcconfig │ ├── Pods-BasePodsMAC-EngineMacTests.modulemap │ └── Pods-BasePodsMAC-EngineMacTests.release.xcconfig │ ├── SSEventFlow-iOS │ ├── SSEventFlow-iOS-Info.plist │ ├── SSEventFlow-iOS-dummy.m │ ├── SSEventFlow-iOS-prefix.pch │ ├── SSEventFlow-iOS-umbrella.h │ ├── SSEventFlow-iOS.modulemap │ └── SSEventFlow-iOS.xcconfig │ ├── SSEventFlow-macOS │ ├── SSEventFlow-macOS-Info.plist │ ├── SSEventFlow-macOS-dummy.m │ ├── SSEventFlow-macOS-prefix.pch │ ├── SSEventFlow-macOS-umbrella.h │ ├── SSEventFlow-macOS.modulemap │ └── SSEventFlow-macOS.xcconfig │ ├── SwiftCSV-iOS │ ├── SwiftCSV-iOS-Info.plist │ ├── SwiftCSV-iOS-dummy.m │ ├── SwiftCSV-iOS-prefix.pch │ ├── SwiftCSV-iOS-umbrella.h │ ├── SwiftCSV-iOS.modulemap │ └── SwiftCSV-iOS.xcconfig │ ├── SwiftCSV-macOS │ ├── SwiftCSV-macOS-Info.plist │ ├── SwiftCSV-macOS-dummy.m │ ├── SwiftCSV-macOS-prefix.pch │ ├── SwiftCSV-macOS-umbrella.h │ ├── SwiftCSV-macOS.modulemap │ └── SwiftCSV-macOS.xcconfig │ ├── SwiftProtobuf-iOS │ ├── SwiftProtobuf-iOS-Info.plist │ ├── SwiftProtobuf-iOS-dummy.m │ ├── SwiftProtobuf-iOS-prefix.pch │ ├── SwiftProtobuf-iOS-umbrella.h │ ├── SwiftProtobuf-iOS.modulemap │ └── SwiftProtobuf-iOS.xcconfig │ ├── SwiftProtobuf-macOS │ ├── SwiftProtobuf-macOS-Info.plist │ ├── SwiftProtobuf-macOS-dummy.m │ ├── SwiftProtobuf-macOS-prefix.pch │ ├── SwiftProtobuf-macOS-umbrella.h │ ├── SwiftProtobuf-macOS.modulemap │ └── SwiftProtobuf-macOS.xcconfig │ ├── SwiftyBeaver-iOS │ ├── SwiftyBeaver-iOS-Info.plist │ ├── SwiftyBeaver-iOS-dummy.m │ ├── SwiftyBeaver-iOS-prefix.pch │ ├── SwiftyBeaver-iOS-umbrella.h │ ├── SwiftyBeaver-iOS.modulemap │ └── SwiftyBeaver-iOS.xcconfig │ ├── SwiftyBeaver-macOS │ ├── SwiftyBeaver-macOS-Info.plist │ ├── SwiftyBeaver-macOS-dummy.m │ ├── SwiftyBeaver-macOS-prefix.pch │ ├── SwiftyBeaver-macOS-umbrella.h │ ├── SwiftyBeaver-macOS.modulemap │ └── SwiftyBeaver-macOS.xcconfig │ ├── SwiftySound-iOS │ ├── SwiftySound-iOS-Info.plist │ ├── SwiftySound-iOS-dummy.m │ ├── SwiftySound-iOS-prefix.pch │ ├── SwiftySound-iOS-umbrella.h │ ├── SwiftySound-iOS.modulemap │ └── SwiftySound-iOS.xcconfig │ └── SwiftySound-macOS │ ├── SwiftySound-macOS-Info.plist │ ├── SwiftySound-macOS-dummy.m │ ├── SwiftySound-macOS-prefix.pch │ ├── SwiftySound-macOS-umbrella.h │ ├── SwiftySound-macOS.modulemap │ └── SwiftySound-macOS.xcconfig ├── SnakeGame.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist └── xcshareddata │ └── xcschemes │ ├── AppIOS.xcscheme │ ├── AppMac.xcscheme │ ├── EngineIOS.xcscheme │ ├── EngineMac.xcscheme │ └── UI Test.xcscheme ├── SnakeGame.xcworkspace ├── contents.xcworkspacedata └── xcshareddata │ └── IDEWorkspaceChecks.plist ├── UI Test ├── Info.plist └── UI_Test.swift ├── fastlane ├── Fastfile ├── README.md ├── Snapfile ├── SnapshotHelper.swift └── report.xml ├── readme.md └── screenshots ├── SwiftSnakeEngine_SinglePlayer.gif ├── SwiftSnakeEngine_TwoPlayers.gif ├── SwiftSnakeEngine_iOS0.png ├── SwiftSnakeEngine_iOS0_Thumb.png ├── SwiftSnakeEngine_iOS1.png ├── SwiftSnakeEngine_iOS1_Thumb.png ├── SwiftSnakeEngine_iOS2.png ├── SwiftSnakeEngine_iOS2_Thumb.png ├── SwiftSnakeEngine_iOS3.png ├── SwiftSnakeEngine_iOS3_Thumb.png ├── SwiftSnakeEngine_macOS4.png ├── SwiftSnakeEngine_macOS4_Thumb.png ├── SwiftSnakeEngine_macOS5.png ├── SwiftSnakeEngine_macOS5_Thumb.png ├── en-US ├── iPad Pro (12.9-inch) (2nd generation)-0Launch.png ├── iPad Pro (12.9-inch) (2nd generation)-1Level0.png ├── iPad Pro (12.9-inch) (2nd generation)-2Level3.png ├── iPad Pro (12.9-inch) (2nd generation)-3Level4.png ├── iPad Pro (12.9-inch) (4th generation)-0Launch.png ├── iPad Pro (12.9-inch) (4th generation)-1Level0.png ├── iPad Pro (12.9-inch) (4th generation)-2Level3.png ├── iPad Pro (12.9-inch) (4th generation)-3Level4.png ├── iPhone 11 Pro Max-0Launch.png ├── iPhone 11 Pro Max-1Level0.png ├── iPhone 11 Pro Max-2Level3.png ├── iPhone 11 Pro Max-3Level4.png ├── iPhone 8 Plus-0Launch.png ├── iPhone 8 Plus-1Level0.png ├── iPhone 8 Plus-2Level3.png └── iPhone 8 Plus-3Level4.png └── screenshots.html /AppIOS/AppIOS.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /AppMac/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // MIT license. Copyright (c) 2020 Simon Strandgaard. All rights reserved. 2 | import Cocoa 3 | import SwiftUI 4 | import EngineMac 5 | 6 | @NSApplicationMain 7 | class AppDelegate: NSObject, NSApplicationDelegate { 8 | @IBOutlet weak var player1Menu: PlayerMenu! 9 | @IBOutlet weak var player2Menu: PlayerMenu! 10 | 11 | var window: NSWindow! 12 | 13 | override init() { 14 | super.init() 15 | LogHelper.setup_mainExecutable() 16 | Dashboard.shared.url = AppConstant.Dashboard.url 17 | SnakeLevelManager.setup() 18 | } 19 | 20 | func applicationDidFinishLaunching(_ aNotification: Notification) { 21 | player1Menu?.configureAsPlayer1() 22 | player2Menu?.configureAsPlayer2() 23 | 24 | if case .develop_runDatasetCompiler(let version) = AppConstant.mode { 25 | switch version { 26 | case 1: 27 | DatasetCompiler1.run() 28 | default: 29 | () 30 | } 31 | NSApp.terminate(self) 32 | return; 33 | } 34 | 35 | window = GameNSWindow.create() 36 | } 37 | 38 | func applicationWillTerminate(_ aNotification: Notification) { 39 | // Insert code here to tear down your application 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /AppMac/AppMac.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.files.user-selected.read-only 8 | 9 | com.apple.security.network.client 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /AppMac/GameNSView.swift: -------------------------------------------------------------------------------- 1 | // MIT license. Copyright (c) 2020 Simon Strandgaard. All rights reserved. 2 | import SwiftUI 3 | import SSEventFlow 4 | 5 | class GameNSView: NSHostingView where Content : View { 6 | required init(rootView: Content) { 7 | super.init(rootView: rootView) 8 | setupTrackingArea() 9 | } 10 | 11 | @objc required dynamic init?(coder aDecoder: NSCoder) { 12 | fatalError("init(coder:) has not been implemented") 13 | } 14 | 15 | /// Workaround: In order to show tooltips while the ingame UI is shown. 16 | /// 17 | /// The `SKScene.mouseMoved()` function doesn't get invoked. I suspect it has to do with I'm using SwiftUI. 18 | /// So I'm now listening for events inside the `NSTrackingArea`. 19 | func setupTrackingArea() { 20 | let options: NSTrackingArea.Options = [.mouseMoved, .activeInKeyWindow, .inVisibleRect] 21 | self.addTrackingArea(NSTrackingArea(rect: .zero, options: options, owner: self, userInfo: nil)) 22 | } 23 | 24 | override func mouseMoved(with event: NSEvent) { 25 | FlowEvent_GameNSView_MouseMoved(nsEvent: event).fire() 26 | } 27 | } 28 | 29 | class FlowEvent_GameNSView_MouseMoved: FlowEvent { 30 | let nsEvent: NSEvent 31 | init(nsEvent: NSEvent) { 32 | self.nsEvent = nsEvent 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /AppMac/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIconFile 10 | 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | Snake 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | $(MARKETING_VERSION) 21 | CFBundleVersion 22 | 1 23 | LSApplicationCategoryType 24 | public.app-category.strategy-games 25 | LSMinimumSystemVersion 26 | $(MACOSX_DEPLOYMENT_TARGET) 27 | NSAppTransportSecurity 28 | 29 | NSAllowsArbitraryLoads 30 | 31 | 32 | NSHumanReadableCopyright 33 | MIT license. Copyright © 2020 Simon Strandgaard. All rights reserved. 34 | NSMainStoryboardFile 35 | Main 36 | NSPrincipalClass 37 | NSApplication 38 | 39 | 40 | -------------------------------------------------------------------------------- /AppMac/NSEvent+KeyCode.swift: -------------------------------------------------------------------------------- 1 | // MIT license. Copyright (c) 2020 Simon Strandgaard. All rights reserved. 2 | import AppKit 3 | 4 | enum NSEvent_KeyCodeEnum: UInt16 { 5 | case letterA = 0 6 | case letterS = 1 7 | case letterD = 2 8 | case letterZ = 6 9 | case letterW = 13 10 | case letterT = 17 11 | case enter = 36 12 | case letterM = 46 13 | case tab = 48 14 | case spacebar = 49 15 | case escape = 53 16 | case arrowLeft = 123 17 | case arrowRight = 124 18 | case arrowDown = 125 19 | case arrowUp = 126 20 | } 21 | 22 | extension NSEvent { 23 | var keyCodeEnum: NSEvent_KeyCodeEnum? { 24 | return NSEvent_KeyCodeEnum(rawValue: self.keyCode) 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /AppMac/sounds.txt: -------------------------------------------------------------------------------- 1 | snake dies 2 | 3 | https://www.leshylabs.com/apps/sfMaker/ 4 | f=944.408,v=1.819,V=5.49,t=1.286,T=0.123,_=-0.134,d=185.047,D=0.246,p=1.067,b=1,r=0.7,s=114,S=7.621,z=Down,g=0.468,l=0.381 5 | 6 | 7 | snake eats 8 | 9 | https://www.leshylabs.com/apps/sfMaker/ 10 | W=8000,f=260.932,v=28.463,V=8.726,t=18.89,T=0.221,_=0.041,d=206.301,D=0.123,p=1.191,a=2.5,A=2.2,b=0.7,r=2.8,s=37,S=238.32,g=0.218,l=0.364 11 | 12 | 13 | snake step 14 | 15 | w=Square,W=22050,f=270.177,v=164.633,V=185.389,t=60.916,T=0.583,_=-0.646,d=70.236,D=0.759,p=1.615,A=0.2,b=0.3,r=1.5,c=-1228,C=17.593,s=35,S=222.853,z=Down,g=0.664,l=0.05,L=0.4 16 | -------------------------------------------------------------------------------- /AppShared/AppColor.swift: -------------------------------------------------------------------------------- 1 | // MIT license. Copyright (c) 2020 Simon Strandgaard. All rights reserved. 2 | import SwiftUI 3 | 4 | enum AppColor: String { 5 | case levelSelector_background 6 | case levelSelector_border 7 | case ingame_background 8 | case ingame_pauseButton 9 | case player1_plannedPath 10 | case player2_plannedPath 11 | case player1_snakeBody 12 | case player2_snakeBody 13 | case player1_snakeBody_dead 14 | case player2_snakeBody_dead 15 | case exitGameButton_fill 16 | case exitGameButton_text 17 | case theme1_wall 18 | case theme1_food 19 | case theme1_floor 20 | } 21 | 22 | extension AppColor { 23 | var color: Color { 24 | return Color(self.rawValue) 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/AppIcon.appiconset/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/AppShared/Assets.xcassets/AppIcon.appiconset/1024.png -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/AppIcon.appiconset/128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/AppShared/Assets.xcassets/AppIcon.appiconset/128.png -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/AppIcon.appiconset/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/AppShared/Assets.xcassets/AppIcon.appiconset/16.png -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/AppIcon.appiconset/256-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/AppShared/Assets.xcassets/AppIcon.appiconset/256-1.png -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/AppIcon.appiconset/256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/AppShared/Assets.xcassets/AppIcon.appiconset/256.png -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/AppIcon.appiconset/32-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/AppShared/Assets.xcassets/AppIcon.appiconset/32-1.png -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/AppIcon.appiconset/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/AppShared/Assets.xcassets/AppIcon.appiconset/32.png -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/AppIcon.appiconset/512-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/AppShared/Assets.xcassets/AppIcon.appiconset/512-1.png -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/AppIcon.appiconset/512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/AppShared/Assets.xcassets/AppIcon.appiconset/512.png -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/AppIcon.appiconset/64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/AppShared/Assets.xcassets/AppIcon.appiconset/64.png -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/AppIcon.appiconset/Icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/AppShared/Assets.xcassets/AppIcon.appiconset/Icon.png -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/AppIcon.appiconset/icon_20pt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/AppShared/Assets.xcassets/AppIcon.appiconset/icon_20pt.png -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/AppIcon.appiconset/icon_20pt@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/AppShared/Assets.xcassets/AppIcon.appiconset/icon_20pt@2x-1.png -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/AppIcon.appiconset/icon_20pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/AppShared/Assets.xcassets/AppIcon.appiconset/icon_20pt@2x.png -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/AppIcon.appiconset/icon_20pt@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/AppShared/Assets.xcassets/AppIcon.appiconset/icon_20pt@3x.png -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/AppIcon.appiconset/icon_29pt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/AppShared/Assets.xcassets/AppIcon.appiconset/icon_29pt.png -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/AppIcon.appiconset/icon_29pt@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/AppShared/Assets.xcassets/AppIcon.appiconset/icon_29pt@2x-1.png -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/AppIcon.appiconset/icon_29pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/AppShared/Assets.xcassets/AppIcon.appiconset/icon_29pt@2x.png -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/AppIcon.appiconset/icon_29pt@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/AppShared/Assets.xcassets/AppIcon.appiconset/icon_29pt@3x.png -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/AppIcon.appiconset/icon_40pt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/AppShared/Assets.xcassets/AppIcon.appiconset/icon_40pt.png -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/AppIcon.appiconset/icon_40pt@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/AppShared/Assets.xcassets/AppIcon.appiconset/icon_40pt@2x-1.png -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/AppIcon.appiconset/icon_40pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/AppShared/Assets.xcassets/AppIcon.appiconset/icon_40pt@2x.png -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/AppIcon.appiconset/icon_40pt@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/AppShared/Assets.xcassets/AppIcon.appiconset/icon_40pt@3x.png -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/AppIcon.appiconset/icon_60pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/AppShared/Assets.xcassets/AppIcon.appiconset/icon_60pt@2x.png -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/AppIcon.appiconset/icon_60pt@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/AppShared/Assets.xcassets/AppIcon.appiconset/icon_60pt@3x.png -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/AppIcon.appiconset/icon_76pt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/AppShared/Assets.xcassets/AppIcon.appiconset/icon_76pt.png -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/AppIcon.appiconset/icon_76pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/AppShared/Assets.xcassets/AppIcon.appiconset/icon_76pt@2x.png -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/AppIcon.appiconset/icon_83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/AppShared/Assets.xcassets/AppIcon.appiconset/icon_83.5@2x.png -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/LevelSelector/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/LevelSelector/levelSelector_background.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "0.931", 9 | "green" : "0.844", 10 | "red" : "0.831" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | }, 15 | { 16 | "appearances" : [ 17 | { 18 | "appearance" : "luminosity", 19 | "value" : "dark" 20 | } 21 | ], 22 | "color" : { 23 | "color-space" : "srgb", 24 | "components" : { 25 | "alpha" : "1.000", 26 | "blue" : "0.145", 27 | "green" : "0.142", 28 | "red" : "0.144" 29 | } 30 | }, 31 | "idiom" : "universal" 32 | } 33 | ], 34 | "info" : { 35 | "author" : "xcode", 36 | "version" : 1 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/LevelSelector/levelSelector_border.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "0.430", 8 | "blue" : "0.548", 9 | "green" : "0.461", 10 | "red" : "0.382" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | }, 15 | { 16 | "appearances" : [ 17 | { 18 | "appearance" : "luminosity", 19 | "value" : "dark" 20 | } 21 | ], 22 | "color" : { 23 | "color-space" : "srgb", 24 | "components" : { 25 | "alpha" : "1.000", 26 | "blue" : "0.528", 27 | "green" : "0.528", 28 | "red" : "0.528" 29 | } 30 | }, 31 | "idiom" : "universal" 32 | } 33 | ], 34 | "info" : { 35 | "author" : "xcode", 36 | "version" : 1 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/Player/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/Player/player1_plannedPath.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "0.900", 8 | "blue" : "0.800", 9 | "green" : "0.300", 10 | "red" : "0.250" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | }, 15 | { 16 | "appearances" : [ 17 | { 18 | "appearance" : "luminosity", 19 | "value" : "dark" 20 | } 21 | ], 22 | "color" : { 23 | "color-space" : "srgb", 24 | "components" : { 25 | "alpha" : "0.845", 26 | "blue" : "0.580", 27 | "green" : "0.080", 28 | "red" : "0.045" 29 | } 30 | }, 31 | "idiom" : "universal" 32 | } 33 | ], 34 | "info" : { 35 | "author" : "xcode", 36 | "version" : 1 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/Player/player1_snakeBody.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "1.000", 9 | "green" : "0.435", 10 | "red" : "0.054" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | }, 15 | { 16 | "appearances" : [ 17 | { 18 | "appearance" : "luminosity", 19 | "value" : "dark" 20 | } 21 | ], 22 | "color" : { 23 | "color-space" : "srgb", 24 | "components" : { 25 | "alpha" : "1.000", 26 | "blue" : "0.821", 27 | "green" : "0.113", 28 | "red" : "0.064" 29 | } 30 | }, 31 | "idiom" : "universal" 32 | } 33 | ], 34 | "info" : { 35 | "author" : "xcode", 36 | "version" : 1 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/Player/player1_snakeBody_dead.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "0.500", 8 | "blue" : "1.000", 9 | "green" : "0.435", 10 | "red" : "0.054" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | }, 15 | { 16 | "appearances" : [ 17 | { 18 | "appearance" : "luminosity", 19 | "value" : "dark" 20 | } 21 | ], 22 | "color" : { 23 | "color-space" : "srgb", 24 | "components" : { 25 | "alpha" : "0.500", 26 | "blue" : "0.821", 27 | "green" : "0.113", 28 | "red" : "0.064" 29 | } 30 | }, 31 | "idiom" : "universal" 32 | } 33 | ], 34 | "info" : { 35 | "author" : "xcode", 36 | "version" : 1 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/Player/player2_plannedPath.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "0.793", 8 | "blue" : "0.051", 9 | "green" : "0.555", 10 | "red" : "0.553" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | }, 15 | { 16 | "appearances" : [ 17 | { 18 | "appearance" : "luminosity", 19 | "value" : "dark" 20 | } 21 | ], 22 | "color" : { 23 | "color-space" : "srgb", 24 | "components" : { 25 | "alpha" : "0.793", 26 | "blue" : "0.039", 27 | "green" : "0.433", 28 | "red" : "0.431" 29 | } 30 | }, 31 | "idiom" : "universal" 32 | } 33 | ], 34 | "info" : { 35 | "author" : "xcode", 36 | "version" : 1 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/Player/player2_snakeBody.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "0.075", 9 | "green" : "0.818", 10 | "red" : "0.815" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | }, 15 | { 16 | "appearances" : [ 17 | { 18 | "appearance" : "luminosity", 19 | "value" : "dark" 20 | } 21 | ], 22 | "color" : { 23 | "color-space" : "srgb", 24 | "components" : { 25 | "alpha" : "1.000", 26 | "blue" : "0.055", 27 | "green" : "0.604", 28 | "red" : "0.602" 29 | } 30 | }, 31 | "idiom" : "universal" 32 | } 33 | ], 34 | "info" : { 35 | "author" : "xcode", 36 | "version" : 1 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/Player/player2_snakeBody_dead.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "0.500", 8 | "blue" : "0.075", 9 | "green" : "0.818", 10 | "red" : "0.815" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | }, 15 | { 16 | "appearances" : [ 17 | { 18 | "appearance" : "luminosity", 19 | "value" : "dark" 20 | } 21 | ], 22 | "color" : { 23 | "color-space" : "srgb", 24 | "components" : { 25 | "alpha" : "0.500", 26 | "blue" : "0.055", 27 | "green" : "0.604", 28 | "red" : "0.602" 29 | } 30 | }, 31 | "idiom" : "universal" 32 | } 33 | ], 34 | "info" : { 35 | "author" : "xcode", 36 | "version" : 1 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/Theme1/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/Theme1/theme1_floor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "0.714", 9 | "green" : "0.647", 10 | "red" : "0.637" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | }, 15 | { 16 | "appearances" : [ 17 | { 18 | "appearance" : "luminosity", 19 | "value" : "dark" 20 | } 21 | ], 22 | "color" : { 23 | "color-space" : "srgb", 24 | "components" : { 25 | "alpha" : "1.000", 26 | "blue" : "0.054", 27 | "green" : "0.004", 28 | "red" : "0.064" 29 | } 30 | }, 31 | "idiom" : "universal" 32 | } 33 | ], 34 | "info" : { 35 | "author" : "xcode", 36 | "version" : 1 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/Theme1/theme1_food.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "extended-srgb", 11 | "components" : { 12 | "red" : "1.000", 13 | "alpha" : "1.000", 14 | "blue" : "0.000", 15 | "green" : "0.000" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/Theme1/theme1_wall.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "0.931", 9 | "green" : "0.844", 10 | "red" : "0.831" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | }, 15 | { 16 | "appearances" : [ 17 | { 18 | "appearance" : "luminosity", 19 | "value" : "dark" 20 | } 21 | ], 22 | "color" : { 23 | "color-space" : "srgb", 24 | "components" : { 25 | "alpha" : "1.000", 26 | "blue" : "0.145", 27 | "green" : "0.142", 28 | "red" : "0.144" 29 | } 30 | }, 31 | "idiom" : "universal" 32 | } 33 | ], 34 | "info" : { 35 | "author" : "xcode", 36 | "version" : 1 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/exitGameButton_fill.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "0.000", 9 | "green" : "0.214", 10 | "red" : "0.840" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | } 15 | ], 16 | "info" : { 17 | "author" : "xcode", 18 | "version" : 1 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/exitGameButton_text.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "0.952", 9 | "green" : "0.889", 10 | "red" : "0.860" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | } 15 | ], 16 | "info" : { 17 | "author" : "xcode", 18 | "version" : 1 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/ingame_background.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "0.931", 9 | "green" : "0.844", 10 | "red" : "0.831" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | }, 15 | { 16 | "appearances" : [ 17 | { 18 | "appearance" : "luminosity", 19 | "value" : "dark" 20 | } 21 | ], 22 | "color" : { 23 | "color-space" : "srgb", 24 | "components" : { 25 | "alpha" : "1.000", 26 | "blue" : "0.145", 27 | "green" : "0.142", 28 | "red" : "0.144" 29 | } 30 | }, 31 | "idiom" : "universal" 32 | } 33 | ], 34 | "info" : { 35 | "author" : "xcode", 36 | "version" : 1 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/ingame_pauseButton.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "0.812", 8 | "blue" : "0.449", 9 | "green" : "0.449", 10 | "red" : "0.449" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | }, 15 | { 16 | "appearances" : [ 17 | { 18 | "appearance" : "luminosity", 19 | "value" : "dark" 20 | } 21 | ], 22 | "color" : { 23 | "color-space" : "srgb", 24 | "components" : { 25 | "alpha" : "0.704", 26 | "blue" : "0.401", 27 | "green" : "0.401", 28 | "red" : "0.401" 29 | } 30 | }, 31 | "idiom" : "universal" 32 | } 33 | ], 34 | "info" : { 35 | "author" : "xcode", 36 | "version" : 1 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/ingame_pauseButton_image.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "PauseButton.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "PauseButton@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "PauseButton@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/ingame_pauseButton_image.imageset/PauseButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/AppShared/Assets.xcassets/ingame_pauseButton_image.imageset/PauseButton.png -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/ingame_pauseButton_image.imageset/PauseButton@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/AppShared/Assets.xcassets/ingame_pauseButton_image.imageset/PauseButton@2x.png -------------------------------------------------------------------------------- /AppShared/Assets.xcassets/ingame_pauseButton_image.imageset/PauseButton@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/AppShared/Assets.xcassets/ingame_pauseButton_image.imageset/PauseButton@3x.png -------------------------------------------------------------------------------- /AppShared/Core/VerboseInfoProvider.swift: -------------------------------------------------------------------------------- 1 | // MIT license. Copyright (c) 2020 Simon Strandgaard. All rights reserved. 2 | 3 | public class VerboseInfoProvider { 4 | public typealias Pair = (String, String) 5 | public var pairs = Array() 6 | 7 | public init() {} 8 | 9 | public func append(_ key: String, _ value: String) { 10 | pairs.append((key, value)) 11 | } 12 | } 13 | 14 | public protocol AcceptsVerboseInfoProvider { 15 | func verboseInfo(_ provider: VerboseInfoProvider) 16 | } 17 | -------------------------------------------------------------------------------- /AppShared/IngameView/MailButtonView.swift: -------------------------------------------------------------------------------- 1 | // MIT license. Copyright (c) 2020 Simon Strandgaard. All rights reserved. 2 | import SwiftUI 3 | import MessageUI 4 | 5 | struct MailButtonView: View { 6 | let dataset_mailAttachmentData: Data 7 | @State var result: Result? = nil 8 | @State var isShowingMailView = false 9 | 10 | var body: some View { 11 | Button(action: { 12 | self.isShowingMailView.toggle() 13 | }) { 14 | Text("Send to developer") 15 | } 16 | .disabled(!MFMailComposeViewController.canSendMail()) 17 | .sheet(isPresented: $isShowingMailView) { 18 | MailView( 19 | result: self.$result, 20 | dataset_mailAttachmentData: self.dataset_mailAttachmentData 21 | ) 22 | } 23 | } 24 | } 25 | 26 | struct MailButtonView_Previews: PreviewProvider { 27 | static var previews: some View { 28 | MailButtonView( 29 | dataset_mailAttachmentData: Data() 30 | ) 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /AppShared/RootView/RootView.swift: -------------------------------------------------------------------------------- 1 | // MIT license. Copyright (c) 2020 Simon Strandgaard. All rights reserved. 2 | import SwiftUI 3 | 4 | struct RootView: View { 5 | @State var model: IngameViewModel 6 | @ObservedObject var levelSelectorViewModel: LevelSelectorViewModel 7 | @ObservedObject var settingStore: SettingStore 8 | 9 | var body: some View { 10 | MyContentView(model: model, levelSelectorViewModel: levelSelectorViewModel, visibleContent: .levelSelector) 11 | .environmentObject(settingStore) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /AppShared/Settings/SettingPlayerMode.swift: -------------------------------------------------------------------------------- 1 | // MIT license. Copyright (c) 2020 Simon Strandgaard. All rights reserved. 2 | import Foundation 3 | 4 | #if os(iOS) 5 | import EngineIOS 6 | #elseif os(macOS) 7 | import EngineMac 8 | #else 9 | #error("Unknown OS") 10 | #endif 11 | 12 | enum SettingPlayerModeValue: String { 13 | case twoPlayer_humanBot = "twoPlayer_humanBot" 14 | case singlePlayer_human = "singlePlayer_human" 15 | } 16 | 17 | /// Keeps track of the users preferred `player mode`. 18 | class SettingPlayerMode { 19 | private(set) lazy var value = initialValue() 20 | private let defaults: UserDefaults 21 | private let defaultsKey = "SNAKE_PLAYERMODE" 22 | 23 | init(defaults: UserDefaults = .standard) { 24 | self.defaults = defaults 25 | } 26 | 27 | func set(_ newValue: SettingPlayerModeValue) { 28 | value = newValue 29 | defaults.setValue(newValue.rawValue, forKey: defaultsKey) 30 | } 31 | 32 | private func initialValue() -> SettingPlayerModeValue { 33 | let rawValue: String? = defaults.string(forKey: defaultsKey) 34 | return rawValue.flatMap(SettingPlayerModeValue.init) ?? .twoPlayer_humanBot 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /AppShared/Settings/SettingSelectedLevel.swift: -------------------------------------------------------------------------------- 1 | // MIT license. Copyright (c) 2020 Simon Strandgaard. All rights reserved. 2 | import Foundation 3 | 4 | /// Remembers the selected level, so it's the same the next time the app is launched. 5 | /// 6 | /// IDEA: Use the uuid of level, so that it's the exact same level that is selected. 7 | class SettingSelectedLevel { 8 | private(set) lazy var value = initialValue() 9 | private let defaults: UserDefaults 10 | private let defaultsKey = "SELECTED_LEVEL" 11 | 12 | init(defaults: UserDefaults = .standard) { 13 | self.defaults = defaults 14 | } 15 | 16 | func set(_ newValue: UInt) { 17 | value = newValue 18 | defaults.setValue(Int(newValue), forKey: defaultsKey) 19 | } 20 | 21 | private func initialValue() -> UInt { 22 | let value: Int = defaults.integer(forKey: defaultsKey) 23 | guard value >= 0 else { 24 | return 0 25 | } 26 | return UInt(value) 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /AppShared/Settings/SettingShowPlannedPath.swift: -------------------------------------------------------------------------------- 1 | // MIT license. Copyright (c) 2020 Simon Strandgaard. All rights reserved. 2 | import Foundation 3 | 4 | /// Keeps track of the users preferred `show planned path` mode. 5 | class SettingShowPlannedPath { 6 | private let defaults: UserDefaults 7 | private let defaultsKey = "SNAKE_SHOWPLANNEDPATH" 8 | 9 | init(defaults: UserDefaults = .standard) { 10 | self.defaults = defaults 11 | } 12 | 13 | func set(_ newValue: Bool) { 14 | defaults.set(newValue, forKey: defaultsKey) 15 | } 16 | 17 | /// When this app runs on macOS, the NSMenu for "Show planned path" 18 | /// makes changes directly via NSUserDefaultsController, without going through this class. 19 | var value: Bool { 20 | if defaults.object(forKey: defaultsKey) == nil { 21 | return true 22 | } 23 | return defaults.bool(forKey: defaultsKey) 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /AppShared/Settings/SettingSoundEffect.swift: -------------------------------------------------------------------------------- 1 | // MIT license. Copyright (c) 2020 Simon Strandgaard. All rights reserved. 2 | import Foundation 3 | 4 | /// Keeps track of the users preferred `sound effect mode`, eg. muted or enabled. 5 | class SettingSoundEffect { 6 | private(set) lazy var value = initialValue() 7 | private let defaults: UserDefaults 8 | private let defaultsKey = "SNAKE_SOUNDEFFECTS" 9 | 10 | init(defaults: UserDefaults = .standard) { 11 | self.defaults = defaults 12 | } 13 | 14 | func set(_ newValue: Bool) { 15 | value = newValue 16 | defaults.set(newValue, forKey: defaultsKey) 17 | } 18 | 19 | private func initialValue() -> Bool { 20 | if defaults.object(forKey: defaultsKey) == nil { 21 | return true 22 | } 23 | return defaults.bool(forKey: defaultsKey) 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /AppShared/Settings/SettingStepMode.swift: -------------------------------------------------------------------------------- 1 | // MIT license. Copyright (c) 2020 Simon Strandgaard. All rights reserved. 2 | import Foundation 3 | 4 | #if os(iOS) 5 | import EngineIOS 6 | #elseif os(macOS) 7 | import EngineMac 8 | #else 9 | #error("Unknown OS") 10 | #endif 11 | 12 | enum SettingStepModeValue: String { 13 | case stepManual = "manual" 14 | case stepAuto = "auto" 15 | } 16 | 17 | /// Keeps track of the users preferred `step mode`. 18 | class SettingStepMode { 19 | private(set) lazy var value = initialValue() 20 | private let defaults: UserDefaults 21 | private let defaultsKey = "SNAKE_STEPMODE" 22 | 23 | init(defaults: UserDefaults = .standard) { 24 | self.defaults = defaults 25 | } 26 | 27 | func set(_ newValue: SettingStepModeValue) { 28 | value = newValue 29 | defaults.setValue(newValue.rawValue, forKey: defaultsKey) 30 | } 31 | 32 | private func initialValue() -> SettingStepModeValue { 33 | let rawValue: String? = defaults.string(forKey: defaultsKey) 34 | return rawValue.flatMap(SettingStepModeValue.init) ?? .stepAuto 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /AppShared/Sounds/SoundManager.swift: -------------------------------------------------------------------------------- 1 | // MIT license. Copyright (c) 2020 Simon Strandgaard. All rights reserved. 2 | import SwiftySound 3 | 4 | enum SoundItem: String, CaseIterable { 5 | case snake_dies 6 | case snake_eats 7 | case snake_step 8 | } 9 | 10 | extension SoundItem { 11 | func play() { 12 | SoundManager.shared.playSound(for: self) 13 | } 14 | 15 | fileprivate var url: URL { 16 | guard let url: URL = Bundle.main.url(forResource: self.rawValue, withExtension: "wav") else { 17 | fatalError("Unable to find file for SoundItem. '\(self)'") 18 | } 19 | return url 20 | } 21 | } 22 | 23 | class SoundManager { 24 | static let shared = SoundManager() 25 | 26 | fileprivate let dict: [SoundItem: Sound] 27 | 28 | private init() { 29 | var dict = [SoundItem: Sound]() 30 | for soundItem in SoundItem.allCases { 31 | let url: URL = soundItem.url 32 | guard let sound: Sound = Sound(url: url) else { 33 | fatalError("Unable to create Sound instance for SoundItem. '\(soundItem)'") 34 | } 35 | dict[soundItem] = sound 36 | } 37 | self.dict = dict 38 | } 39 | 40 | fileprivate func playSound(for soundItem: SoundItem) { 41 | Sound.enabled = SettingSoundEffect().value 42 | dict[soundItem]?.play() 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /AppShared/Sounds/snake_dies.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/AppShared/Sounds/snake_dies.wav -------------------------------------------------------------------------------- /AppShared/Sounds/snake_eats.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/AppShared/Sounds/snake_eats.wav -------------------------------------------------------------------------------- /AppShared/Sounds/snake_step.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/AppShared/Sounds/snake_step.wav -------------------------------------------------------------------------------- /EngineIOS/EngineIOS.h: -------------------------------------------------------------------------------- 1 | // MIT license. Copyright (c) 2020 Simon Strandgaard. All rights reserved. 2 | #import 3 | 4 | //! Project version number for EngineIOS. 5 | FOUNDATION_EXPORT double EngineIOSVersionNumber; 6 | 7 | //! Project version string for EngineIOS. 8 | FOUNDATION_EXPORT const unsigned char EngineIOSVersionString[]; 9 | 10 | // In this header, you should import all the public headers of your framework using statements like #import 11 | 12 | 13 | -------------------------------------------------------------------------------- /EngineIOS/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | 22 | 23 | -------------------------------------------------------------------------------- /EngineMac/EngineMac.h: -------------------------------------------------------------------------------- 1 | // MIT license. Copyright (c) 2020 Simon Strandgaard. All rights reserved. 2 | #import 3 | 4 | //! Project version number for EngineMac. 5 | FOUNDATION_EXPORT double EngineMacVersionNumber; 6 | 7 | //! Project version string for EngineMac. 8 | FOUNDATION_EXPORT const unsigned char EngineMacVersionString[]; 9 | 10 | // In this header, you should import all the public headers of your framework using statements like #import 11 | 12 | 13 | -------------------------------------------------------------------------------- /EngineMac/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | NSHumanReadableCopyright 22 | MIT license. Copyright © 2020 Simon Strandgaard. All rights reserved. 23 | 24 | 25 | -------------------------------------------------------------------------------- /EngineMacTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /EngineMacTests/T1000_Sigmoid.swift: -------------------------------------------------------------------------------- 1 | // MIT license. Copyright (c) 2020 Simon Strandgaard. All rights reserved. 2 | import XCTest 3 | @testable import EngineMac 4 | 5 | class T1000_Sigmoid: XCTestCase { 6 | 7 | func test0_sigmoid() { 8 | do { 9 | let input: [Float] = [-2, -1, 0, 1, 2] 10 | let expected: [Float] = [0.12, 0.27, 0.5, 0.73, 0.88] 11 | for i in input.indices { 12 | let actual: Float = sigmoid(input[i]) 13 | XCTAssertEqual(actual, expected[i], accuracy: 0.01) 14 | } 15 | } 16 | do { 17 | let input: [Double] = [-2, -1, 0, 1, 2] 18 | let expected: [Double] = [0.12, 0.27, 0.5, 0.73, 0.88] 19 | for i in input.indices { 20 | let actual: Double = sigmoid(input[i]) 21 | XCTAssertEqual(actual, expected[i], accuracy: 0.01) 22 | } 23 | } 24 | } 25 | 26 | func test1_sigmoidDerived() { 27 | do { 28 | let input: [Float] = [0.1, 0.25, 0.5, 0.75, 0.9] 29 | let expected: [Float] = [0.09, 0.188, 0.25, 0.188, 0.09] 30 | for i in input.indices { 31 | let actual: Float = sigmoidDerived(input[i]) 32 | XCTAssertEqual(actual, expected[i], accuracy: 0.01) 33 | } 34 | } 35 | do { 36 | let input: [Double] = [0.1, 0.25, 0.5, 0.75, 0.9] 37 | let expected: [Double] = [0.09, 0.188, 0.25, 0.188, 0.09] 38 | for i in input.indices { 39 | let actual: Double = sigmoidDerived(input[i]) 40 | XCTAssertEqual(actual, expected[i], accuracy: 0.01) 41 | } 42 | } 43 | } 44 | 45 | } 46 | -------------------------------------------------------------------------------- /EngineMacTests/T1004_BoundingBox.swift: -------------------------------------------------------------------------------- 1 | // MIT license. Copyright (c) 2020 Simon Strandgaard. All rights reserved. 2 | import XCTest 3 | @testable import EngineMac 4 | 5 | class T1004_BoundingBox: XCTestCase { 6 | func test0() { 7 | var bb = BoundingBox(position: IntVec2(x: 1005, y: 3017)) 8 | bb.grow(IntVec2(x: 1000, y: 3000)) 9 | bb.grow(IntVec2(x: 2000, y: 4000)) 10 | XCTAssertEqual(bb.minx, 1000) 11 | XCTAssertEqual(bb.maxx, 2000) 12 | XCTAssertEqual(bb.miny, 3000) 13 | XCTAssertEqual(bb.maxy, 4000) 14 | XCTAssertEqual(bb.midx, 1500) 15 | XCTAssertEqual(bb.midy, 3500) 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /EngineMacTests/T1005_DataSHA1.swift: -------------------------------------------------------------------------------- 1 | // MIT license. Copyright (c) 2020 Simon Strandgaard. All rights reserved. 2 | import XCTest 3 | @testable import EngineMac 4 | 5 | class T1005_DataSHA1: XCTestCase { 6 | func test0() { 7 | let data: Data = "hello".data(using: .utf8)! 8 | let actual: String = data.sha1 9 | XCTAssertEqual(actual, "aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d") 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /EngineMacTests/T1006_MeasureTurnCount.swift: -------------------------------------------------------------------------------- 1 | // MIT license. Copyright (c) 2020 Simon Strandgaard. All rights reserved. 2 | import XCTest 3 | @testable import EngineMac 4 | 5 | class T1006_MeasureTurnCount: XCTestCase { 6 | 7 | func test0() { 8 | let positions: [IntVec2] = [ 9 | IntVec2(x: 5, y: 10), 10 | IntVec2(x: 6, y: 10), 11 | IntVec2(x: 7, y: 10), 12 | IntVec2(x: 8, y: 10), 13 | IntVec2(x: 9, y: 10), 14 | IntVec2(x: 10, y: 10) 15 | ] 16 | let actual: UInt = MeasureTurnCount.count(positions) 17 | XCTAssertEqual(actual, 0) 18 | } 19 | 20 | func test1() { 21 | let positions: [IntVec2] = [ 22 | IntVec2(x: 8, y: 10), 23 | IntVec2(x: 9, y: 10), 24 | IntVec2(x: 10, y: 10), 25 | IntVec2(x: 10, y: 11), 26 | IntVec2(x: 10, y: 12), 27 | IntVec2(x: 10, y: 13) 28 | ] 29 | let actual: UInt = MeasureTurnCount.count(positions) 30 | XCTAssertEqual(actual, 1) 31 | } 32 | 33 | func test2() { 34 | let positions: [IntVec2] = [ 35 | IntVec2(x: 9, y: 10), 36 | IntVec2(x: 10, y: 10), 37 | IntVec2(x: 10, y: 11), 38 | IntVec2(x: 10, y: 12), 39 | IntVec2(x: 11, y: 12) 40 | ] 41 | let actual: UInt = MeasureTurnCount.count(positions) 42 | XCTAssertEqual(actual, 2) 43 | } 44 | 45 | } 46 | -------------------------------------------------------------------------------- /EngineMacTests/T1007_SnakeFifo.swift: -------------------------------------------------------------------------------- 1 | // MIT license. Copyright (c) 2020 Simon Strandgaard. All rights reserved. 2 | import XCTest 3 | @testable import EngineMac 4 | 5 | class T1007_SnakeFifo: XCTestCase { 6 | typealias SnakeFifoString = SnakeFifo 7 | 8 | func test0_equatable() { 9 | var fifo0 = SnakeFifoString() 10 | fifo0.appendAndGrow("a") 11 | fifo0.appendAndGrow("b") 12 | fifo0.appendAndGrow("c") 13 | XCTAssertEqual(fifo0, fifo0) 14 | var fifo1 = SnakeFifoString() 15 | fifo1.appendAndGrow("a") 16 | fifo1.appendAndGrow("b") 17 | XCTAssertNotEqual(fifo0, fifo1) 18 | fifo1.appendAndGrow("c") 19 | XCTAssertEqual(fifo0, fifo1) 20 | fifo1.appendAndGrow("d") 21 | XCTAssertNotEqual(fifo0, fifo1) 22 | } 23 | 24 | func test1_hashable() { 25 | var fifo0 = SnakeFifoString(array: ["a", "b", "c"]) 26 | let fifo1a = SnakeFifoString(array: ["b", "c", "d"]) 27 | let fifo1b = SnakeFifoString(array: ["b", "c", "d"]) 28 | var set0 = Set() 29 | XCTAssertFalse(set0.contains(fifo0)) 30 | XCTAssertFalse(set0.contains(fifo1a)) 31 | XCTAssertFalse(set0.contains(fifo1b)) 32 | set0.insert(fifo0) 33 | set0.insert(fifo1a) 34 | XCTAssertEqual(set0.count, 2) 35 | XCTAssertTrue(set0.contains(fifo0)) 36 | XCTAssertTrue(set0.contains(fifo1a)) 37 | XCTAssertTrue(set0.contains(fifo1b)) 38 | fifo0.append("x") 39 | XCTAssertFalse(set0.contains(fifo0)) 40 | set0.insert(fifo0) 41 | XCTAssertEqual(set0.count, 3) 42 | XCTAssertTrue(set0.contains(fifo0)) 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /EngineMacTests/T1008_ValidateDistance.swift: -------------------------------------------------------------------------------- 1 | // MIT license. Copyright (c) 2020 Simon Strandgaard. All rights reserved. 2 | import XCTest 3 | @testable import EngineMac 4 | 5 | class T1008_ValidateDistance: XCTestCase { 6 | 7 | func test0_manhattanDistanceIsOne() { 8 | do { 9 | let positions: [IntVec2] = [] 10 | XCTAssertTrue(ValidateDistance.distanceIsOne(positions)) 11 | } 12 | do { 13 | let positions: [IntVec2] = [ 14 | IntVec2(x: 100, y: 200) 15 | ] 16 | XCTAssertTrue(ValidateDistance.distanceIsOne(positions)) 17 | } 18 | do { 19 | let positions: [IntVec2] = [ 20 | IntVec2(x: 12, y: 3), 21 | IntVec2(x: 13, y: 3), 22 | IntVec2(x: 13, y: 4) 23 | ] 24 | XCTAssertTrue(ValidateDistance.distanceIsOne(positions)) 25 | } 26 | do { 27 | let positions: [IntVec2] = [ 28 | IntVec2(x: 12, y: 3), 29 | IntVec2(x: 13, y: 3), 30 | IntVec2(x: 13, y: 4), 31 | IntVec2(x: 13, y: 4), 32 | IntVec2(x: 13, y: 5) 33 | ] 34 | XCTAssertFalse(ValidateDistance.distanceIsOne(positions)) 35 | } 36 | do { 37 | let positions: [IntVec2] = [ 38 | IntVec2(x: 10, y: 1), 39 | IntVec2(x: 10, y: 3) 40 | ] 41 | XCTAssertFalse(ValidateDistance.distanceIsOne(positions)) 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /EngineMacTests/T1009_PrettyPrintArray.swift: -------------------------------------------------------------------------------- 1 | // MIT license. Copyright (c) 2020 Simon Strandgaard. All rights reserved. 2 | import XCTest 3 | @testable import EngineMac 4 | 5 | class T1009_PrettyPrintArray: XCTestCase { 6 | 7 | func test0_simple() { 8 | do { 9 | let values: [Int] = [0, 1, 2, 3, 4] 10 | let pretty = PrettyPrintArray.simple 11 | XCTAssertEqual(pretty.format(values), "0,1,2,3,4") 12 | } 13 | do { 14 | let values: [Int] = [0, 1, 2, 3, 4, 5, 6] 15 | let pretty = PrettyPrintArray.simple 16 | XCTAssertEqual(pretty.format(values), "0,1,2,...,4,5,6") 17 | } 18 | } 19 | 20 | func test1_custom() { 21 | let values: [Int] = [ 22 | 0, 1, 2, 3, 4 23 | ] 24 | do { 25 | let pretty = PrettyPrintArray(prefixLength: 3, suffixLength: 3, separator: ",", ellipsis: "...") 26 | XCTAssertEqual(pretty.format(values), "0,1,2,3,4") 27 | } 28 | do { 29 | let pretty = PrettyPrintArray(prefixLength: 2, suffixLength: 2, separator: ",", ellipsis: "...") 30 | XCTAssertEqual(pretty.format(values), "0,1,...,3,4") 31 | } 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /EngineMacTests/T1010_URLTemporaryFile.swift: -------------------------------------------------------------------------------- 1 | // MIT license. Copyright (c) 2020 Simon Strandgaard. All rights reserved. 2 | import XCTest 3 | @testable import EngineMac 4 | 5 | class T1010_URLTemporaryFile: XCTestCase { 6 | func test100_noPrefix_noSuffix_noPathExtension() { 7 | let uuid = UUID() 8 | let url: URL = URL.temporaryFile(prefixes: [], uuid: uuid, suffixes: [], pathExtension: nil) 9 | let s: String = url.lastPathComponent 10 | XCTAssertEqual(s, uuid.uuidString) 11 | } 12 | 13 | func test200_prefix_and_pathExtension() { 14 | let uuid = UUID() 15 | let url: URL = URL.temporaryFile(prefixes: ["snake", "dataset"], uuid: uuid, suffixes: [], pathExtension: "csv") 16 | let s: String = url.lastPathComponent 17 | XCTAssertEqual(s, "snake-dataset-\(uuid).csv") 18 | } 19 | 20 | func test300_suffix() { 21 | let uuid = UUID() 22 | let url: URL = URL.temporaryFile(prefixes: [], uuid: uuid, suffixes: ["replay"], pathExtension: nil) 23 | let s: String = url.lastPathComponent 24 | XCTAssertEqual(s, "\(uuid)-replay") 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /EngineMacTests/T1011_Softmax.swift: -------------------------------------------------------------------------------- 1 | // MIT license. Copyright (c) 2020 Simon Strandgaard. All rights reserved. 2 | import XCTest 3 | @testable import EngineMac 4 | 5 | class T1011_Softmax: XCTestCase { 6 | 7 | func test0_softmax() { 8 | let input: [Float] = [0.6689292,0.2620013,1.0744656,-0.8190495] 9 | let expected: [Float] = [0.29484367,0.19627512,0.44229704,0.06658415] 10 | let actual: [Float] = input.softmax 11 | for i in input.indices { 12 | XCTAssertEqual(actual[i], expected[i], accuracy: 0.01) 13 | } 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /EngineMacTests/T2001_SnakeBodyMovement.swift: -------------------------------------------------------------------------------- 1 | // MIT license. Copyright (c) 2020 Simon Strandgaard. All rights reserved. 2 | import XCTest 3 | @testable import EngineMac 4 | 5 | class T2001_SnakeBodyMovement: XCTestCase { 6 | func test0_comparable() { 7 | let expected: [SnakeBodyMovement] = [.dontMove, .moveCCW, .moveForward, .moveCW] 8 | let actual: [SnakeBodyMovement] = expected.reversed().sorted() 9 | XCTAssertEqual(actual, expected) 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /EngineMacTests/T3200_SnakeLevelManager.swift: -------------------------------------------------------------------------------- 1 | // MIT license. Copyright (c) 2020 Simon Strandgaard. All rights reserved. 2 | import XCTest 3 | @testable import EngineMac 4 | 5 | class T3200_SnakeLevelManager: XCTestCase { 6 | 7 | func test_levelForId() { 8 | let uuid = UUID(uuidString: "cdeeadf2-31c9-48f4-852f-778b58086dd0")! 9 | guard let level: SnakeLevel = SnakeLevelManager.shared.level(id: uuid) else { 10 | XCTFail("Unable to locate level with uuid: '\(uuid)'") 11 | return 12 | } 13 | do { 14 | let body: SnakeBody = level.player1_body 15 | XCTAssertEqual(body.head.position, IntVec2(x: 12, y: 3)) 16 | XCTAssertEqual(body.head.direction, SnakeHeadDirection.right) 17 | XCTAssertEqual(body.length, 9) 18 | } 19 | do { 20 | let body: SnakeBody = level.player2_body 21 | XCTAssertEqual(body.head.position, IntVec2(x: 2, y: 7)) 22 | XCTAssertEqual(body.head.direction, SnakeHeadDirection.left) 23 | XCTAssertEqual(body.length, 9) 24 | } 25 | do { 26 | let foodPosition: UIntVec2 = level.initialFoodPosition 27 | XCTAssertEqual(foodPosition, UIntVec2(x: 13, y: 2)) 28 | } 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /EngineMacTests/T4000_SnakeDatasetBundle.swift: -------------------------------------------------------------------------------- 1 | // MIT license. Copyright (c) 2020 Simon Strandgaard. All rights reserved. 2 | import XCTest 3 | @testable import EngineMac 4 | 5 | class T4000_SnakeDatasetBundle: XCTestCase { 6 | func test100_urlForResource_success() { 7 | let resourceName: String = "solo0.snakeDataset" 8 | let data: Data 9 | do { 10 | let url: URL = try SnakeDatasetBundle.url(forResource: resourceName) 11 | data = try Data(contentsOf: url) 12 | } catch { 13 | XCTFail() 14 | return 15 | } 16 | XCTAssertGreaterThan(data.count, 10) 17 | } 18 | 19 | func test101_urlForResource_error() throws { 20 | let resourceName: String = "nonExistingFilename.snakeDataset" 21 | do { 22 | _ = try SnakeDatasetBundle.url(forResource: resourceName) 23 | XCTFail() 24 | } catch SnakeDatasetBundleError.custom { 25 | // success 26 | } catch { 27 | XCTFail() 28 | } 29 | } 30 | 31 | func test200_urls() { 32 | let urls: [URL] 33 | do { 34 | urls = try SnakeDatasetBundle.urls() 35 | } catch { 36 | XCTFail() 37 | return 38 | } 39 | XCTAssertGreaterThan(urls.count, 5) 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /EngineShared/Bot/SnakeBot8_bias.csv: -------------------------------------------------------------------------------- 1 | bias 2 | 0.03038190 3 | -0.00842890 4 | 0.00143621 5 | -0.02338921 6 | -------------------------------------------------------------------------------- /EngineShared/Bot/SnakeBot_MoveForward.swift: -------------------------------------------------------------------------------- 1 | // MIT license. Copyright (c) 2020 Simon Strandgaard. All rights reserved. 2 | import Foundation 3 | 4 | public class SnakeBot_MoveForward: SnakeBot { 5 | public static var info = SnakeBotInfo( 6 | uuid: "ac009b0e-6d2d-4fe5-8dc5-22e3e7c0177d", 7 | name: "Bot - Always Move Forward" 8 | ) 9 | 10 | required public init() { 11 | } 12 | 13 | public var plannedPath: [IntVec2] { 14 | [] 15 | } 16 | 17 | public var plannedMovement: SnakeBodyMovement { 18 | .moveForward 19 | } 20 | 21 | public func compute(level: SnakeLevel, player: SnakePlayer, oppositePlayer: SnakePlayer, foodPosition: IntVec2?) -> SnakeBot { 22 | self 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /EngineShared/Common/BoundingBox.swift: -------------------------------------------------------------------------------- 1 | // MIT license. Copyright (c) 2020 Simon Strandgaard. All rights reserved. 2 | import Foundation 3 | 4 | public struct BoundingBox { 5 | public var minx: Int32 6 | public var maxx: Int32 7 | public var miny: Int32 8 | public var maxy: Int32 9 | 10 | public init(position: IntVec2) { 11 | self.minx = position.x 12 | self.maxx = position.x 13 | self.miny = position.y 14 | self.maxy = position.y 15 | } 16 | 17 | public mutating func grow(_ position: IntVec2) { 18 | self.minx = min(self.minx, position.x) 19 | self.maxx = max(self.maxx, position.x) 20 | self.miny = min(self.miny, position.y) 21 | self.maxy = max(self.maxy, position.y) 22 | } 23 | 24 | public var midx: Int32 { 25 | (minx + maxx) / 2 26 | } 27 | 28 | public var midy: Int32 { 29 | (miny + maxy) / 2 30 | } 31 | 32 | public func center() -> IntVec2 { 33 | IntVec2(x: self.midx, y: self.midy) 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /EngineShared/Common/Data+SHA1.swift: -------------------------------------------------------------------------------- 1 | // MIT license. Copyright (c) 2020 Simon Strandgaard. All rights reserved. 2 | import Foundation 3 | import CryptoKit 4 | 5 | extension Data { 6 | public var sha1: String { 7 | let iterator: Array.Iterator = Insecure.SHA1.hash(data: self).makeIterator() 8 | return iterator.map { String(format: "%02x", $0) }.joined() 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /EngineShared/Common/IntVec2+CGPoint.swift: -------------------------------------------------------------------------------- 1 | // MIT license. Copyright (c) 2020 Simon Strandgaard. All rights reserved. 2 | import CoreGraphics 3 | 4 | extension IntVec2 { 5 | /// Returns a CGPoint initialized with the `x` and `y` coordinates. 6 | public var cgPoint: CGPoint { 7 | return CGPoint(x: Int(self.x), y: Int(self.y)) 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /EngineShared/Common/MeasureAreaSize.swift: -------------------------------------------------------------------------------- 1 | // MIT license. Copyright (c) 2020 Simon Strandgaard. All rights reserved. 2 | import Foundation 3 | 4 | public class MeasureAreaSize { 5 | public class func compute(positionArray: [IntVec2], startPosition: IntVec2) -> UInt { 6 | return compute( 7 | positionSet: Set(positionArray), 8 | startPosition: startPosition 9 | ) 10 | } 11 | 12 | public class func compute(positionSet: Set, startPosition: IntVec2) -> UInt { 13 | var unvisited: Set = positionSet 14 | var fillCount: UInt = 0 15 | 16 | func compute(position: IntVec2) { 17 | guard unvisited.contains(position) else { 18 | return 19 | } 20 | unvisited.remove(position) 21 | fillCount += 1 22 | compute(position: position.offsetBy(dx: -1, dy: 0)) 23 | compute(position: position.offsetBy(dx: 1, dy: 0)) 24 | compute(position: position.offsetBy(dx: 0, dy: -1)) 25 | compute(position: position.offsetBy(dx: 0, dy: 1)) 26 | } 27 | 28 | compute(position: startPosition) 29 | return UInt(fillCount) 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /EngineShared/Common/MeasureTurnCount.swift: -------------------------------------------------------------------------------- 1 | // MIT license. Copyright (c) 2020 Simon Strandgaard. All rights reserved. 2 | import Foundation 3 | 4 | public class MeasureTurnCount { 5 | /// Counts the number of turns that the snake have to make. Lower is better. 6 | public class func count(_ positions: [IntVec2]) -> UInt { 7 | guard positions.count >= 3 else { 8 | return 0 9 | } 10 | var turnCount: UInt = 0 11 | var range = positions.indices 12 | range.removeLast(2) 13 | for index in range { 14 | let a: IntVec2 = positions[index] 15 | let b: IntVec2 = positions[index + 2] 16 | let dx: Int = Int(a.x) - Int(b.x) 17 | let dy: Int = Int(a.y) - Int(b.y) 18 | let distance: Int = dx * dx + dy * dy 19 | if distance != 4 { 20 | turnCount += 1 21 | } 22 | } 23 | return turnCount 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /EngineShared/Common/PositionArrayToPath.swift: -------------------------------------------------------------------------------- 1 | // MIT license. Copyright (c) 2020 Simon Strandgaard. All rights reserved. 2 | 3 | extension Array where Element == IntVec2 { 4 | public func toPath() -> [IntVec2] { 5 | guard ValidateDistance.distanceIsOne(self) else { 6 | return [] 7 | } 8 | var result = [IntVec2]() 9 | var lastDiff = IntVec2.zero 10 | for (index, position) in self.enumerated() { 11 | if index == 0 { 12 | result.append(position) 13 | continue 14 | } 15 | let previousPosition: IntVec2 = result[result.count-1] 16 | let newDiff: IntVec2 = position.subtract(previousPosition) 17 | if newDiff == lastDiff { 18 | result[result.count-1] = position 19 | } else { 20 | lastDiff = newDiff 21 | result.append(position) 22 | } 23 | } 24 | return result 25 | } 26 | } 27 | 28 | -------------------------------------------------------------------------------- /EngineShared/Common/PrettyPrintArray.swift: -------------------------------------------------------------------------------- 1 | // MIT license. Copyright (c) 2020 Simon Strandgaard. All rights reserved. 2 | 3 | public struct PrettyPrintArray { 4 | let prefixLength: UInt 5 | let suffixLength: UInt 6 | let separator: String 7 | let ellipsis: String 8 | 9 | public static let simple = PrettyPrintArray(prefixLength: 3, suffixLength: 3, separator: ",", ellipsis: "...") 10 | 11 | public func format(_ positions: [T]) -> String { 12 | guard positions.count > Int(prefixLength + suffixLength) else { 13 | let p0: [String] = positions.map { String(describing: $0) } 14 | return p0.joined(separator: separator) 15 | } 16 | let a0: ArraySlice = positions.prefix(Int(prefixLength)) 17 | let b0: ArraySlice = positions.suffix(Int(suffixLength)) 18 | let a1: [String] = a0.map { String(describing: $0) } 19 | let b1: [String] = b0.map { String(describing: $0) } 20 | let ab: [String] = a1 + [ellipsis] + b1 21 | return ab.joined(separator: separator) 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /EngineShared/Common/SeededGenerator.swift: -------------------------------------------------------------------------------- 1 | // MIT license. Copyright (c) 2020 Simon Strandgaard. All rights reserved. 2 | 3 | public typealias SeededGenerator = LCRNG 4 | 5 | 6 | /// Deterministic random generator 7 | /// 8 | /// A linear congruential random number generator. 9 | /// 10 | /// LCRNG is taken from the [swift-gen](https://github.com/pointfreeco/swift-gen) project. 11 | public struct LCRNG: RandomNumberGenerator { 12 | public var seed: UInt64 13 | 14 | @inlinable 15 | public init(seed: UInt64) { 16 | self.seed = seed 17 | } 18 | 19 | @inlinable 20 | public mutating func next() -> UInt64 { 21 | seed = 2862933555777941757 &* seed &+ 3037000493 22 | return seed 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /EngineShared/Common/Softmax.swift: -------------------------------------------------------------------------------- 1 | // MIT license. Copyright (c) 2020 Simon Strandgaard. All rights reserved. 2 | 3 | /// https://en.wikipedia.org/wiki/Softmax_function 4 | extension Array where Element == Float { 5 | public var softmax: [Float] { 6 | var exponential = [Float](repeating: 0, count: self.count) 7 | var sum: Float = 0 8 | for index in 0.. URL { 6 | let uuidString: String = (uuid ?? UUID()).uuidString 7 | let components: [String] = prefixes + [uuidString] + suffixes 8 | let pathComponent = components.joined(separator: "-") 9 | var url: URL = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(pathComponent) 10 | if let pathExtensionUnwrapped: String = pathExtension { 11 | url = url.appendingPathExtension(pathExtensionUnwrapped) 12 | } 13 | return url 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /EngineShared/Common/ValidateDistance.swift: -------------------------------------------------------------------------------- 1 | // MIT license. Copyright (c) 2020 Simon Strandgaard. All rights reserved. 2 | import Foundation 3 | 4 | public class ValidateDistance { 5 | private init() {} 6 | 7 | /// Ensure that all the positions are adjacent to each other. 8 | /// 9 | /// In a snake game, all player moves must be by a distance of 1 unit. 10 | /// 11 | /// Rule violation: The snake must never stand still, so it cannot move by 0 unit. 12 | /// 13 | /// Rule violation: The snake must not move by more than 1 unit. 14 | public static func distanceIsOne(_ positions: [IntVec2]) -> Bool { 15 | for (index, position) in positions.enumerated() { 16 | if index == 0 { 17 | continue 18 | } 19 | let diff = position.subtract(positions[index - 1]) 20 | let manhattanDistance = abs(diff.x) + abs(diff.y) 21 | guard manhattanDistance == 1 else { 22 | return false 23 | } 24 | } 25 | return true 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /EngineShared/Common/remap.swift: -------------------------------------------------------------------------------- 1 | // MIT license. Copyright (c) 2020 TriangleDraw. All rights reserved. 2 | 3 | public func remap(_ value: T, _ a: T, _ b: T, _ c: T, _ d: T) -> T { 4 | return c + (d - c) * (value - a) / (b - a) 5 | } 6 | 7 | //remap(-1.0, -1.0, 1.0, -10.0, 10.0) // -10 8 | //remap(-0.5, -1.0, 1.0, -10.0, 10.0) // -5 9 | //remap(0.0, -1.0, 1.0, -10.0, 10.0) // 0 10 | //remap(0.5, -1.0, 1.0, -10.0, 10.0) // 5 11 | //remap(1.0, -1.0, 1.0, -10.0, 10.0) // 10 12 | -------------------------------------------------------------------------------- /EngineShared/Common/sigmoid.swift: -------------------------------------------------------------------------------- 1 | // MIT license. Copyright (c) 2020 Simon Strandgaard. All rights reserved. 2 | import Foundation 3 | 4 | // Returns a value between 0 and 1 5 | public func sigmoid(_ x: Float) -> Float { 6 | return 1.0 / (1.0 + exp(-x)) 7 | } 8 | public func sigmoid(_ x: Double) -> Double { 9 | return 1.0 / (1.0 + exp(-x)) 10 | } 11 | 12 | //sigmoid(-2) // 0.12 13 | //sigmoid(-1) // 0.27 14 | //sigmoid(0) // 0.5 15 | //sigmoid(1) // 0.73 16 | //sigmoid(2) // 0.88 17 | 18 | 19 | public func sigmoidDerived(_ x: T) -> T { 20 | return x * (1 - x) 21 | } 22 | 23 | //sigmoidDerived(0.1) // 0.09 24 | //sigmoidDerived(0.25) // 0.188 25 | //sigmoidDerived(0.5) // 0.25 26 | //sigmoidDerived(0.75) // 0.188 27 | //sigmoidDerived(0.9) // 0.09 28 | -------------------------------------------------------------------------------- /EngineShared/Common/swift-algorithm-club/Graph/Edge.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Edge.swift 3 | // Graph 4 | // 5 | // Created by Andrew McKnight on 5/8/16. 6 | // 7 | 8 | import Foundation 9 | 10 | public struct Edge: Equatable where T: Hashable { 11 | 12 | public let from: Vertex 13 | public let to: Vertex 14 | 15 | public let weight: Double? 16 | 17 | } 18 | 19 | extension Edge: CustomStringConvertible { 20 | 21 | public var description: String { 22 | guard let unwrappedWeight = weight else { 23 | return "\(from.description) -> \(to.description)" 24 | } 25 | return "\(from.description) -(\(unwrappedWeight))-> \(to.description)" 26 | } 27 | 28 | } 29 | 30 | extension Edge: Hashable { 31 | 32 | public var hashValue: Int { 33 | var string = "\(from.description)\(to.description)" 34 | if weight != nil { 35 | string.append("\(weight!)") 36 | } 37 | return string.hashValue 38 | } 39 | } 40 | 41 | public func == (lhs: Edge, rhs: Edge) -> Bool { 42 | guard lhs.from == rhs.from else { 43 | return false 44 | } 45 | 46 | guard lhs.to == rhs.to else { 47 | return false 48 | } 49 | 50 | guard lhs.weight == rhs.weight else { 51 | return false 52 | } 53 | 54 | return true 55 | } 56 | -------------------------------------------------------------------------------- /EngineShared/Common/swift-algorithm-club/Graph/Vertex.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Vertex.swift 3 | // Graph 4 | // 5 | // Created by Andrew McKnight on 5/8/16. 6 | // 7 | 8 | import Foundation 9 | 10 | public struct Vertex: Equatable where T: Hashable { 11 | 12 | public var data: T 13 | public let index: Int 14 | 15 | } 16 | 17 | extension Vertex: CustomStringConvertible { 18 | 19 | public var description: String { 20 | return "\(index): \(data)" 21 | } 22 | 23 | } 24 | 25 | extension Vertex: Hashable { 26 | 27 | public var hashValue: Int { 28 | return "\(data)\(index)".hashValue 29 | } 30 | 31 | } 32 | 33 | public func ==(lhs: Vertex, rhs: Vertex) -> Bool { 34 | guard lhs.index == rhs.index else { 35 | return false 36 | } 37 | 38 | guard lhs.data == rhs.data else { 39 | return false 40 | } 41 | 42 | return true 43 | } 44 | -------------------------------------------------------------------------------- /EngineShared/Common/swift-algorithm-club/SSSP/SSSP.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SSSP.swift 3 | // SSSP 4 | // 5 | // Created by Andrew McKnight on 5/8/16. 6 | // 7 | 8 | import Foundation 9 | //import Graph 10 | 11 | /** 12 | `SSSPAlgorithm` is a protocol for encapsulating a Single-Source Shortest Path algorithm. 13 | It provides a single function `apply` that accepts a subclass of `AbstractGraph` and returns 14 | an object conforming to `SSSPResult`. 15 | */ 16 | protocol SSSPAlgorithm { 17 | 18 | associatedtype Q: Equatable, Hashable 19 | associatedtype P: SSSPResult 20 | 21 | static func apply(_ graph: AbstractGraph, source: Vertex) -> P? 22 | 23 | } 24 | 25 | /** 26 | `SSSPResult` is a protocol defining functions `distance` and `path`, allowing 27 | for opaque queries into the actual data structures that represent the SSSP 28 | solution according to the algorithm used. 29 | */ 30 | protocol SSSPResult { 31 | 32 | associatedtype T: Equatable, Hashable 33 | 34 | func distance(to: Vertex) -> Double? 35 | func path(to: Vertex, inGraph graph: AbstractGraph) -> [T]? 36 | } 37 | -------------------------------------------------------------------------------- /EngineShared/Dataset/SnakeDataset.bundle/duel0.snakeDataset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/EngineShared/Dataset/SnakeDataset.bundle/duel0.snakeDataset -------------------------------------------------------------------------------- /EngineShared/Dataset/SnakeDataset.bundle/duel1.snakeDataset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/EngineShared/Dataset/SnakeDataset.bundle/duel1.snakeDataset -------------------------------------------------------------------------------- /EngineShared/Dataset/SnakeDataset.bundle/duel2.snakeDataset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/EngineShared/Dataset/SnakeDataset.bundle/duel2.snakeDataset -------------------------------------------------------------------------------- /EngineShared/Dataset/SnakeDataset.bundle/duel3.snakeDataset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/EngineShared/Dataset/SnakeDataset.bundle/duel3.snakeDataset -------------------------------------------------------------------------------- /EngineShared/Dataset/SnakeDataset.bundle/duel4.snakeDataset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/EngineShared/Dataset/SnakeDataset.bundle/duel4.snakeDataset -------------------------------------------------------------------------------- /EngineShared/Dataset/SnakeDataset.bundle/solo0.snakeDataset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/EngineShared/Dataset/SnakeDataset.bundle/solo0.snakeDataset -------------------------------------------------------------------------------- /EngineShared/Dataset/SnakeDataset.bundle/solo1.snakeDataset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/EngineShared/Dataset/SnakeDataset.bundle/solo1.snakeDataset -------------------------------------------------------------------------------- /EngineShared/Dataset/SnakeDataset.bundle/solo2.snakeDataset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/EngineShared/Dataset/SnakeDataset.bundle/solo2.snakeDataset -------------------------------------------------------------------------------- /EngineShared/Dataset/SnakeDataset.bundle/solo3.snakeDataset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/EngineShared/Dataset/SnakeDataset.bundle/solo3.snakeDataset -------------------------------------------------------------------------------- /EngineShared/Dataset/SnakeDataset.bundle/solo4.snakeDataset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/EngineShared/Dataset/SnakeDataset.bundle/solo4.snakeDataset -------------------------------------------------------------------------------- /EngineShared/Dataset/readme.md: -------------------------------------------------------------------------------- 1 | # SwiftSnakeEngine - Dataset 2 | 3 | When a snake game ends, most of its game data is stored in a `.snakeDataset` file. 4 | 5 | This `.snakeDataset` file, can be used for these things: 6 | 7 | - Create a video, with one player move per frame. 8 | - Replay of a historical game, for later inspection of the game state. 9 | - Training data for a neural network. 10 | - Verify that no cheating was going on. 11 | 12 | --- 13 | 14 | # Content of the dataset file 15 | 16 | Recreating a historical game, requires these kinds of data: 17 | 18 | - Level. 19 | - Food positions. 20 | - Info about player 1 and player 2. 21 | - When did the game take place. 22 | - How long did the game take. 23 | 24 | Info about each player: 25 | 26 | - List of all the moves made by the player. 27 | - Is the player a bot. If so, what is the `uuid` of the bot. 28 | - Is the player a human. If so, how many undo operations did the human make. 29 | - Is the player not installed. In a two-player game, both players are installed. In a single-player game, one of the players is installed. 30 | - Why did the player die? Collision with wall, Collision with snake, Stuck in a loop. 31 | 32 | 33 | ### Level 34 | 35 | In what level did the game take place. 36 | 37 | The level can have been renamed, so simply refering to its filename, is fragile. 38 | In order to reference the level, I make use the level `uuid`. 39 | 40 | The content of the level can be changed. So I store basic level info. 41 | So even though the level have been modified, the game can still be replayed. 42 | 43 | -------------------------------------------------------------------------------- /EngineShared/Environment/GameEnvironmentPreview.swift: -------------------------------------------------------------------------------- 1 | // MIT license. Copyright (c) 2020 Simon Strandgaard. All rights reserved. 2 | import Foundation 3 | 4 | /// Used by the level selector where heavy loading is to be avoided. 5 | public class GameEnvironmentPreview: GameEnvironment { 6 | private let initialGameState: SnakeGameState 7 | 8 | public init(initialGameState: SnakeGameState) { 9 | self.initialGameState = initialGameState 10 | } 11 | 12 | public func reset() -> SnakeGameState { 13 | return initialGameState 14 | } 15 | 16 | public func undo() -> SnakeGameState? { 17 | return nil 18 | } 19 | 20 | public var stepControlMode: GameEnvironment_StepControlMode { 21 | return .reachedTheEnd 22 | } 23 | 24 | public func step(action: GameEnvironment_StepAction) -> SnakeGameState { 25 | return initialGameState 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /EngineShared/Environment/GameHeadless.swift: -------------------------------------------------------------------------------- 1 | // MIT license. Copyright (c) 2020 Simon Strandgaard. All rights reserved. 2 | import Foundation 3 | 4 | public class GameHeadless { 5 | public static func run() { 6 | let snakeBotType0: SnakeBot.Type = SnakeBotFactory.smartestBotType() 7 | let bot = SnakePlayerRole.bot(snakeBotType: snakeBotType0) 8 | 9 | let initialGameState = SnakeGameState.create( 10 | player1: bot, 11 | player2: bot, 12 | levelName: "Level 4.csv" 13 | ) 14 | let environment: GameEnvironment = GameEnvironmentInteractive(initialGameState: initialGameState) 15 | 16 | var gameState: SnakeGameState = environment.reset() 17 | 18 | for iteration in 0..<1000 { 19 | log.debug("#\(iteration) \(gameState.player1.snakeBody.length) \(gameState.player2.snakeBody.length)") 20 | 21 | let action = GameEnvironment_StepAction( 22 | player1: .dontMove, 23 | player2: .dontMove 24 | ) 25 | gameState = environment.step(action: action) 26 | } 27 | } 28 | } 29 | 30 | -------------------------------------------------------------------------------- /EngineShared/Level/SnakeLevelCacheModel.proto: -------------------------------------------------------------------------------- 1 | // Regenerate swift file 2 | // PROMPT> protoc --swift_out=. SnakeLevelCacheModel.proto 3 | syntax = "proto3"; 4 | 5 | message SnakeLevelCacheModelDistanceKeyValuePair { 6 | uint32 key_low = 1; 7 | uint32 key_high = 2; 8 | sint32 value_distance = 3; 9 | } 10 | 11 | message SnakeLevelCacheModel { 12 | string sha1 = 1; 13 | repeated SnakeLevelCacheModelDistanceKeyValuePair distances = 2; 14 | } 15 | -------------------------------------------------------------------------------- /EngineShared/Level/SnakeLevels.bundle/Level 0.cache: -------------------------------------------------------------------------------- 1 | 2 | (96ff5c245ed07156dda4b8258174aebe41bad9f4 -------------------------------------------------------------------------------- /EngineShared/Level/SnakeLevels.bundle/Level 0.csv: -------------------------------------------------------------------------------- 1 | e9943132-5ebf-41a1-895b-a278cfc1adef,,,,,,,, 2 | W,W,W,W,W,W,W,W,W 3 | W,,,,,,P1R4,,W 4 | W,,,,,,,,W 5 | W,,,,,,,,W 6 | W,,,,F,,,,W 7 | W,,,,,,,,W 8 | W,,,,,,,,W 9 | W,,P2L4,,,,,,W 10 | W,W,W,W,W,W,W,W,W -------------------------------------------------------------------------------- /EngineShared/Level/SnakeLevels.bundle/Level 1.cache: -------------------------------------------------------------------------------- 1 | 2 | (aee9598e990a9e34d311d7d49f52964ff30dfa88 -------------------------------------------------------------------------------- /EngineShared/Level/SnakeLevels.bundle/Level 1.csv: -------------------------------------------------------------------------------- 1 | e707f8d1-3699-4778-b158-04197f775862,,,,,,,,,,,,,,,,,, 2 | W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W 3 | W,,,,,,,,,,,,,,,,,,W 4 | W,,,,,,,,,,,,,,,,,,W 5 | W,,,,,,,,,,,,,,,,,,W 6 | W,,,,,,,,,,,,,,,,,,W 7 | W,,,,,,,,,,,,,,,,,,W 8 | W,,,,,,,,,,,,,,,,,,W 9 | W,,,,,,,,,,,,,,,,,,W 10 | W,,,,,,,,,,,,,,,,,,W 11 | W,,,,,P1R2,,,,F,,,,P2L2,,,,,W 12 | W,,,,,,,,,,,,,,,,,,W 13 | W,,,,,,,,,,,,,,,,,,W 14 | W,,,,,,,,,,,,,,,,,,W 15 | W,,,,,,,,,,,,,,,,,,W 16 | W,,,,,,,,,,,,,,,,,,W 17 | W,,,,,,,,,,,,,,,,,,W 18 | W,,,,,,,,,,,,,,,,,,W 19 | W,,,,,,,,,,,,,,,,,,W 20 | W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W -------------------------------------------------------------------------------- /EngineShared/Level/SnakeLevels.bundle/Level 10.cache: -------------------------------------------------------------------------------- 1 | 2 | (5ce88fc6d4d793550e4ee95cffe87fa93db476aa   3 |  (   0.""   "  *(  4 |  " " 2,$$  5 |   8  &*  6 |  $ D ,6   7 | &  8  *  8 |   < $""*. 9 | $ . (   10 | (    2  B ,  4 4 11 |  0 12 |    13 |  14 |   "    "      0  8 "" -------------------------------------------------------------------------------- /EngineShared/Level/SnakeLevels.bundle/Level 10.csv: -------------------------------------------------------------------------------- 1 | f2b13b27-d1c0-4e2b-ad79-5ff4fcf1a696,,,,,,,,,,,,,,,,,, 2 | W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W 3 | W,C1,C1,C2,C2 P1R3,C3,C3,C3,C3,W,C7,C7,C7,C7,C8,C8,C9,C9,W 4 | W,C1,W,W,C2,W,W,W,C3,W,C7,W,W,W,C8,W,W,C9,W 5 | W,C1,C1,C2,C2,C2,C4,C4,C4,C4,C4,C4,C4,C8,C8,C8,C9,C9,W 6 | W,C1,W,W,C2,W,C5,W,W,W,W,W,C6,W,C8,W,W,C9,W 7 | W,C1,C1,C2,C2,W,C5,C5,C5,W,C6,C6,C6,W,C8,C8,C9,C9,W 8 | W,W,W,W,C10,W,W,W,C16,W,C16,W,W,W,C11,W,W,W,W 9 | W,W,W,W,C10,W,C14,C14,C16,C16 F,C16,C15,C15,W,C11,W,W,W,W 10 | W,W,W,W,C10,W,C14,W,W,W,W,W,C15,W,C11,W,W,W,W 11 | W,C12,C12,C10,C10,C14,C14,W,C17,C17,C17,W,C15,C15,C11,C11,C13,C13,W 12 | W,C12,W,W,C10,W,W,W,C17,C17,C17,W,W,W,C11,W,W,C13,W 13 | W,C12,C12,C10,C10,C17,C17,C17,C17,C17,C17,C17,C17,C11,C11 P2L3,C11,C13,C13,W 14 | W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W -------------------------------------------------------------------------------- /EngineShared/Level/SnakeLevels.bundle/Level 11.cache: -------------------------------------------------------------------------------- 1 | 2 | (83e34be1a31b7de4513b08b94ec7a5267d70790b -------------------------------------------------------------------------------- /EngineShared/Level/SnakeLevels.bundle/Level 11.csv: -------------------------------------------------------------------------------- 1 | 88688ca9-d723-41ba-adb4-854196dfca2f,,,,,, 2 | W,W,W,W,W,W,W 3 | W,C1,C1,C1,C1 P1R3,C1,W 4 | W,C1,C1,C1,C1,C1,W 5 | W,W,W,C1,C1,C1,W 6 | W,C2,C2,W,C1,C1,W 7 | W,C2,C2,C2,W,C1,W 8 | W,C2,C2,C2 F,C2,C2,W 9 | W,C3,W,C2,C2,C2,W 10 | W,C3,C3,W,C2,C2,W 11 | W,C3,C3,C3,W,W,W 12 | W,C3,C3,C3,C3,C3,W 13 | W,C3,C3 P2L3,C3,C3,C3,W 14 | W,W,W,W,W,W,W -------------------------------------------------------------------------------- /EngineShared/Level/SnakeLevels.bundle/Level 2.cache: -------------------------------------------------------------------------------- 1 | 2 | (3ed21777d9d4245fd0e9e2c9b4dbd78c119d8d92$B6$ 0" $".$ ($   $  -------------------------------------------------------------------------------- /EngineShared/Level/SnakeLevels.bundle/Level 2.csv: -------------------------------------------------------------------------------- 1 | 83a7d7e9-daf4-4e32-8f5f-b776d577c242,,,,,,,,,,,,,,,,,, 2 | W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W 3 | W,C3,C3,C3,C3,C3,C3,C2,C2,C2,C2,C2,C1,C1,C1,C1,C1,C1,W 4 | W,C3,C3,C3,C3,C3,C3,C2,C2,C2,C2,C2,C1,C1,C1,C1,C1,C1,W 5 | W,C3,C3,C3,C3,C3,C3,C2,C2,C2,C2,C2,C1 P2L2,C1,C1,C1,C1,C1,W 6 | W,C3,C3,C3,C3,C3,C3,C2,C2,C2,C2,C2,C1,C1,C1,C1,C1,C1,W 7 | W,C3,C3,C3,C3,C3,C3,C2,C2,C2,C2,C2,C1,C1,C1,C1,C1,C1,W 8 | W,C3,C3,C3,C3,C3,C3,C2,C2,C2,C2,C2,W,W,W,W,W,W,W 9 | W,C4,C4,C4,C4,C4,C4,C5,C5,C5,C5,C5,C6,C6,C6,C6,C6,C6,W 10 | W,C4,C4,C4,C4,C4,C4,C5,C5,C5,C5,C5,C6,C6,C6,C6,C6,C6,W 11 | W,C4,C4,C4,C4,C4,C4,C5,C5,C5 F,C5,C5,C6,C6,C6,C6,C6,C6,W 12 | W,C4,C4,C4,C4,C4,C4,C5,C5,C5,C5,C5,C6,C6,C6,C6,C6,C6,W 13 | W,C4,C4,C4,C4,C4,C4,C5,C5,C5,C5,C5,C6,C6,C6,C6,C6,C6,W 14 | W,W,W,W,W,W,W,C8,C8,C8,C8,C8,C7,C7,C7,C7,C7,C7,W 15 | W,C9,C9,C9,C9,C9,C9,C8,C8,C8,C8,C8,C7,C7,C7,C7,C7,C7,W 16 | W,C9,C9,C9,C9,C9,C9,C8,C8,C8,C8,C8,C7,C7,C7,C7,C7,C7,W 17 | W,C9,C9,C9,C9,C9,C9 P1R2,C8,C8,C8,C8,C8,C7,C7,C7,C7,C7,C7,W 18 | W,C9,C9,C9,C9,C9,C9,C8,C8,C8,C8,C8,C7,C7,C7,C7,C7,C7,W 19 | W,C9,C9,C9,C9,C9,C9,C8,C8,C8,C8,C8,C7,C7,C7,C7,C7,C7,W 20 | W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W -------------------------------------------------------------------------------- /EngineShared/Level/SnakeLevels.bundle/Level 3.cache: -------------------------------------------------------------------------------- 1 | 2 | (bac9a6697061606f5208d013fd8f4aafb82373c5*6**6,(6(,6* -------------------------------------------------------------------------------- /EngineShared/Level/SnakeLevels.bundle/Level 3.csv: -------------------------------------------------------------------------------- 1 | 5962c7cb-91e2-48ce-a720-3c4dab3403a4,,,,,,,,,,,,,,,,,, 2 | W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W 3 | W,C1,C1,C1,C1,C2,C2,C2,C2,C2,C2,C2,C2,C2,C3,C3,C3,C3,W 4 | W,C1,C1,C1,C1,C2,C2,C2,C2,C2 P1R2,C2,C2,C2,C2,C3,C3,C3,C3,W 5 | W,C1,C1,C1,C1,C2,C2,C2,C2,C2,C2,C2,C2,C2,C3,C3,C3,C3,W 6 | W,C1,C1,C1,W,W,W,W,W,W,W,W,W,W,W,C3,C3,C3,W 7 | W,C8,C8,C8,W,W,W,W,W,W,W,W,W,W,W,C4,C4,C4,W 8 | W,C8,C8,C8,W,W,W,W,W,W,W,W,W,W,W,C4,C4,C4,W 9 | W,C8,C8,C8,W,W,W,W,W,W,W,W,W,W,W,C4,C4,C4,W 10 | W,C8,C8,C8,W,W,W,W,W,W,W,W,W,W,W,C4,C4,C4,W 11 | W,C8,C8,C8,W,W,W,W,W,W,W,W,W,W,W,C4,C4 F,C4,W 12 | W,C8,C8,C8,W,W,W,W,W,W,W,W,W,W,W,C4,C4,C4,W 13 | W,C8,C8,C8,W,W,W,W,W,W,W,W,W,W,W,C4,C4,C4,W 14 | W,C8,C8,C8,W,W,W,W,W,W,W,W,W,W,W,C4,C4,C4,W 15 | W,C8,C8,C8,W,W,W,W,W,W,W,W,W,W,W,C4,C4,C4,W 16 | W,C7,C7,C7,W,W,W,W,W,W,W,W,W,W,W,C5,C5,C5,W 17 | W,C7,C7,C7,C7,C6,C6,C6,C6,C6,C6,C6,C6,C6,C5,C5,C5,C5,W 18 | W,C7,C7,C7,C7,C6,C6,C6,C6,C6 P2R2,C6,C6,C6,C6,C5,C5,C5,C5,W 19 | W,C7,C7,C7,C7,C6,C6,C6,C6,C6,C6,C6,C6,C6,C5,C5,C5,C5,W 20 | W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W -------------------------------------------------------------------------------- /EngineShared/Level/SnakeLevels.bundle/Level 4.cache: -------------------------------------------------------------------------------- 1 | 2 | (72adf17e25c2f9c37e330cbd19e56f922068e746 -------------------------------------------------------------------------------- /EngineShared/Level/SnakeLevels.bundle/Level 4.csv: -------------------------------------------------------------------------------- 1 | 8fe620d5-6f9f-4ed9-9d51-36957c4ff6cf,,,,,,,,,,,,,,,,,, 2 | W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W 3 | W,C1,C1,C1,C1,C1,C1,C1,C1,W,C2,C2,C2,C2,C2,C2,C2,C2,W 4 | W,C1,C1,C1,C1,C1,C1,C1,C1,W,C2,C2,C2,C2,C2,C2,C2,C2,W 5 | W,C1,C1,C1,C1,C1,C1,C1,C1,W,C2,C2,C2,C2,C2,C2,C2,C2,W 6 | W,C1,C1,C1,C1,C1,C1,C1,C1,W,C2,C2,C2,C2,C2,C2,C2,C2,W 7 | W,C1,C1,C1,C1,C1,C1,C1,C1,W,C2,C2,C2,C2,C2,C2,C2,C2,W 8 | W,C1,C1,C1,C1,C1,C1,C1,C1,W,C2,C2,C2,C2,C2,C2,C2,C2,W 9 | W,C1,C1,C1,C1 P1R2,C1,C1,C1,C1,W,C2,C2,C2,C2 P2L2,C2,C2,C2,C2,W 10 | W,C1,C1,C1,C1,C1,C1,C1,C1,W,C2,C2,C2,C2,C2,C2,C2,C2,W 11 | W,C1,C1,C1,C1,C1,C1,C1,C1,W,C2,C2,C2,C2,C2,C2,C2,C2,W 12 | W,C1,C1,C1,C1,C1,C1,C1,C1,W,C2,C2,C2,C2,C2,C2,C2,C2,W 13 | W,C1,C1,C1,C1,C1,C1,C1,C1,W,C2,C2,C2,C2,C2,C2,C2,C2,W 14 | W,C1,C1,C1,C1,C1 F,C1,C1,C1,W,C2,C2,C2,C2,C2,C2,C2,C2,W 15 | W,C1,C1,C1,C1,C1,C1,C1,C1,W,C2,C2,C2,C2,C2,C2,C2,C2,W 16 | W,C1,C1,C1,C1,C1,C1,C1,C1,W,C2,C2,C2,C2,C2,C2,C2,C2,W 17 | W,C1,C1,C1,C1,C1,C1,C1,C1,W,C2,C2,C2,C2,C2,C2,C2,C2,W 18 | W,C1,C1,C1,C1,C1,C1,C1,C1,W,C2,C2,C2,C2,C2,C2,C2,C2,W 19 | W,C1,C1,C1,C1,C1,C1,C1,C1,W,C2,C2,C2,C2,C2,C2,C2,C2,W 20 | W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W -------------------------------------------------------------------------------- /EngineShared/Level/SnakeLevels.bundle/Level 5.cache: -------------------------------------------------------------------------------- 1 | 2 | (ce197523bcdbe4c0b03e8b8f55cac450a5e08960".6, .<,  ,80  ,< , "    -------------------------------------------------------------------------------- /EngineShared/Level/SnakeLevels.bundle/Level 5.csv: -------------------------------------------------------------------------------- 1 | d850ac21-6082-47db-ad35-c9d0c2b9fc81,,,,,,,,,,,,,,,,,, 2 | W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W 3 | W,C1,C1,C1,C1,C2,C2,C2,C2,C2 P2L2,C2,C2,C2,C2,C3,C3,C3,C3,W 4 | W,C1,C1,C1,C1,C2,C2,C2,C2,C2,C2,C2,C2,C2,C3,C3,C3,C3,W 5 | W,C1,C1,W,W,W,W,W,W,W,W,W,W,W,W,W,C3,C3,W 6 | W,C1,C1,W,C9,C9,C9,C9,C9,C9,C9,C9,C9,C9,C9,W,C3,C3,W 7 | W,C8,C8,W,C9,C9,C9,C9,C9,C9,C9,C9,C9,C9,C9,W,C4,C4,W 8 | W,C8,C8,W,C9,C9,C9,C9,C9,C9,C9,C9,C9,C9,C9,W,C4,C4,W 9 | W,C8,C8,W,C9,C9,C9,C9,C9,C9,C9,C9,C9,C9,C9,W,C4,C4,W 10 | W,C8,C8,W,C9,C9,C9,C9,C9,C9,C9,C9,C9,C9,C9,W,C4,C4,W 11 | W,C8,C8,W,C9,C9,C9,C9,C9,W,C9,C9,C9,C9,C9,W,C4,C4,W 12 | W,C8,C8,W,C9,C9,C9,C9,C9,C9,C9,C9,C9,C9,C9,W,C4,C4,W 13 | W,C8,C8,W,C9,C9,C9,C9,C9,C9,C9,C9,C9,C9,C9,W,C4,C4,W 14 | W,C8,C8,W,C9,C9,C9,C9,C9,C9,C9,C9,C9,C9,C9,W,C4,C4,W 15 | W,C8,C8,W,C9,C9,C9,C9,C9,C9,C9,C9,C9,C9,C9,W,C4,C4,W 16 | W,C7,C7,W,C9,C9,C9,C9,C9,C9 P1R2,C9,C9,C9,C9,C9 F,W,C5,C5,W 17 | W,C7,C7,W,W,W,W,W,W,W,W,W,W,W,W,W,C5,C5,W 18 | W,C7,C7,C7,C7,C6,C6,C6,C6,C6,C6,C6,C6,C6,C5,C5,C5,C5,W 19 | W,C7,C7,C7,C7,C6,C6,C6,C6,C6,C6,C6,C6,C6,C5,C5,C5,C5,W 20 | W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W -------------------------------------------------------------------------------- /EngineShared/Level/SnakeLevels.bundle/Level 6.cache: -------------------------------------------------------------------------------- 1 | 2 | (d3d4e4d9303d0f1e16a7db72a303c35b366c93c7$ & -------------------------------------------------------------------------------- /EngineShared/Level/SnakeLevels.bundle/Level 6.csv: -------------------------------------------------------------------------------- 1 | cdeeadf2-31c9-48f4-852f-778b58086dd0,,,,,,,,,,,,,, 2 | W,W,W,W,W,W,W,W,W,W,W,W,W,W,W 3 | W,C2,C2,C2,W,C1,C1,C1,C1,C1,C1,C1,C1,C1,W 4 | W,C2,W,C2,W,C1,C1,C1,C1,C1,C1,C1,C1,C1,W 5 | W,C2,C2 P2L8,C2,C1,C1,C1,C1,C1,C1,C1,C1,C1,C1,W 6 | W,C2,W,W,W,W,W,W,W,W,W,C1,W,C1,W 7 | W,C4,W,C3,C3,C3,C3,C3,C3,C3,C3,C3,W,C1,W 8 | W,C4,W,C4,W,W,W,W,W,W,W,W,W,C5,W 9 | W,C4,C4,C4,C4,C4,C4,C4,C4,C4,C4,C5,C5 P1R8,C5,W 10 | W,C4,C4,C4,C4,C4,C4,C4,C4,C4,W,C5,W,C5 F,W 11 | W,C4,C4,C4,C4,C4,C4,C4,C4,C4,W,C5,C5,C5,W 12 | W,W,W,W,W,W,W,W,W,W,W,W,W,W,W -------------------------------------------------------------------------------- /EngineShared/Level/SnakeLevels.bundle/Level 7.cache: -------------------------------------------------------------------------------- 1 | 2 | (4eb84aea153c6f9ab761fac6bb49f084f89a97a4(& 6*.(BJ:02 -------------------------------------------------------------------------------- /EngineShared/Level/SnakeLevels.bundle/Level 7.csv: -------------------------------------------------------------------------------- 1 | f4c3d5f1-8335-4934-b41e-0367ff7d131f,,,,,,,,,,,,,,,,,, 2 | W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W 3 | W,C1,C1,C1,C1,C1,C1,C1,C2,C2,C2,C2,C3,C3,C3,C3,C3,C3,W 4 | W,C1,C1,C1,C1,C1,C1,C1,C2,C2,C2,C2,C3,C3,C3,C3,C3,C3,W 5 | W,C1,C1,C1,C1,C1,C1,C1,C2,C2,C2,C2,C3,C3,C3,C3,C3,C3,W 6 | W,C1,C1,C1,C1,C1,C1,C1,C2,C2,C2,C2,C3,C3,C3,C3,C3,C3,W 7 | W,C1,C1,C1,C1,C1,C1,C1,C2,C2,C2,W,C3,C3,C3,C3,C3,C3,W 8 | W,C1,C1,C1,C1,C1,C1,C1,C2,C2,C2 P2D4,C2,C3,C3,C3,C3,C3,C3,W 9 | W,C1,C1,C1,C1,C1,C1,C1,W,W,C8,W,C3,C3,C3,C3,C3,C3,W 10 | W,C1,C1,C1,C1,C1,C1,C1,C7,W,C8,C8,C3,C3,C3,C3,C3,C3,W 11 | W,W,W,W,W,W,W,W,C7,W,C8,W,W,W,W,W,W,W,W 12 | W,C6,C6,C6,C6,C6,C6,C7,C7,W,C8,C4,C4,C4,C4,C4,C4,C4,W 13 | W,C6,C6,C6,C6,C6,C6,W,C7,W,W,C4,C4,C4,C4,C4,C4,C4,W 14 | W,C6,C6,C6,C6,C6,C6,C5,C5 P1U4,C5,C5,C4,C4,C4,C4,C4,C4,C4,W 15 | W,C6,C6,C6,C6,C6,C6,W,C5,C5,C5,C4,C4,C4,C4,C4,C4,C4,W 16 | W,C6,C6,C6,C6,C6,C6,C5,C5,C5,C5,C4,C4,C4,C4,C4,C4,C4,W 17 | W,C6,C6,C6,C6,C6,C6,C5,C5,C5,C5,C4,C4,C4,C4,C4,C4,C4,W 18 | W,C6,C6,C6,C6,C6,C6,C5,C5,C5,C5,C4,C4,C4,C4,C4,C4 F,C4,W 19 | W,C6,C6,C6,C6,C6,C6,C5,C5,C5,C5,C4,C4,C4,C4,C4,C4,C4,W 20 | W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W -------------------------------------------------------------------------------- /EngineShared/Level/SnakeLevels.bundle/Level 8.cache: -------------------------------------------------------------------------------- 1 | 2 | (1a558002f21356b1564a138d056352b2cd1f5630$.6@P X&0@ H *: B* 2$ ,   -------------------------------------------------------------------------------- /EngineShared/Level/SnakeLevels.bundle/Level 8.csv: -------------------------------------------------------------------------------- 1 | 9d6c3700-a460-48fd-92fd-a319fff0f9e9,,,,,,,,,,,,,,,, 2 | W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W 3 | W,C4,C4,C4,C3,C3,C3,C3,W,C2,C2,C2,C1,C1,C1,C1,W 4 | W,C4,C4,C4 P2L4,C3,C3,C3,C3,W,C2,C2,C2,C1,C1,C1,C1,W 5 | W,C4,C4,W,W,W,C3,C3,C2,C2,C2,W,C1,C1,C1,C1,W 6 | W,C4,C4,C5,C5,W,C3,C3,C2,C2,C2,W,C1,C1,C1,C1,W 7 | W,W,W,C5,C5,W,W,W,W,W,W,W,W,W,W,W,W 8 | W,C6,C6,C5,C5,W,C7,C7,C8,C8,C8,W,C9,C9,C9,C9 F,W 9 | W,C6,C6,W,W,W,C7,C7,C8,C8,C8,W,C9,C9,C9,C9,W 10 | W,C6,C6,C6,C7,C7,C7,C7,W,C8,C8,C8,C9,C9,C9,C9,W 11 | W,C6,C6,C6,C7,C7,C7,C7,W,C8,C8,C8,C9,C9,C9,C9 P1R4,W 12 | W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W -------------------------------------------------------------------------------- /EngineShared/Level/SnakeLevels.bundle/Level 9.cache: -------------------------------------------------------------------------------- 1 | 2 | (d9f813c6b1b5b52524f6506c5f77b7872f8fc227   3 |   $ "   4 |      5 |       6 | $ $      7 |        8 |  9 |     10 |       11 |         12 |   13 |   14 |  15 |          -------------------------------------------------------------------------------- /EngineShared/Level/SnakeLevels.bundle/Level 9.csv: -------------------------------------------------------------------------------- 1 | 2b99ea2d-3115-4584-850b-9d2ef07cf9ce,,,,,,,,,,,,,, 2 | W,W,W,W,W,W,W,W,W,W,W,W,W,W,W 3 | W,C1,C1,C1,C2,C2,C2,C2,C3,C3,C3,C4,C4,C4,W 4 | W,C1,C1,W,C2,C2,C2,W,C3,C3,C3,W,C4,C4,W 5 | W,C1,W,W,W,C2,W,W,W,C3,W,W,W,C4,W 6 | W,C6,C6,W,C7,C7,C7,W,C8,C8,C8,W,C5,C5,W 7 | W,C6,C6,C6,C7,C7,C7,C9,C8,C8,C8 P2L3,C5,C5,C5,W 8 | W,W,W,C10,C11,W,C9,C9 F,C9,W,C13,C12,W,W,W 9 | W,C10,C10,C10,C11,C11,C15,W,C14,C13,C13,C12,C12,C12,W 10 | W,C10,C10,C10,C11 P1R3,W,C15,C14,C14,W,C13,C12,C12,C12,W 11 | W,W,W,W,C11,C11,C15,W,C14,C13,C13,W,W,W,W 12 | W,W,W,W,C11,W,C15,C15,C14,W,C13,W,W,W,W 13 | W,W,W,W,C11,C11,C15,W,C14,C13,C13,W,W,W,W 14 | W,W,W,W,W,W,W,W,W,W,W,W,W,W,W -------------------------------------------------------------------------------- /EngineShared/Snake/SnakeBodyMovement.swift: -------------------------------------------------------------------------------- 1 | // MIT license. Copyright (c) 2020 Simon Strandgaard. All rights reserved. 2 | 3 | // IDEA: rename from `SnakeBodyMovement` to `SnakeHeadMovement`. 4 | public enum SnakeBodyMovement { 5 | case dontMove 6 | case moveCCW 7 | case moveForward 8 | case moveCW 9 | } 10 | 11 | extension SnakeBodyMovement: Comparable { 12 | private var sortOrder: UInt { 13 | switch self { 14 | case .dontMove: 15 | return 0 16 | case .moveCCW: 17 | return 1 18 | case .moveForward: 19 | return 2 20 | case .moveCW: 21 | return 3 22 | } 23 | } 24 | 25 | public static func < (lhs: Self, rhs: Self) -> Bool { 26 | return lhs.sortOrder < rhs.sortOrder 27 | } 28 | 29 | public static func == (lhs: Self, rhs: Self) -> Bool { 30 | return lhs.sortOrder == rhs.sortOrder 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /EngineShared/Snake/SnakeGameState+Create.swift: -------------------------------------------------------------------------------- 1 | // MIT license. Copyright (c) 2020 Simon Strandgaard. All rights reserved. 2 | import Foundation 3 | 4 | extension SnakeGameState { 5 | public class func create(player1: SnakePlayerRole, player2: SnakePlayerRole, levelName: String) -> SnakeGameState { 6 | guard let snakeLevel: SnakeLevel = SnakeLevelManager.shared.level(name: levelName) else { 7 | fatalError("Cannot find a level with the levelName '\(levelName)'") 8 | } 9 | 10 | var gameState = SnakeGameState.empty() 11 | gameState = gameState.stateWithNewLevel(snakeLevel) 12 | 13 | do { 14 | var player = SnakePlayer.create(id: .player1, role: player1) 15 | player = player.playerWithNewSnakeBody(snakeLevel.player1_body) 16 | if player.role == .none { 17 | player = player.uninstall() 18 | } 19 | gameState = gameState.stateWithNewPlayer1(player) 20 | } 21 | do { 22 | var player = SnakePlayer.create(id: .player2, role: player2) 23 | player = player.playerWithNewSnakeBody(snakeLevel.player2_body) 24 | if player.role == .none { 25 | player = player.uninstall() 26 | } 27 | gameState = gameState.stateWithNewPlayer2(player) 28 | } 29 | gameState = gameState.stateWithNewFoodPosition(snakeLevel.initialFoodPosition.intVec2) 30 | return gameState 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /EngineShared/Snake/SnakeGameState+IsWaitingForHumanInput.swift: -------------------------------------------------------------------------------- 1 | // MIT license. Copyright (c) 2020 Simon Strandgaard. All rights reserved. 2 | 3 | extension SnakeGameState { 4 | public func isWaitingForHumanInput() -> Bool { 5 | if self.player1.isInstalledAndAliveAndHuman && self.player1.pendingMovement == .dontMove { 6 | return true 7 | } 8 | if self.player2.isInstalledAndAliveAndHuman && self.player2.pendingMovement == .dontMove { 9 | return true 10 | } 11 | return false 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /EngineShared/Snake/SnakeHeadDirection.swift: -------------------------------------------------------------------------------- 1 | // MIT license. Copyright (c) 2020 Simon Strandgaard. All rights reserved. 2 | 3 | public enum SnakeHeadDirection: Hashable { 4 | case up, down, left, right 5 | } 6 | 7 | extension SnakeHeadDirection { 8 | public var rotatedCCW: SnakeHeadDirection { 9 | switch self { 10 | case .up: 11 | return .left 12 | case .left: 13 | return .down 14 | case .right: 15 | return .up 16 | case .down: 17 | return .right 18 | } 19 | } 20 | 21 | public var rotatedCW: SnakeHeadDirection { 22 | switch self { 23 | case .up: 24 | return .right 25 | case .left: 26 | return .up 27 | case .right: 28 | return .down 29 | case .down: 30 | return .left 31 | } 32 | } 33 | 34 | public var arrow: String { 35 | switch self { 36 | case .up: 37 | return "↑" 38 | case .left: 39 | return "←" 40 | case .right: 41 | return "→" 42 | case .down: 43 | return "↓" 44 | } 45 | } 46 | 47 | public var pointingTriangle: String { 48 | switch self { 49 | case .up: 50 | return "▲" 51 | case .left: 52 | return "◀" 53 | case .right: 54 | return "▶" 55 | case .down: 56 | return "▼" 57 | } 58 | } 59 | } 60 | 61 | extension SnakeHeadDirection: CustomStringConvertible { 62 | public var description: String { 63 | return self.arrow 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source "https://rubygems.org" 2 | 3 | gem "fastlane" 4 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Simon Strandgaard 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Pods/Local Podspecs/SSEventFlow.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "SSEventFlow", 3 | "version": "1.3.0", 4 | "summary": "SSEventFlow is a type safe alternative to NotificationCenter, inspired by Flux", 5 | "description": "This is a tiny variant of the Flux Application Architecture, invented by Facebook.\nSee video to how Flux works: https://facebook.github.io/flux/docs/in-depth-overview", 6 | "homepage": "https://github.com/neoneye/SSEventFlow", 7 | "license": { 8 | "type": "MIT" 9 | }, 10 | "authors": { 11 | "Simon Strandgaard": "neoneye@gmail.com" 12 | }, 13 | "source": { 14 | "git": "https://github.com/neoneye/SSEventFlow.git", 15 | "tag": "1.3.0" 16 | }, 17 | "social_media_url": "https://twitter.com/neoneye", 18 | "swift_versions": "5.2", 19 | "platforms": { 20 | "ios": "13.0", 21 | "osx": "10.15", 22 | "watchos": "6.0" 23 | }, 24 | "source_files": "SSEventFlow_Framework/Classes/*", 25 | "swift_version": "5.2" 26 | } 27 | -------------------------------------------------------------------------------- /Pods/Local Podspecs/SwiftCSV.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "SwiftCSV", 3 | "version": "0.5.5", 4 | "summary": "CSV parser for Swift", 5 | "homepage": "https://github.com/swiftcsv/SwiftCSV", 6 | "license": { 7 | "type": "MIT", 8 | "file": "LICENSE" 9 | }, 10 | "authors": { 11 | "Naoto Kaneko": "naoty.k@gmail.com", 12 | "Christian Tietze": "me@christiantietze.de" 13 | }, 14 | "source": { 15 | "git": "https://github.com/swiftcsv/SwiftCSV.git", 16 | "tag": "0.5.5" 17 | }, 18 | "swift_versions": [ 19 | "5.0", 20 | "4.2" 21 | ], 22 | "platforms": { 23 | "ios": "8.0", 24 | "osx": "10.9", 25 | "tvos": "9.2", 26 | "watchos": "2.2" 27 | }, 28 | "source_files": "SwiftCSV/**/*.swift", 29 | "requires_arc": true, 30 | "swift_version": "5.0" 31 | } 32 | -------------------------------------------------------------------------------- /Pods/Local Podspecs/SwiftProtobuf.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "SwiftProtobuf", 3 | "version": "1.8.0", 4 | "license": { 5 | "type": "Apache 2.0", 6 | "file": "LICENSE.txt" 7 | }, 8 | "summary": "Swift Protobuf code generator plugin and runtime library", 9 | "homepage": "https://github.com/apple/swift-protobuf", 10 | "authors": "Apple Inc.", 11 | "source": { 12 | "git": "https://github.com/apple/swift-protobuf.git", 13 | "tag": "1.8.0" 14 | }, 15 | "requires_arc": true, 16 | "platforms": { 17 | "ios": "8.0", 18 | "osx": "10.9", 19 | "tvos": "9.0", 20 | "watchos": "2.0" 21 | }, 22 | "cocoapods_version": ">= 1.7.0", 23 | "source_files": "Sources/SwiftProtobuf/**/*.swift", 24 | "swift_versions": [ 25 | "4.0", 26 | "4.2", 27 | "5.0" 28 | ], 29 | "swift_version": "5.0" 30 | } 31 | -------------------------------------------------------------------------------- /Pods/Local Podspecs/SwiftyBeaver.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "SwiftyBeaver", 3 | "version": "1.8.4", 4 | "summary": "Convenient logging during development & release in Swift 2, 3, 4 & 5.", 5 | "description": "Easy-to-use, extensible & powerful logging & analytics for Swift 2 to Swift 5.\nGreat for development & release due to its support for many logging destinations & platforms.", 6 | "homepage": "https://github.com/SwiftyBeaver/SwiftyBeaver", 7 | "screenshots": [ 8 | "https://cloud.githubusercontent.com/assets/564725/11452558/17fd5f04-95ec-11e5-96d2-427f62ed4f05.jpg", 9 | "https://cloud.githubusercontent.com/assets/564725/11452560/33225d16-95ec-11e5-8461-78f50b9e8da7.jpg" 10 | ], 11 | "license": "MIT", 12 | "authors": { 13 | "Sebastian Kreutzberger": "s.kreutzberger@googlemail.com" 14 | }, 15 | "platforms": { 16 | "ios": "8.0", 17 | "watchos": "2.0", 18 | "tvos": "9.0", 19 | "osx": "10.10" 20 | }, 21 | "source": { 22 | "git": "https://github.com/SwiftyBeaver/SwiftyBeaver.git", 23 | "tag": "1.8.4" 24 | }, 25 | "source_files": "Sources", 26 | "swift_versions": [ 27 | "3.0", 28 | "4.0", 29 | "4.2", 30 | "5.0", 31 | "5.1" 32 | ], 33 | "swift_version": "5.1" 34 | } 35 | -------------------------------------------------------------------------------- /Pods/Local Podspecs/SwiftySound.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "SwiftySound", 3 | "version": "1.2.0", 4 | "summary": "SwiftySound lets you play sounds with a single line of code.", 5 | "homepage": "https://github.com/adamcichy/SwiftySound", 6 | "license": { 7 | "type": "MIT", 8 | "file": "LICENSE" 9 | }, 10 | "authors": { 11 | "Adam Cichy": "adam@moonlightapps.com" 12 | }, 13 | "social_media_url": "https://www.facebook.com/Moonlight-Apps-146257068893019/", 14 | "platforms": { 15 | "ios": "8.0", 16 | "osx": "10.9", 17 | "tvos": "9.0" 18 | }, 19 | "source": { 20 | "git": "https://github.com/adamcichy/SwiftySound.git", 21 | "tag": "1.2.0" 22 | }, 23 | "source_files": "Sources/**/*.swift", 24 | "frameworks": [ 25 | "Foundation", 26 | "AVFoundation" 27 | ], 28 | "swift_versions": "5.1", 29 | "swift_version": "5.1" 30 | } 31 | -------------------------------------------------------------------------------- /Pods/SSEventFlow/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2016 Simon Strandgaard 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /Pods/SSEventFlow/SSEventFlow_Framework/Classes/Flow.swift: -------------------------------------------------------------------------------- 1 | // MIT license. Copyright (c) 2020 Simon Strandgaard. All rights reserved. 2 | public protocol FlowEvent {} 3 | 4 | extension FlowEvent { 5 | /// Send event to all installed dispatchers 6 | public func fire() { FlowManager.shared.dispatch(self) } 7 | } 8 | 9 | public protocol FlowDispatcher: class { 10 | func flow_dispatch(_ event: FlowEvent) 11 | } 12 | 13 | extension FlowDispatcher { 14 | /// Start listening for events. Does nothing if already started. 15 | public func flow_start() { FlowManager.shared.install(self) } 16 | 17 | /// Stop listening for events. Does nothing if already stopped. 18 | public func flow_stop() { FlowManager.shared.uninstall(self) } 19 | } 20 | 21 | internal class FlowManager { 22 | static var shared = FlowManager() 23 | 24 | struct Box { 25 | weak var dispatcher: FlowDispatcher? 26 | } 27 | var boxes = [Box]() 28 | 29 | func dispatch(_ event: FlowEvent) { 30 | purge() 31 | for box in boxes { box.dispatcher?.flow_dispatch(event) } 32 | } 33 | 34 | func purge() { 35 | boxes = boxes.filter { $0.dispatcher != nil } 36 | } 37 | 38 | func reset() { 39 | boxes = [] 40 | } 41 | 42 | func install(_ dispatcher: FlowDispatcher) { 43 | uninstall(dispatcher) 44 | boxes.append(Box(dispatcher: dispatcher)) 45 | } 46 | 47 | func uninstall(_ dispatcher: FlowDispatcher) { 48 | boxes = boxes.filter { $0.dispatcher !== dispatcher } 49 | purge() 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /Pods/SwiftCSV/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 Naoto Kaneko 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /Pods/SwiftCSV/SwiftCSV/Description.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Description.swift 3 | // SwiftCSV 4 | // 5 | // Created by Will Richardson on 11/04/16. 6 | // Copyright © 2016 Naoto Kaneko. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | extension CSV: CustomStringConvertible { 12 | public var description: String { 13 | let head = header.joined(separator: ",") + "\n" 14 | 15 | let cont = namedRows.map { row in 16 | header.map { row[$0]! }.joined(separator: ",") 17 | }.joined(separator: "\n") 18 | return head + cont 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Pods/SwiftCSV/SwiftCSV/EnumeratedView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EnumeratedView.swift 3 | // SwiftCSV 4 | // 5 | // Created by Christian Tietze on 25/10/16. 6 | // Copyright © 2016 Naoto Kaneko. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | public struct EnumeratedView: View { 12 | 13 | public struct Column { 14 | public let header: String 15 | public let rows: [String] 16 | } 17 | 18 | public private(set) var rows: [[String]] 19 | public private(set) var columns: [Column] 20 | 21 | public init(header: [String], text: String, delimiter: Character, limitTo: Int? = nil, loadColumns: Bool = false) throws { 22 | 23 | var rows = [[String]]() 24 | var columns: [EnumeratedView.Column] = [] 25 | 26 | try Parser.enumerateAsArray(text: text, delimiter: delimiter, limitTo: limitTo, startAt: 1) { fields in 27 | rows.append(fields) 28 | } 29 | 30 | if loadColumns { 31 | columns = header.enumerated().map { (index: Int, header: String) -> EnumeratedView.Column in 32 | 33 | return EnumeratedView.Column( 34 | header: header, 35 | rows: rows.map { $0[index] }) 36 | } 37 | } 38 | 39 | self.rows = rows 40 | self.columns = columns 41 | } 42 | 43 | } 44 | -------------------------------------------------------------------------------- /Pods/SwiftCSV/SwiftCSV/NamedView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NamedView.swift 3 | // SwiftCSV 4 | // 5 | // Created by Christian Tietze on 22/10/16. 6 | // Copyright © 2016 Naoto Kaneko. All rights reserved. 7 | // 8 | 9 | public struct NamedView: View { 10 | 11 | public var rows: [[String : String]] 12 | public var columns: [String : [String]] 13 | 14 | public init(header: [String], text: String, delimiter: Character, limitTo: Int? = nil, loadColumns: Bool = false) throws { 15 | 16 | var rows = [[String: String]]() 17 | var columns = [String: [String]]() 18 | 19 | try Parser.enumerateAsDict(header: header, content: text, delimiter: delimiter, limitTo: limitTo) { dict in 20 | rows.append(dict) 21 | } 22 | 23 | if loadColumns { 24 | for field in header { 25 | columns[field] = rows.map { $0[field] ?? "" } 26 | } 27 | } 28 | 29 | self.rows = rows 30 | self.columns = columns 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Pods/SwiftCSV/SwiftCSV/String+Lines.swift: -------------------------------------------------------------------------------- 1 | // 2 | // String+Lines.swift 3 | // SwiftCSV 4 | // 5 | // Created by Naoto Kaneko on 2/24/16. 6 | // Copyright © 2016 Naoto Kaneko. All rights reserved. 7 | // 8 | 9 | extension String { 10 | internal var firstLine: String { 11 | var current = startIndex 12 | while current < endIndex && self[current].isNewline == false { 13 | current = self.index(after: current) 14 | } 15 | return String(self[..=5.0) 18 | internal extension Data { 19 | @usableFromInline 20 | func withUnsafeBytes(_ body: (UnsafeRawBufferPointer) throws -> T) rethrows -> T { 21 | let c = count 22 | return try withUnsafeBytes { (p: UnsafePointer) throws -> T in 23 | try body(UnsafeRawBufferPointer(start: p, count: c)) 24 | } 25 | } 26 | 27 | mutating func withUnsafeMutableBytes(_ body: (UnsafeMutableRawBufferPointer) throws -> T) rethrows -> T { 28 | let c = count 29 | return try withUnsafeMutableBytes { (p: UnsafeMutablePointer) throws -> T in 30 | try body(UnsafeMutableRawBufferPointer(start: p, count: c)) 31 | } 32 | } 33 | } 34 | #endif 35 | -------------------------------------------------------------------------------- /Pods/SwiftProtobuf/Sources/SwiftProtobuf/JSONDecodingOptions.swift: -------------------------------------------------------------------------------- 1 | // Sources/SwiftProtobuf/JSONDecodingOptions.swift - JSON decoding options 2 | // 3 | // Copyright (c) 2014 - 2017 Apple Inc. and the project authors 4 | // Licensed under Apache License v2.0 with Runtime Library Exception 5 | // 6 | // See LICENSE.txt for license information: 7 | // https://github.com/apple/swift-protobuf/blob/master/LICENSE.txt 8 | // 9 | // ----------------------------------------------------------------------------- 10 | /// 11 | /// JSON decoding options 12 | /// 13 | // ----------------------------------------------------------------------------- 14 | 15 | /// Options for JSONDecoding. 16 | public struct JSONDecodingOptions { 17 | /// The maximum nesting of message with messages. The default is 100. 18 | /// 19 | /// To prevent corrupt or malicious messages from causing stack overflows, 20 | /// this controls how deep messages can be nested within other messages 21 | /// while parsing. 22 | public var messageDepthLimit: Int = 100 23 | 24 | /// If unknown fields in the JSON should be ignored. If they aren't 25 | /// ignored, an error will be raised if one is encountered. 26 | public var ignoreUnknownFields: Bool = false 27 | 28 | public init() {} 29 | } 30 | -------------------------------------------------------------------------------- /Pods/SwiftProtobuf/Sources/SwiftProtobuf/JSONEncodingOptions.swift: -------------------------------------------------------------------------------- 1 | // Sources/SwiftProtobuf/JSONEncodingOptions.swift - JSON encoding options 2 | // 3 | // Copyright (c) 2014 - 2018 Apple Inc. and the project authors 4 | // Licensed under Apache License v2.0 with Runtime Library Exception 5 | // 6 | // See LICENSE.txt for license information: 7 | // https://github.com/apple/swift-protobuf/blob/master/LICENSE.txt 8 | // 9 | // ----------------------------------------------------------------------------- 10 | /// 11 | /// JSON encoding options 12 | /// 13 | // ----------------------------------------------------------------------------- 14 | 15 | /// Options for JSONEncoding. 16 | public struct JSONEncodingOptions { 17 | 18 | /// Always print enums as ints. By default they are printed as strings. 19 | public var alwaysPrintEnumsAsInts: Bool = false 20 | 21 | /// Whether to preserve proto field names. 22 | /// By default they are converted to JSON(lowerCamelCase) names. 23 | public var preserveProtoFieldNames: Bool = false 24 | 25 | public init() {} 26 | } 27 | -------------------------------------------------------------------------------- /Pods/SwiftProtobuf/Sources/SwiftProtobuf/ProtoNameProviding.swift: -------------------------------------------------------------------------------- 1 | // Sources/SwiftProtobuf/ProtoNameProviding.swift - Support for accessing proto names 2 | // 3 | // Copyright (c) 2014 - 2016 Apple Inc. and the project authors 4 | // Licensed under Apache License v2.0 with Runtime Library Exception 5 | // 6 | // See LICENSE.txt for license information: 7 | // https://github.com/apple/swift-protobuf/blob/master/LICENSE.txt 8 | // 9 | // ----------------------------------------------------------------------------- 10 | 11 | 12 | /// SwiftProtobuf Internal: Common support looking up field names. 13 | /// 14 | /// Messages conform to this protocol to provide the proto/text and JSON field 15 | /// names for their fields. This allows these names to be pulled out into 16 | /// extensions in separate files so that users can omit them in release builds 17 | /// (reducing bloat and minimizing leaks of field names). 18 | public protocol _ProtoNameProviding { 19 | 20 | /// The mapping between field numbers and proto/JSON field names defined in 21 | /// the conforming message type. 22 | static var _protobuf_nameMap: _NameMap { get } 23 | } 24 | -------------------------------------------------------------------------------- /Pods/SwiftProtobuf/Sources/SwiftProtobuf/ProtobufMap.swift: -------------------------------------------------------------------------------- 1 | // Sources/SwiftProtobuf/ProtobufMap.swift - Map<> support 2 | // 3 | // Copyright (c) 2014 - 2016 Apple Inc. and the project authors 4 | // Licensed under Apache License v2.0 with Runtime Library Exception 5 | // 6 | // See LICENSE.txt for license information: 7 | // https://github.com/apple/swift-protobuf/blob/master/LICENSE.txt 8 | // 9 | // ----------------------------------------------------------------------------- 10 | /// 11 | /// Generic type representing proto map<> fields. 12 | /// 13 | // ----------------------------------------------------------------------------- 14 | 15 | import Foundation 16 | 17 | /// SwiftProtobuf Internal: Support for Encoding/Decoding. 18 | public struct _ProtobufMap 19 | { 20 | public typealias Key = KeyType.BaseType 21 | public typealias Value = ValueType.BaseType 22 | public typealias BaseType = Dictionary 23 | } 24 | 25 | /// SwiftProtobuf Internal: Support for Encoding/Decoding. 26 | public struct _ProtobufMessageMap 27 | { 28 | public typealias Key = KeyType.BaseType 29 | public typealias Value = ValueType 30 | public typealias BaseType = Dictionary 31 | } 32 | 33 | /// SwiftProtobuf Internal: Support for Encoding/Decoding. 34 | public struct _ProtobufEnumMap 35 | { 36 | public typealias Key = KeyType.BaseType 37 | public typealias Value = ValueType 38 | public typealias BaseType = Dictionary 39 | } 40 | -------------------------------------------------------------------------------- /Pods/SwiftProtobuf/Sources/SwiftProtobuf/TextFormatEncodingOptions.swift: -------------------------------------------------------------------------------- 1 | // Sources/SwiftProtobuf/TextFormatEncodingOptions.swift - Text format encoding options 2 | // 3 | // Copyright (c) 2014 - 2019 Apple Inc. and the project authors 4 | // Licensed under Apache License v2.0 with Runtime Library Exception 5 | // 6 | // See LICENSE.txt for license information: 7 | // https://github.com/apple/swift-protobuf/blob/master/LICENSE.txt 8 | // 9 | // ----------------------------------------------------------------------------- 10 | /// 11 | /// Text format encoding options 12 | /// 13 | // ----------------------------------------------------------------------------- 14 | 15 | /// Options for TextFormatEncoding. 16 | public struct TextFormatEncodingOptions { 17 | 18 | /// Default: Do print unknown fields using numeric notation 19 | public var printUnknownFields: Bool = true 20 | 21 | public init() {} 22 | } 23 | -------------------------------------------------------------------------------- /Pods/SwiftProtobuf/Sources/SwiftProtobuf/UnsafeBufferPointer+Shims.swift: -------------------------------------------------------------------------------- 1 | // Sources/SwiftProtobuf/UnsafeBufferPointer+Shims.swift - Shims for UnsafeBufferPointer 2 | // 3 | // Copyright (c) 2019 Apple Inc. and the project authors 4 | // Licensed under Apache License v2.0 with Runtime Library Exception 5 | // 6 | // See LICENSE.txt for license information: 7 | // https://github.com/apple/swift-protobuf/blob/master/LICENSE.txt 8 | // 9 | // ----------------------------------------------------------------------------- 10 | /// 11 | /// Shims for UnsafeBufferPointer 12 | /// 13 | // ----------------------------------------------------------------------------- 14 | 15 | 16 | extension UnsafeMutableBufferPointer { 17 | #if !swift(>=4.2) 18 | internal static func allocate(capacity: Int) -> UnsafeMutableBufferPointer { 19 | let pointer = UnsafeMutablePointer.allocate(capacity: capacity) 20 | return UnsafeMutableBufferPointer(start: pointer, count: capacity) 21 | } 22 | #endif 23 | 24 | #if !swift(>=4.1) 25 | internal func deallocate() { 26 | self.baseAddress?.deallocate(capacity: self.count) 27 | } 28 | #endif 29 | } 30 | 31 | extension UnsafeMutableRawBufferPointer { 32 | #if !swift(>=4.1) 33 | internal func copyMemory(from source: C) where C.Element == UInt8 { 34 | self.copyBytes(from: source) 35 | } 36 | #endif 37 | } 38 | -------------------------------------------------------------------------------- /Pods/SwiftProtobuf/Sources/SwiftProtobuf/Version.swift: -------------------------------------------------------------------------------- 1 | // Sources/SwiftProtobuf/Version.swift - Runtime Version info 2 | // 3 | // Copyright (c) 2014 - 2017 Apple Inc. and the project authors 4 | // Licensed under Apache License v2.0 with Runtime Library Exception 5 | // 6 | // See LICENSE.txt for license information: 7 | // https://github.com/apple/swift-protobuf/blob/master/LICENSE.txt 8 | // 9 | // ----------------------------------------------------------------------------- 10 | /// 11 | /// A interface for exposing the version of the runtime. 12 | /// 13 | // ----------------------------------------------------------------------------- 14 | 15 | import Foundation 16 | 17 | // Expose version information about the library. 18 | public struct Version { 19 | /// Major version. 20 | public static let major = 1 21 | /// Minor version. 22 | public static let minor = 8 23 | /// Revision number. 24 | public static let revision = 0 25 | 26 | /// String form of the version number. 27 | public static let versionString = "\(major).\(minor).\(revision)" 28 | } 29 | -------------------------------------------------------------------------------- /Pods/SwiftyBeaver/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Sebastian Kreutzberger 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Pods/SwiftyBeaver/Sources/Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Extensions.swift 3 | // SwiftyBeaver 4 | // 5 | // Created by Sebastian Kreutzberger on 13.12.17. 6 | // Copyright © 2017 Sebastian Kreutzberger. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | extension String { 12 | /// cross-Swift compatible characters count 13 | var length: Int { 14 | return self.count 15 | } 16 | 17 | /// cross-Swift-compatible first character 18 | var firstChar: Character? { 19 | return self.first 20 | } 21 | 22 | /// cross-Swift-compatible last character 23 | var lastChar: Character? { 24 | return self.last 25 | } 26 | 27 | /// cross-Swift-compatible index 28 | func find(_ char: Character) -> Index? { 29 | #if swift(>=5) 30 | return self.firstIndex(of: char) 31 | #else 32 | return self.index(of: char) 33 | #endif 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /Pods/SwiftySound/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Adam Cichy 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-BasePodsIOS-AppIOS/Pods-BasePodsIOS-AppIOS-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-BasePodsIOS-AppIOS/Pods-BasePodsIOS-AppIOS-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_BasePodsIOS_AppIOS : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_BasePodsIOS_AppIOS 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-BasePodsIOS-AppIOS/Pods-BasePodsIOS-AppIOS-frameworks-Debug-input-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${PODS_ROOT}/Target Support Files/Pods-BasePodsIOS-AppIOS/Pods-BasePodsIOS-AppIOS-frameworks.sh 2 | ${BUILT_PRODUCTS_DIR}/SSEventFlow-iOS/SSEventFlow.framework 3 | ${BUILT_PRODUCTS_DIR}/SwiftCSV-iOS/SwiftCSV.framework 4 | ${BUILT_PRODUCTS_DIR}/SwiftProtobuf-iOS/SwiftProtobuf.framework 5 | ${BUILT_PRODUCTS_DIR}/SwiftyBeaver-iOS/SwiftyBeaver.framework 6 | ${BUILT_PRODUCTS_DIR}/SwiftySound-iOS/SwiftySound.framework -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-BasePodsIOS-AppIOS/Pods-BasePodsIOS-AppIOS-frameworks-Debug-output-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SSEventFlow.framework 2 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftCSV.framework 3 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftProtobuf.framework 4 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftyBeaver.framework 5 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftySound.framework -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-BasePodsIOS-AppIOS/Pods-BasePodsIOS-AppIOS-frameworks-Release-input-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${PODS_ROOT}/Target Support Files/Pods-BasePodsIOS-AppIOS/Pods-BasePodsIOS-AppIOS-frameworks.sh 2 | ${BUILT_PRODUCTS_DIR}/SSEventFlow-iOS/SSEventFlow.framework 3 | ${BUILT_PRODUCTS_DIR}/SwiftCSV-iOS/SwiftCSV.framework 4 | ${BUILT_PRODUCTS_DIR}/SwiftProtobuf-iOS/SwiftProtobuf.framework 5 | ${BUILT_PRODUCTS_DIR}/SwiftyBeaver-iOS/SwiftyBeaver.framework 6 | ${BUILT_PRODUCTS_DIR}/SwiftySound-iOS/SwiftySound.framework -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-BasePodsIOS-AppIOS/Pods-BasePodsIOS-AppIOS-frameworks-Release-output-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SSEventFlow.framework 2 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftCSV.framework 3 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftProtobuf.framework 4 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftyBeaver.framework 5 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftySound.framework -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-BasePodsIOS-AppIOS/Pods-BasePodsIOS-AppIOS-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_BasePodsIOS_AppIOSVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_BasePodsIOS_AppIOSVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-BasePodsIOS-AppIOS/Pods-BasePodsIOS-AppIOS.debug.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SSEventFlow-iOS" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftCSV-iOS" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftProtobuf-iOS" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver-iOS" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftySound-iOS" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SSEventFlow-iOS/SSEventFlow.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftCSV-iOS/SwiftCSV.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftProtobuf-iOS/SwiftProtobuf.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver-iOS/SwiftyBeaver.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftySound-iOS/SwiftySound.framework/Headers" 5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 6 | OTHER_LDFLAGS = $(inherited) -framework "AVFoundation" -framework "Foundation" -framework "SSEventFlow" -framework "SwiftCSV" -framework "SwiftProtobuf" -framework "SwiftyBeaver" -framework "SwiftySound" 7 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 8 | PODS_BUILD_DIR = ${BUILD_DIR} 9 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 10 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 13 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-BasePodsIOS-AppIOS/Pods-BasePodsIOS-AppIOS.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_BasePodsIOS_AppIOS { 2 | umbrella header "Pods-BasePodsIOS-AppIOS-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-BasePodsIOS-AppIOS/Pods-BasePodsIOS-AppIOS.release.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SSEventFlow-iOS" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftCSV-iOS" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftProtobuf-iOS" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver-iOS" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftySound-iOS" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SSEventFlow-iOS/SSEventFlow.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftCSV-iOS/SwiftCSV.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftProtobuf-iOS/SwiftProtobuf.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver-iOS/SwiftyBeaver.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftySound-iOS/SwiftySound.framework/Headers" 5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 6 | OTHER_LDFLAGS = $(inherited) -framework "AVFoundation" -framework "Foundation" -framework "SSEventFlow" -framework "SwiftCSV" -framework "SwiftProtobuf" -framework "SwiftyBeaver" -framework "SwiftySound" 7 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 8 | PODS_BUILD_DIR = ${BUILD_DIR} 9 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 10 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 13 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-BasePodsIOS-EngineIOS/Pods-BasePodsIOS-EngineIOS-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-BasePodsIOS-EngineIOS/Pods-BasePodsIOS-EngineIOS-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_BasePodsIOS_EngineIOS : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_BasePodsIOS_EngineIOS 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-BasePodsIOS-EngineIOS/Pods-BasePodsIOS-EngineIOS-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_BasePodsIOS_EngineIOSVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_BasePodsIOS_EngineIOSVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-BasePodsIOS-EngineIOS/Pods-BasePodsIOS-EngineIOS.debug.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SwiftCSV-iOS" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftProtobuf-iOS" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver-iOS" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftySound-iOS" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SwiftCSV-iOS/SwiftCSV.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftProtobuf-iOS/SwiftProtobuf.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver-iOS/SwiftyBeaver.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftySound-iOS/SwiftySound.framework/Headers" 4 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' '@executable_path/../../Frameworks' 5 | OTHER_LDFLAGS = $(inherited) -framework "AVFoundation" -framework "Foundation" -framework "SwiftCSV" -framework "SwiftProtobuf" -framework "SwiftyBeaver" -framework "SwiftySound" 6 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 7 | PODS_BUILD_DIR = ${BUILD_DIR} 8 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 9 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 10 | PODS_ROOT = ${SRCROOT}/Pods 11 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 12 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-BasePodsIOS-EngineIOS/Pods-BasePodsIOS-EngineIOS.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_BasePodsIOS_EngineIOS { 2 | umbrella header "Pods-BasePodsIOS-EngineIOS-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-BasePodsIOS-EngineIOS/Pods-BasePodsIOS-EngineIOS.release.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SwiftCSV-iOS" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftProtobuf-iOS" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver-iOS" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftySound-iOS" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SwiftCSV-iOS/SwiftCSV.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftProtobuf-iOS/SwiftProtobuf.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver-iOS/SwiftyBeaver.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftySound-iOS/SwiftySound.framework/Headers" 4 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' '@executable_path/../../Frameworks' 5 | OTHER_LDFLAGS = $(inherited) -framework "AVFoundation" -framework "Foundation" -framework "SwiftCSV" -framework "SwiftProtobuf" -framework "SwiftyBeaver" -framework "SwiftySound" 6 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 7 | PODS_BUILD_DIR = ${BUILD_DIR} 8 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 9 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 10 | PODS_ROOT = ${SRCROOT}/Pods 11 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 12 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-BasePodsMAC-AppMac/Pods-BasePodsMAC-AppMac-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-BasePodsMAC-AppMac/Pods-BasePodsMAC-AppMac-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_BasePodsMAC_AppMac : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_BasePodsMAC_AppMac 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-BasePodsMAC-AppMac/Pods-BasePodsMAC-AppMac-frameworks-Debug-input-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${PODS_ROOT}/Target Support Files/Pods-BasePodsMAC-AppMac/Pods-BasePodsMAC-AppMac-frameworks.sh 2 | ${BUILT_PRODUCTS_DIR}/SSEventFlow-macOS/SSEventFlow.framework 3 | ${BUILT_PRODUCTS_DIR}/SwiftCSV-macOS/SwiftCSV.framework 4 | ${BUILT_PRODUCTS_DIR}/SwiftProtobuf-macOS/SwiftProtobuf.framework 5 | ${BUILT_PRODUCTS_DIR}/SwiftyBeaver-macOS/SwiftyBeaver.framework 6 | ${BUILT_PRODUCTS_DIR}/SwiftySound-macOS/SwiftySound.framework -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-BasePodsMAC-AppMac/Pods-BasePodsMAC-AppMac-frameworks-Debug-output-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SSEventFlow.framework 2 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftCSV.framework 3 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftProtobuf.framework 4 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftyBeaver.framework 5 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftySound.framework -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-BasePodsMAC-AppMac/Pods-BasePodsMAC-AppMac-frameworks-Release-input-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${PODS_ROOT}/Target Support Files/Pods-BasePodsMAC-AppMac/Pods-BasePodsMAC-AppMac-frameworks.sh 2 | ${BUILT_PRODUCTS_DIR}/SSEventFlow-macOS/SSEventFlow.framework 3 | ${BUILT_PRODUCTS_DIR}/SwiftCSV-macOS/SwiftCSV.framework 4 | ${BUILT_PRODUCTS_DIR}/SwiftProtobuf-macOS/SwiftProtobuf.framework 5 | ${BUILT_PRODUCTS_DIR}/SwiftyBeaver-macOS/SwiftyBeaver.framework 6 | ${BUILT_PRODUCTS_DIR}/SwiftySound-macOS/SwiftySound.framework -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-BasePodsMAC-AppMac/Pods-BasePodsMAC-AppMac-frameworks-Release-output-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SSEventFlow.framework 2 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftCSV.framework 3 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftProtobuf.framework 4 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftyBeaver.framework 5 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftySound.framework -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-BasePodsMAC-AppMac/Pods-BasePodsMAC-AppMac-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_BasePodsMAC_AppMacVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_BasePodsMAC_AppMacVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-BasePodsMAC-AppMac/Pods-BasePodsMAC-AppMac.debug.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SSEventFlow-macOS" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftCSV-macOS" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftProtobuf-macOS" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver-macOS" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftySound-macOS" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SSEventFlow-macOS/SSEventFlow.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftCSV-macOS/SwiftCSV.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftProtobuf-macOS/SwiftProtobuf.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver-macOS/SwiftyBeaver.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftySound-macOS/SwiftySound.framework/Headers" 5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/../Frameworks' '@loader_path/Frameworks' 6 | OTHER_LDFLAGS = $(inherited) -framework "AVFoundation" -framework "Foundation" -framework "SSEventFlow" -framework "SwiftCSV" -framework "SwiftProtobuf" -framework "SwiftyBeaver" -framework "SwiftySound" 7 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 8 | PODS_BUILD_DIR = ${BUILD_DIR} 9 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 10 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 13 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-BasePodsMAC-AppMac/Pods-BasePodsMAC-AppMac.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_BasePodsMAC_AppMac { 2 | umbrella header "Pods-BasePodsMAC-AppMac-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-BasePodsMAC-AppMac/Pods-BasePodsMAC-AppMac.release.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SSEventFlow-macOS" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftCSV-macOS" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftProtobuf-macOS" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver-macOS" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftySound-macOS" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SSEventFlow-macOS/SSEventFlow.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftCSV-macOS/SwiftCSV.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftProtobuf-macOS/SwiftProtobuf.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver-macOS/SwiftyBeaver.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftySound-macOS/SwiftySound.framework/Headers" 5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/../Frameworks' '@loader_path/Frameworks' 6 | OTHER_LDFLAGS = $(inherited) -framework "AVFoundation" -framework "Foundation" -framework "SSEventFlow" -framework "SwiftCSV" -framework "SwiftProtobuf" -framework "SwiftyBeaver" -framework "SwiftySound" 7 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 8 | PODS_BUILD_DIR = ${BUILD_DIR} 9 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 10 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 13 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-BasePodsMAC-EngineMac/Pods-BasePodsMAC-EngineMac-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-BasePodsMAC-EngineMac/Pods-BasePodsMAC-EngineMac-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_BasePodsMAC_EngineMac : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_BasePodsMAC_EngineMac 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-BasePodsMAC-EngineMac/Pods-BasePodsMAC-EngineMac-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_BasePodsMAC_EngineMacVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_BasePodsMAC_EngineMacVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-BasePodsMAC-EngineMac/Pods-BasePodsMAC-EngineMac.debug.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SwiftCSV-macOS" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftProtobuf-macOS" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver-macOS" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftySound-macOS" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SwiftCSV-macOS/SwiftCSV.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftProtobuf-macOS/SwiftProtobuf.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver-macOS/SwiftyBeaver.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftySound-macOS/SwiftySound.framework/Headers" 4 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/../Frameworks' '@loader_path/Frameworks' 5 | OTHER_LDFLAGS = $(inherited) -framework "AVFoundation" -framework "Foundation" -framework "SwiftCSV" -framework "SwiftProtobuf" -framework "SwiftyBeaver" -framework "SwiftySound" 6 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 7 | PODS_BUILD_DIR = ${BUILD_DIR} 8 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 9 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 10 | PODS_ROOT = ${SRCROOT}/Pods 11 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 12 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-BasePodsMAC-EngineMac/Pods-BasePodsMAC-EngineMac.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_BasePodsMAC_EngineMac { 2 | umbrella header "Pods-BasePodsMAC-EngineMac-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-BasePodsMAC-EngineMac/Pods-BasePodsMAC-EngineMac.release.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SwiftCSV-macOS" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftProtobuf-macOS" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver-macOS" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftySound-macOS" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SwiftCSV-macOS/SwiftCSV.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftProtobuf-macOS/SwiftProtobuf.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver-macOS/SwiftyBeaver.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftySound-macOS/SwiftySound.framework/Headers" 4 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/../Frameworks' '@loader_path/Frameworks' 5 | OTHER_LDFLAGS = $(inherited) -framework "AVFoundation" -framework "Foundation" -framework "SwiftCSV" -framework "SwiftProtobuf" -framework "SwiftyBeaver" -framework "SwiftySound" 6 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 7 | PODS_BUILD_DIR = ${BUILD_DIR} 8 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 9 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 10 | PODS_ROOT = ${SRCROOT}/Pods 11 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 12 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-BasePodsMAC-EngineMacTests/Pods-BasePodsMAC-EngineMacTests-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-BasePodsMAC-EngineMacTests/Pods-BasePodsMAC-EngineMacTests-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_BasePodsMAC_EngineMacTests : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_BasePodsMAC_EngineMacTests 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-BasePodsMAC-EngineMacTests/Pods-BasePodsMAC-EngineMacTests-frameworks-Debug-input-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${PODS_ROOT}/Target Support Files/Pods-BasePodsMAC-EngineMacTests/Pods-BasePodsMAC-EngineMacTests-frameworks.sh 2 | ${BUILT_PRODUCTS_DIR}/SwiftCSV-macOS/SwiftCSV.framework 3 | ${BUILT_PRODUCTS_DIR}/SwiftProtobuf-macOS/SwiftProtobuf.framework 4 | ${BUILT_PRODUCTS_DIR}/SwiftyBeaver-macOS/SwiftyBeaver.framework 5 | ${BUILT_PRODUCTS_DIR}/SwiftySound-macOS/SwiftySound.framework -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-BasePodsMAC-EngineMacTests/Pods-BasePodsMAC-EngineMacTests-frameworks-Debug-output-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftCSV.framework 2 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftProtobuf.framework 3 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftyBeaver.framework 4 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftySound.framework -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-BasePodsMAC-EngineMacTests/Pods-BasePodsMAC-EngineMacTests-frameworks-Release-input-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${PODS_ROOT}/Target Support Files/Pods-BasePodsMAC-EngineMacTests/Pods-BasePodsMAC-EngineMacTests-frameworks.sh 2 | ${BUILT_PRODUCTS_DIR}/SwiftCSV-macOS/SwiftCSV.framework 3 | ${BUILT_PRODUCTS_DIR}/SwiftProtobuf-macOS/SwiftProtobuf.framework 4 | ${BUILT_PRODUCTS_DIR}/SwiftyBeaver-macOS/SwiftyBeaver.framework 5 | ${BUILT_PRODUCTS_DIR}/SwiftySound-macOS/SwiftySound.framework -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-BasePodsMAC-EngineMacTests/Pods-BasePodsMAC-EngineMacTests-frameworks-Release-output-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftCSV.framework 2 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftProtobuf.framework 3 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftyBeaver.framework 4 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftySound.framework -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-BasePodsMAC-EngineMacTests/Pods-BasePodsMAC-EngineMacTests-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_BasePodsMAC_EngineMacTestsVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_BasePodsMAC_EngineMacTestsVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-BasePodsMAC-EngineMacTests/Pods-BasePodsMAC-EngineMacTests.debug.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SwiftCSV-macOS" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftProtobuf-macOS" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver-macOS" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftySound-macOS" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SwiftCSV-macOS/SwiftCSV.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftProtobuf-macOS/SwiftProtobuf.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver-macOS/SwiftyBeaver.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftySound-macOS/SwiftySound.framework/Headers" 5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/../Frameworks' '@loader_path/../Frameworks' 6 | OTHER_LDFLAGS = $(inherited) -framework "AVFoundation" -framework "Foundation" -framework "SwiftCSV" -framework "SwiftProtobuf" -framework "SwiftyBeaver" -framework "SwiftySound" 7 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 8 | PODS_BUILD_DIR = ${BUILD_DIR} 9 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 10 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 13 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-BasePodsMAC-EngineMacTests/Pods-BasePodsMAC-EngineMacTests.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_BasePodsMAC_EngineMacTests { 2 | umbrella header "Pods-BasePodsMAC-EngineMacTests-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-BasePodsMAC-EngineMacTests/Pods-BasePodsMAC-EngineMacTests.release.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SwiftCSV-macOS" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftProtobuf-macOS" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver-macOS" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftySound-macOS" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SwiftCSV-macOS/SwiftCSV.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftProtobuf-macOS/SwiftProtobuf.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver-macOS/SwiftyBeaver.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftySound-macOS/SwiftySound.framework/Headers" 5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/../Frameworks' '@loader_path/../Frameworks' 6 | OTHER_LDFLAGS = $(inherited) -framework "AVFoundation" -framework "Foundation" -framework "SwiftCSV" -framework "SwiftProtobuf" -framework "SwiftyBeaver" -framework "SwiftySound" 7 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 8 | PODS_BUILD_DIR = ${BUILD_DIR} 9 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 10 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 13 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SSEventFlow-iOS/SSEventFlow-iOS-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.3.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SSEventFlow-iOS/SSEventFlow-iOS-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_SSEventFlow_iOS : NSObject 3 | @end 4 | @implementation PodsDummy_SSEventFlow_iOS 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SSEventFlow-iOS/SSEventFlow-iOS-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SSEventFlow-iOS/SSEventFlow-iOS-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double SSEventFlowVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char SSEventFlowVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SSEventFlow-iOS/SSEventFlow-iOS.modulemap: -------------------------------------------------------------------------------- 1 | framework module SSEventFlow { 2 | umbrella header "SSEventFlow-iOS-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SSEventFlow-iOS/SSEventFlow-iOS.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SSEventFlow-iOS 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 4 | PODS_BUILD_DIR = ${BUILD_DIR} 5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/SSEventFlow 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 11 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SSEventFlow-macOS/SSEventFlow-macOS-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.3.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SSEventFlow-macOS/SSEventFlow-macOS-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_SSEventFlow_macOS : NSObject 3 | @end 4 | @implementation PodsDummy_SSEventFlow_macOS 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SSEventFlow-macOS/SSEventFlow-macOS-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SSEventFlow-macOS/SSEventFlow-macOS-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double SSEventFlowVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char SSEventFlowVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SSEventFlow-macOS/SSEventFlow-macOS.modulemap: -------------------------------------------------------------------------------- 1 | framework module SSEventFlow { 2 | umbrella header "SSEventFlow-macOS-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SSEventFlow-macOS/SSEventFlow-macOS.xcconfig: -------------------------------------------------------------------------------- 1 | CODE_SIGN_IDENTITY = 2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SSEventFlow-macOS 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/SSEventFlow 9 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 10 | SKIP_INSTALL = YES 11 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 12 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftCSV-iOS/SwiftCSV-iOS-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 0.5.5 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftCSV-iOS/SwiftCSV-iOS-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_SwiftCSV_iOS : NSObject 3 | @end 4 | @implementation PodsDummy_SwiftCSV_iOS 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftCSV-iOS/SwiftCSV-iOS-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftCSV-iOS/SwiftCSV-iOS-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double SwiftCSVVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char SwiftCSVVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftCSV-iOS/SwiftCSV-iOS.modulemap: -------------------------------------------------------------------------------- 1 | framework module SwiftCSV { 2 | umbrella header "SwiftCSV-iOS-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftCSV-iOS/SwiftCSV-iOS.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SwiftCSV-iOS 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 4 | PODS_BUILD_DIR = ${BUILD_DIR} 5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/SwiftCSV 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 11 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftCSV-macOS/SwiftCSV-macOS-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 0.5.5 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftCSV-macOS/SwiftCSV-macOS-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_SwiftCSV_macOS : NSObject 3 | @end 4 | @implementation PodsDummy_SwiftCSV_macOS 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftCSV-macOS/SwiftCSV-macOS-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftCSV-macOS/SwiftCSV-macOS-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double SwiftCSVVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char SwiftCSVVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftCSV-macOS/SwiftCSV-macOS.modulemap: -------------------------------------------------------------------------------- 1 | framework module SwiftCSV { 2 | umbrella header "SwiftCSV-macOS-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftCSV-macOS/SwiftCSV-macOS.xcconfig: -------------------------------------------------------------------------------- 1 | CODE_SIGN_IDENTITY = 2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SwiftCSV-macOS 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/SwiftCSV 9 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 10 | SKIP_INSTALL = YES 11 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 12 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftProtobuf-iOS/SwiftProtobuf-iOS-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.8.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftProtobuf-iOS/SwiftProtobuf-iOS-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_SwiftProtobuf_iOS : NSObject 3 | @end 4 | @implementation PodsDummy_SwiftProtobuf_iOS 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftProtobuf-iOS/SwiftProtobuf-iOS-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftProtobuf-iOS/SwiftProtobuf-iOS-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double SwiftProtobufVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char SwiftProtobufVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftProtobuf-iOS/SwiftProtobuf-iOS.modulemap: -------------------------------------------------------------------------------- 1 | framework module SwiftProtobuf { 2 | umbrella header "SwiftProtobuf-iOS-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftProtobuf-iOS/SwiftProtobuf-iOS.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SwiftProtobuf-iOS 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 4 | PODS_BUILD_DIR = ${BUILD_DIR} 5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/SwiftProtobuf 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 11 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftProtobuf-macOS/SwiftProtobuf-macOS-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.8.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftProtobuf-macOS/SwiftProtobuf-macOS-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_SwiftProtobuf_macOS : NSObject 3 | @end 4 | @implementation PodsDummy_SwiftProtobuf_macOS 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftProtobuf-macOS/SwiftProtobuf-macOS-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftProtobuf-macOS/SwiftProtobuf-macOS-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double SwiftProtobufVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char SwiftProtobufVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftProtobuf-macOS/SwiftProtobuf-macOS.modulemap: -------------------------------------------------------------------------------- 1 | framework module SwiftProtobuf { 2 | umbrella header "SwiftProtobuf-macOS-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftProtobuf-macOS/SwiftProtobuf-macOS.xcconfig: -------------------------------------------------------------------------------- 1 | CODE_SIGN_IDENTITY = 2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SwiftProtobuf-macOS 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/SwiftProtobuf 9 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 10 | SKIP_INSTALL = YES 11 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 12 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftyBeaver-iOS/SwiftyBeaver-iOS-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.8.4 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftyBeaver-iOS/SwiftyBeaver-iOS-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_SwiftyBeaver_iOS : NSObject 3 | @end 4 | @implementation PodsDummy_SwiftyBeaver_iOS 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftyBeaver-iOS/SwiftyBeaver-iOS-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftyBeaver-iOS/SwiftyBeaver-iOS-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double SwiftyBeaverVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char SwiftyBeaverVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftyBeaver-iOS/SwiftyBeaver-iOS.modulemap: -------------------------------------------------------------------------------- 1 | framework module SwiftyBeaver { 2 | umbrella header "SwiftyBeaver-iOS-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftyBeaver-iOS/SwiftyBeaver-iOS.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver-iOS 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 4 | PODS_BUILD_DIR = ${BUILD_DIR} 5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/SwiftyBeaver 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 11 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftyBeaver-macOS/SwiftyBeaver-macOS-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.8.4 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftyBeaver-macOS/SwiftyBeaver-macOS-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_SwiftyBeaver_macOS : NSObject 3 | @end 4 | @implementation PodsDummy_SwiftyBeaver_macOS 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftyBeaver-macOS/SwiftyBeaver-macOS-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftyBeaver-macOS/SwiftyBeaver-macOS-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double SwiftyBeaverVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char SwiftyBeaverVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftyBeaver-macOS/SwiftyBeaver-macOS.modulemap: -------------------------------------------------------------------------------- 1 | framework module SwiftyBeaver { 2 | umbrella header "SwiftyBeaver-macOS-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftyBeaver-macOS/SwiftyBeaver-macOS.xcconfig: -------------------------------------------------------------------------------- 1 | CODE_SIGN_IDENTITY = 2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SwiftyBeaver-macOS 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/SwiftyBeaver 9 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 10 | SKIP_INSTALL = YES 11 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 12 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftySound-iOS/SwiftySound-iOS-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.2.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftySound-iOS/SwiftySound-iOS-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_SwiftySound_iOS : NSObject 3 | @end 4 | @implementation PodsDummy_SwiftySound_iOS 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftySound-iOS/SwiftySound-iOS-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftySound-iOS/SwiftySound-iOS-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double SwiftySoundVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char SwiftySoundVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftySound-iOS/SwiftySound-iOS.modulemap: -------------------------------------------------------------------------------- 1 | framework module SwiftySound { 2 | umbrella header "SwiftySound-iOS-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftySound-iOS/SwiftySound-iOS.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SwiftySound-iOS 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | OTHER_LDFLAGS = $(inherited) -framework "AVFoundation" -framework "Foundation" 4 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/SwiftySound 9 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 10 | SKIP_INSTALL = YES 11 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 12 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftySound-macOS/SwiftySound-macOS-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.2.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftySound-macOS/SwiftySound-macOS-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_SwiftySound_macOS : NSObject 3 | @end 4 | @implementation PodsDummy_SwiftySound_macOS 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftySound-macOS/SwiftySound-macOS-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftySound-macOS/SwiftySound-macOS-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double SwiftySoundVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char SwiftySoundVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftySound-macOS/SwiftySound-macOS.modulemap: -------------------------------------------------------------------------------- 1 | framework module SwiftySound { 2 | umbrella header "SwiftySound-macOS-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftySound-macOS/SwiftySound-macOS.xcconfig: -------------------------------------------------------------------------------- 1 | CODE_SIGN_IDENTITY = 2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SwiftySound-macOS 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | OTHER_LDFLAGS = $(inherited) -framework "AVFoundation" -framework "Foundation" 5 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 6 | PODS_BUILD_DIR = ${BUILD_DIR} 7 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_ROOT = ${SRCROOT} 9 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/SwiftySound 10 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 11 | SKIP_INSTALL = YES 12 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 13 | -------------------------------------------------------------------------------- /SnakeGame.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /SnakeGame.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /SnakeGame.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /SnakeGame.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /UI Test/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /fastlane/Fastfile: -------------------------------------------------------------------------------- 1 | lane :ios_screenshots_dark do 2 | capture_ios_screenshots( 3 | dark_mode: true 4 | ) 5 | end 6 | 7 | lane :ios_screenshots_light do 8 | capture_ios_screenshots( 9 | dark_mode: false 10 | ) 11 | end 12 | -------------------------------------------------------------------------------- /fastlane/README.md: -------------------------------------------------------------------------------- 1 | fastlane documentation 2 | ================ 3 | # Installation 4 | 5 | Make sure you have the latest version of the Xcode command line tools installed: 6 | 7 | ``` 8 | xcode-select --install 9 | ``` 10 | 11 | Install _fastlane_ using 12 | ``` 13 | [sudo] gem install fastlane -NV 14 | ``` 15 | or alternatively using `brew install fastlane` 16 | 17 | # Available Actions 18 | ### ios_screenshots_dark 19 | ``` 20 | fastlane ios_screenshots_dark 21 | ``` 22 | 23 | ### ios_screenshots_light 24 | ``` 25 | fastlane ios_screenshots_light 26 | ``` 27 | 28 | 29 | ---- 30 | 31 | This README.md is auto-generated and will be re-generated every time [fastlane](https://fastlane.tools) is run. 32 | More information about fastlane can be found on [fastlane.tools](https://fastlane.tools). 33 | The documentation of fastlane can be found on [docs.fastlane.tools](https://docs.fastlane.tools). 34 | -------------------------------------------------------------------------------- /fastlane/Snapfile: -------------------------------------------------------------------------------- 1 | # Uncomment the lines below you want to change by removing the # in the beginning 2 | 3 | # A list of devices you want to take the screenshots from 4 | devices([ 5 | "iPhone 11 Pro Max", # 6.5 inch display (1242x2688) 6 | "iPhone 8 Plus", # 5.5 inch display (1242x2208) 7 | "iPad Pro (12.9-inch) (4th generation)", # 2048x2732, 12.9 inch display without home button 8 | "iPad Pro (12.9-inch) (2nd generation)", # 2048x2732, 12.9 inch display with home button 9 | ]) 10 | 11 | # languages([ 12 | # "en-US", 13 | # "de-DE", 14 | # "it-IT", 15 | # ["pt", "pt_BR"] # Portuguese with Brazilian locale 16 | # ]) 17 | 18 | # The name of the scheme which contains the UI Tests 19 | scheme("UI Test") 20 | 21 | # Where should the resulting screenshots be stored? 22 | output_directory("./screenshots") 23 | 24 | # remove the '#' to clear all previously generated screenshots before creating new ones 25 | clear_previous_screenshots(true) 26 | 27 | # Remove the '#' to set the status bar to 9:41 AM, and show full battery and reception. 28 | override_status_bar(true) 29 | 30 | # Arguments to pass to the app on launch. See https://docs.fastlane.tools/actions/snapshot/#launch-arguments 31 | launch_arguments([ 32 | "-SELECTED_LEVEL 0 -SNAKE_PLAYERMODE twoPlayer_humanBot" 33 | ]) 34 | 35 | # For more information about all available options run 36 | # fastlane action snapshot 37 | -------------------------------------------------------------------------------- /fastlane/report.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /screenshots/SwiftSnakeEngine_SinglePlayer.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/screenshots/SwiftSnakeEngine_SinglePlayer.gif -------------------------------------------------------------------------------- /screenshots/SwiftSnakeEngine_TwoPlayers.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/screenshots/SwiftSnakeEngine_TwoPlayers.gif -------------------------------------------------------------------------------- /screenshots/SwiftSnakeEngine_iOS0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/screenshots/SwiftSnakeEngine_iOS0.png -------------------------------------------------------------------------------- /screenshots/SwiftSnakeEngine_iOS0_Thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/screenshots/SwiftSnakeEngine_iOS0_Thumb.png -------------------------------------------------------------------------------- /screenshots/SwiftSnakeEngine_iOS1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/screenshots/SwiftSnakeEngine_iOS1.png -------------------------------------------------------------------------------- /screenshots/SwiftSnakeEngine_iOS1_Thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/screenshots/SwiftSnakeEngine_iOS1_Thumb.png -------------------------------------------------------------------------------- /screenshots/SwiftSnakeEngine_iOS2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/screenshots/SwiftSnakeEngine_iOS2.png -------------------------------------------------------------------------------- /screenshots/SwiftSnakeEngine_iOS2_Thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/screenshots/SwiftSnakeEngine_iOS2_Thumb.png -------------------------------------------------------------------------------- /screenshots/SwiftSnakeEngine_iOS3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/screenshots/SwiftSnakeEngine_iOS3.png -------------------------------------------------------------------------------- /screenshots/SwiftSnakeEngine_iOS3_Thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/screenshots/SwiftSnakeEngine_iOS3_Thumb.png -------------------------------------------------------------------------------- /screenshots/SwiftSnakeEngine_macOS4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/screenshots/SwiftSnakeEngine_macOS4.png -------------------------------------------------------------------------------- /screenshots/SwiftSnakeEngine_macOS4_Thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/screenshots/SwiftSnakeEngine_macOS4_Thumb.png -------------------------------------------------------------------------------- /screenshots/SwiftSnakeEngine_macOS5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/screenshots/SwiftSnakeEngine_macOS5.png -------------------------------------------------------------------------------- /screenshots/SwiftSnakeEngine_macOS5_Thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/screenshots/SwiftSnakeEngine_macOS5_Thumb.png -------------------------------------------------------------------------------- /screenshots/en-US/iPad Pro (12.9-inch) (2nd generation)-0Launch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/screenshots/en-US/iPad Pro (12.9-inch) (2nd generation)-0Launch.png -------------------------------------------------------------------------------- /screenshots/en-US/iPad Pro (12.9-inch) (2nd generation)-1Level0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/screenshots/en-US/iPad Pro (12.9-inch) (2nd generation)-1Level0.png -------------------------------------------------------------------------------- /screenshots/en-US/iPad Pro (12.9-inch) (2nd generation)-2Level3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/screenshots/en-US/iPad Pro (12.9-inch) (2nd generation)-2Level3.png -------------------------------------------------------------------------------- /screenshots/en-US/iPad Pro (12.9-inch) (2nd generation)-3Level4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/screenshots/en-US/iPad Pro (12.9-inch) (2nd generation)-3Level4.png -------------------------------------------------------------------------------- /screenshots/en-US/iPad Pro (12.9-inch) (4th generation)-0Launch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/screenshots/en-US/iPad Pro (12.9-inch) (4th generation)-0Launch.png -------------------------------------------------------------------------------- /screenshots/en-US/iPad Pro (12.9-inch) (4th generation)-1Level0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/screenshots/en-US/iPad Pro (12.9-inch) (4th generation)-1Level0.png -------------------------------------------------------------------------------- /screenshots/en-US/iPad Pro (12.9-inch) (4th generation)-2Level3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/screenshots/en-US/iPad Pro (12.9-inch) (4th generation)-2Level3.png -------------------------------------------------------------------------------- /screenshots/en-US/iPad Pro (12.9-inch) (4th generation)-3Level4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/screenshots/en-US/iPad Pro (12.9-inch) (4th generation)-3Level4.png -------------------------------------------------------------------------------- /screenshots/en-US/iPhone 11 Pro Max-0Launch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/screenshots/en-US/iPhone 11 Pro Max-0Launch.png -------------------------------------------------------------------------------- /screenshots/en-US/iPhone 11 Pro Max-1Level0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/screenshots/en-US/iPhone 11 Pro Max-1Level0.png -------------------------------------------------------------------------------- /screenshots/en-US/iPhone 11 Pro Max-2Level3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/screenshots/en-US/iPhone 11 Pro Max-2Level3.png -------------------------------------------------------------------------------- /screenshots/en-US/iPhone 11 Pro Max-3Level4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/screenshots/en-US/iPhone 11 Pro Max-3Level4.png -------------------------------------------------------------------------------- /screenshots/en-US/iPhone 8 Plus-0Launch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/screenshots/en-US/iPhone 8 Plus-0Launch.png -------------------------------------------------------------------------------- /screenshots/en-US/iPhone 8 Plus-1Level0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/screenshots/en-US/iPhone 8 Plus-1Level0.png -------------------------------------------------------------------------------- /screenshots/en-US/iPhone 8 Plus-2Level3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/screenshots/en-US/iPhone 8 Plus-2Level3.png -------------------------------------------------------------------------------- /screenshots/en-US/iPhone 8 Plus-3Level4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neoneye/SwiftSnakeEngine/cc42b99a6b4a5ae1b98f16f9b06dc76ce4f7da61/screenshots/en-US/iPhone 8 Plus-3Level4.png --------------------------------------------------------------------------------