├── .gitignore ├── .swiftlint.yml ├── .swiftpm └── xcode │ ├── package.xcworkspace │ ├── contents.xcworkspacedata │ ├── xcshareddata │ │ └── IDEWorkspaceChecks.plist │ └── xcuserdata │ │ └── abedalkareemomreyh.xcuserdatad │ │ └── UserInterfaceState.xcuserstate │ └── xcuserdata │ └── abedalkareemomreyh.xcuserdatad │ └── xcschemes │ └── xcschememanagement.plist ├── Carthage └── Build │ ├── .SimpleEngine.version │ └── iOS │ ├── 453E7B01-5E32-31DF-A60D-EC223BA48A47.bcsymbolmap │ ├── SimpleEngine.framework.dSYM │ └── Contents │ │ ├── Info.plist │ │ └── Resources │ │ └── DWARF │ │ └── SimpleEngine │ └── SimpleEngine.framework │ ├── Headers │ ├── SimpleEngine-Swift.h │ └── SimpleEngine.h │ ├── Info.plist │ ├── Modules │ ├── SimpleEngine.swiftmodule │ │ ├── arm64-apple-ios.swiftdoc │ │ ├── arm64-apple-ios.swiftmodule │ │ ├── arm64.swiftdoc │ │ ├── arm64.swiftmodule │ │ ├── x86_64-apple-ios-simulator.swiftdoc │ │ ├── x86_64-apple-ios-simulator.swiftmodule │ │ ├── x86_64.swiftdoc │ │ └── x86_64.swiftmodule │ └── module.modulemap │ └── SimpleEngine ├── Example ├── Shared │ ├── Helpers │ │ ├── Constants │ │ │ ├── CollideTypes.swift │ │ │ └── Constants.swift │ │ ├── Extensions │ │ │ ├── String+Helpers.swift │ │ │ ├── UIStoryboard.swift │ │ │ └── UIView+Animation.swift │ │ ├── GameKitHelper.swift │ │ ├── Helpers.swift │ │ ├── Music.swift │ │ ├── ShareHelper.swift │ │ └── Status.swift │ ├── Resources │ │ ├── Assets │ │ │ └── Assets.xcassets │ │ │ │ ├── AccentColor.colorset │ │ │ │ └── Contents.json │ │ │ │ ├── App Icon & Top Shelf Image.brandassets │ │ │ │ ├── App Icon - App Store.imagestack │ │ │ │ │ ├── Back.imagestacklayer │ │ │ │ │ │ ├── Content.imageset │ │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ │ └── first_layer.png │ │ │ │ │ │ └── Contents.json │ │ │ │ │ ├── Contents.json │ │ │ │ │ ├── Front.imagestacklayer │ │ │ │ │ │ ├── Content.imageset │ │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ │ └── thried_layer.png │ │ │ │ │ │ └── Contents.json │ │ │ │ │ └── Middle.imagestacklayer │ │ │ │ │ │ ├── Content.imageset │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ └── second_layer.png │ │ │ │ │ │ └── Contents.json │ │ │ │ ├── App Icon.imagestack │ │ │ │ │ ├── Back.imagestacklayer │ │ │ │ │ │ ├── Content.imageset │ │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ │ ├── first_layer-1.png │ │ │ │ │ │ │ └── first_layer.png │ │ │ │ │ │ └── Contents.json │ │ │ │ │ ├── Contents.json │ │ │ │ │ ├── Front.imagestacklayer │ │ │ │ │ │ ├── Content.imageset │ │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ │ ├── thried_layer-1.png │ │ │ │ │ │ │ └── thried_layer.png │ │ │ │ │ │ └── Contents.json │ │ │ │ │ └── Middle.imagestacklayer │ │ │ │ │ │ ├── Content.imageset │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ ├── second_layer-1.png │ │ │ │ │ │ └── second_layer.png │ │ │ │ │ │ └── Contents.json │ │ │ │ ├── Contents.json │ │ │ │ ├── Top Shelf Image Wide.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ ├── topshelf_store 2-1.png │ │ │ │ │ ├── topshelf_store 2-2.png │ │ │ │ │ ├── topshelf_store 2-3.png │ │ │ │ │ └── topshelf_store 2.png │ │ │ │ └── Top Shelf Image.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ ├── topshelf 5-1.png │ │ │ │ │ ├── topshelf 5-2.png │ │ │ │ │ ├── topshelf 5-3.png │ │ │ │ │ └── topshelf 5.png │ │ │ │ ├── AppIcon.appiconset │ │ │ │ ├── Contents.json │ │ │ │ ├── Icon-App-20x20@1x.png │ │ │ │ ├── Icon-App-20x20@2x.png │ │ │ │ ├── Icon-App-20x20@3x.png │ │ │ │ ├── Icon-App-29x29@1x.png │ │ │ │ ├── Icon-App-29x29@2x.png │ │ │ │ ├── Icon-App-29x29@3x.png │ │ │ │ ├── Icon-App-40x40@1x.png │ │ │ │ ├── Icon-App-40x40@2x.png │ │ │ │ ├── Icon-App-40x40@3x.png │ │ │ │ ├── Icon-App-60x60@2x.png │ │ │ │ ├── Icon-App-60x60@3x.png │ │ │ │ ├── Icon-App-76x76@1x.png │ │ │ │ ├── Icon-App-76x76@2x.png │ │ │ │ ├── Icon-App-83.5x83.5@2x.png │ │ │ │ └── ItunesArtwork@2x.png │ │ │ │ ├── Contents.json │ │ │ │ ├── Dashboard Image.gcdashboardimage │ │ │ │ ├── Contents.json │ │ │ │ └── Logo.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ ├── thried_layer-1.png │ │ │ │ │ └── thried_layer.png │ │ │ │ ├── Leaderboard.gcleaderboard │ │ │ │ ├── Contents.json │ │ │ │ └── Poster.imagestack │ │ │ │ │ ├── Back.imagestacklayer │ │ │ │ │ ├── Content.imageset │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ ├── image_dashboard-1.png │ │ │ │ │ │ └── image_dashboard.png │ │ │ │ │ └── Contents.json │ │ │ │ │ ├── Contents.json │ │ │ │ │ ├── Front.imagestacklayer │ │ │ │ │ ├── Content.imageset │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ ├── image_dashboard-1.png │ │ │ │ │ │ └── image_dashboard.png │ │ │ │ │ └── Contents.json │ │ │ │ │ └── Middle.imagestacklayer │ │ │ │ │ ├── Content.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ ├── image_dashboard-1.png │ │ │ │ │ └── image_dashboard.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── blood_cell │ │ │ │ ├── Contents.json │ │ │ │ └── blood_cell.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── blood_cell.png │ │ │ │ ├── body │ │ │ │ ├── Contents.json │ │ │ │ ├── level_1.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── level_1.png │ │ │ │ ├── level_2.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── level_2.png │ │ │ │ ├── level_3.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── level_3.png │ │ │ │ ├── level_4.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── level_4.png │ │ │ │ ├── level_5.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── level_5.png │ │ │ │ ├── level_6.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── level_6.png │ │ │ │ ├── level_7.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── level_7.png │ │ │ │ ├── level_8.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── level_8.png │ │ │ │ └── level_9.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── level_9.png │ │ │ │ ├── common │ │ │ │ ├── Contents.json │ │ │ │ ├── background.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── background.png │ │ │ │ ├── bottom_wall.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── bottom_wall.png │ │ │ │ ├── button_background.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── button_background.png │ │ │ │ ├── fire │ │ │ │ │ ├── Contents.json │ │ │ │ │ ├── fire.imageset │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ └── fire.png │ │ │ │ │ ├── fire_2.imageset │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ └── fire_2.png │ │ │ │ │ ├── fire_3.imageset │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ └── fire_3.png │ │ │ │ │ ├── fire_4.imageset │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ └── fire_4.png │ │ │ │ │ └── fire_5.imageset │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ └── fire_5.png │ │ │ │ ├── logo.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── logo.png │ │ │ │ ├── moving_strings.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── moving_strings.png │ │ │ │ ├── share.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── share.png │ │ │ │ ├── top_wall.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── top_wall.png │ │ │ │ └── white_fire.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── white_fire.png │ │ │ │ ├── controller │ │ │ │ ├── Contents.json │ │ │ │ ├── controller_analog.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── analog_stick.png │ │ │ │ └── controller_background.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── analog_background.png │ │ │ │ ├── game │ │ │ │ ├── Contents.json │ │ │ │ ├── live.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── live.png │ │ │ │ └── lives_background.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── lives_background.png │ │ │ │ ├── infected_blood_cell │ │ │ │ ├── Contents.json │ │ │ │ └── infected_blood_cell.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── infected_blood_cell.png │ │ │ │ ├── infected_cell │ │ │ │ ├── Contents.json │ │ │ │ ├── infected_1.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── infected_1.png │ │ │ │ ├── infected_2.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── infected_2.png │ │ │ │ ├── infected_3.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── infected_3.png │ │ │ │ ├── infected_4.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── infected_4.png │ │ │ │ ├── infected_5.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── infected_5.png │ │ │ │ ├── infected_6.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── infected_6.png │ │ │ │ └── infected_7.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── infected_7.png │ │ │ │ ├── main │ │ │ │ ├── Contents.json │ │ │ │ ├── achiv.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── achivmets_new.png │ │ │ │ ├── leader.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── leader_new.png │ │ │ │ └── play.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── play.png │ │ │ │ ├── man │ │ │ │ ├── Contents.json │ │ │ │ ├── bubble.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── bubble.png │ │ │ │ ├── man_1.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── man_1.png │ │ │ │ └── man_2.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── man_2.png │ │ │ │ ├── progress │ │ │ │ ├── Contents.json │ │ │ │ ├── progress_background.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── progress_background.png │ │ │ │ ├── progress_blood.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── progress_blood.png │ │ │ │ └── progress_infected_blood.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── progress_infected_blood.png │ │ │ │ ├── virus │ │ │ │ ├── Contents.json │ │ │ │ ├── backward │ │ │ │ │ ├── Contents.json │ │ │ │ │ ├── move_back_1.imageset │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ └── move_back_1.png │ │ │ │ │ ├── move_back_2.imageset │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ └── move_back_2.png │ │ │ │ │ └── move_back_3.imageset │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ └── move_back_3.png │ │ │ │ ├── bottom │ │ │ │ │ ├── Contents.json │ │ │ │ │ ├── move_bottom_1.imageset │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ └── move_bottom_1.png │ │ │ │ │ ├── move_bottom_2.imageset │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ └── move_bottom_2.png │ │ │ │ │ └── move_bottom_3.imageset │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ └── move_bottom_3.png │ │ │ │ ├── forward │ │ │ │ │ ├── Contents.json │ │ │ │ │ ├── move_for_1.imageset │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ └── move_for_1.png │ │ │ │ │ ├── move_for_2.imageset │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ └── move_for_2.png │ │ │ │ │ └── move_for_3.imageset │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ └── move_for_3.png │ │ │ │ ├── idel │ │ │ │ │ ├── Contents.json │ │ │ │ │ ├── idel_1.imageset │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ └── idel_1.png │ │ │ │ │ └── idel_2.imageset │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ └── idel_2.png │ │ │ │ ├── top │ │ │ │ │ ├── Contents.json │ │ │ │ │ ├── move_top_1.imageset │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ └── move_top_1.png │ │ │ │ │ ├── move_top_2.imageset │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ └── move_top_2.png │ │ │ │ │ └── move_top_3.imageset │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ └── move_top_3.png │ │ │ │ └── virus.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── virus.png │ │ │ │ ├── white_cell │ │ │ │ ├── Contents.json │ │ │ │ └── white_cell.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── white_cell.png │ │ │ │ └── white_cell_destroy │ │ │ │ ├── Contents.json │ │ │ │ ├── destroy_1.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── destroy_1.png │ │ │ │ ├── destroy_2.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── destroy_2.png │ │ │ │ ├── destroy_3.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── destroy_3.png │ │ │ │ └── destroy_4.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── destroy_4.png │ │ ├── fonts │ │ │ └── pixel_font.ttf │ │ ├── music │ │ │ ├── button_clicked.wav │ │ │ ├── explosion.wav │ │ │ ├── fire.wav │ │ │ ├── game_over.mp3 │ │ │ ├── levels.mp3 │ │ │ ├── main_menu.wav │ │ │ ├── new_battle.wav │ │ │ ├── victory.mp3 │ │ │ └── virus_voice.mp3 │ │ └── strings │ │ │ └── en.lproj │ │ │ └── Localizable.strings │ ├── ViewControllers │ │ ├── Game │ │ │ ├── GameOverViewController.swift │ │ │ └── GameViewController.swift │ │ └── Main │ │ │ ├── LevelsViewController.swift │ │ │ └── MainViewController.swift │ └── Views │ │ ├── Backgrounds │ │ └── StreamBackgroundView.swift │ │ ├── CustomView │ │ ├── AppButton.swift │ │ ├── DialogView.swift │ │ └── ProgressView.swift │ │ └── SpriteViews │ │ ├── BloodCellSpriteView.swift │ │ ├── FireSpriteView.swift │ │ ├── ManSpriteView.swift │ │ ├── TalkingVirusSpriteView.swift │ │ ├── VirusSpriteView.swift │ │ ├── WhiteCellSpriteView.swift │ │ └── WhiteFireSpriteView.swift ├── Virus.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ ├── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ │ └── xcuserdata │ │ │ └── abedalkareemomreyh.xcuserdatad │ │ │ └── UserInterfaceState.xcuserstate │ ├── xcshareddata │ │ └── xcschemes │ │ │ ├── Virus.xcscheme │ │ │ └── VirusTV.xcscheme │ └── xcuserdata │ │ └── abedalkareemomreyh.xcuserdatad │ │ └── xcschemes │ │ └── xcschememanagement.plist ├── Virus │ ├── AppDelegate │ │ └── AppDelegate.swift │ ├── Storyboards │ │ ├── Base.lproj │ │ │ ├── LaunchScreen.storyboard │ │ │ └── Main.storyboard │ │ └── Game.storyboard │ └── SupportFiles │ │ └── Info.plist └── VirusTV │ ├── AppDelegate │ └── AppDelegate.swift │ ├── Info.plist │ └── Storyboards │ ├── Base.lproj │ └── LaunchScreen.storyboard │ ├── Game.storyboard │ └── Main.storyboard ├── LICENSE ├── Package.swift ├── README.md ├── SimpleEngine.podspec ├── SimpleEngine.xcworkspace ├── contents.xcworkspacedata ├── xcshareddata │ └── IDEWorkspaceChecks.plist └── xcuserdata │ └── abedalkareemomreyh.xcuserdatad │ └── UserInterfaceState.xcuserstate ├── SimpleEngine ├── SimpleEngine.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ ├── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ │ └── xcuserdata │ │ │ └── abedalkareemomreyh.xcuserdatad │ │ │ └── UserInterfaceState.xcuserstate │ ├── xcshareddata │ │ └── xcschemes │ │ │ └── SimpleEngine.xcscheme │ └── xcuserdata │ │ └── abedalkareemomreyh.xcuserdatad │ │ └── xcschemes │ │ └── xcschememanagement.plist └── SimpleEngine │ ├── BaseGameViewController.swift │ ├── Extensions │ └── UIViewController+Helpers.swift │ ├── Helpers │ ├── Debouncer.swift │ └── SimpleMusicPlayer.swift │ ├── Info.plist │ ├── SimpleEngine.h │ └── Views │ ├── AnalogView │ ├── Analog.swift │ ├── AnalogView.swift │ └── Direction.swift │ ├── DialogView │ └── DialogView.swift │ ├── Objects │ ├── BackgroundView.swift │ ├── MovingBackgroundView.swift │ ├── NodeView.swift │ ├── ObjectView.swift │ ├── SceneView.swift │ └── SpriteView │ │ ├── Frames.swift │ │ └── SpriteView.swift │ └── Others │ └── LivesView.swift ├── Tests ├── LinuxMain.swift └── SimpleEngineTests │ ├── SimpleEngineTests.swift │ └── XCTestManifests.swift ├── cover.png └── screenshots ├── storyboard.png └── storyboard_2.png /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | /.build 3 | /Packages -------------------------------------------------------------------------------- /.swiftlint.yml: -------------------------------------------------------------------------------- 1 | excluded: 2 | - Pods 3 | - Carthage 4 | - Carthage/facebook-objc-sdk/samples 5 | - Carthage/facebook-objc-sdk/vendor 6 | 7 | cyclomatic_complexity: 11 8 | identifier_name: 9 | excluded: 10 | - ok 11 | - y 12 | - x 13 | - id 14 | indentation: 2 15 | large_tuple: 3 16 | line_length: 120 17 | nesting: 18 | type_level: 2 19 | private_outlet: 20 | allow_private_set: true 21 | 22 | disabled_rules: 23 | - conditional_returns_on_newline 24 | - discouraged_object_literal 25 | - explicit_acl 26 | - explicit_enum_raw_value 27 | - explicit_top_level_acl 28 | - no_extension_access_modifier 29 | - number_separator 30 | - prefixed_toplevel_constant 31 | - switch_case_on_newline 32 | 33 | opt_in_rules: 34 | - array_init 35 | - attributes 36 | - block_based_kvo 37 | - class_delegate_protocol 38 | - closing_brace 39 | - closure_end_indentation 40 | - closure_parameter_position 41 | - closure_spacing 42 | - colon 43 | - comma 44 | - compiler_protocol_init 45 | - contains_over_first_not_nil 46 | - control_statement 47 | - convenience_type 48 | - cyclomatic_complexity 49 | - discarded_notification_center_observer 50 | - discouraged_direct_init 51 | - dynamic_inline 52 | - empty_count 53 | - empty_string 54 | - empty_enum_arguments 55 | - empty_parameters 56 | - empty_parentheses_with_trailing_closure 57 | - empty_xctest_method 58 | - explicit_init 59 | - extension_access_modifier 60 | - fallthrough 61 | - fatal_error_message 62 | - file_length 63 | - file_name 64 | - first_where 65 | - for_where 66 | - force_cast 67 | - force_try 68 | - force_unwrapping 69 | - function_body_length 70 | - function_parameter_count 71 | - generic_type_name 72 | - identifier_name 73 | - implicit_getter 74 | - implicit_return 75 | - is_disjoint 76 | - joined_default_parameter 77 | - large_tuple 78 | - leading_whitespace 79 | - legacy_cggeometry_functions 80 | - legacy_constant 81 | - legacy_constructor 82 | - legacy_nsgeometry_functions 83 | - let_var_whitespace 84 | - line_length 85 | - literal_expression_end_indentation 86 | - lower_acl_than_parent 87 | - mark 88 | - modifier_order 89 | - multiline_arguments 90 | - multiline_function_chains 91 | - multiline_parameters 92 | - multiple_closures_with_trailing_closure 93 | - nesting 94 | - nimble_operator 95 | - no_fallthrough_only 96 | - notification_center_detachment 97 | - object_literal 98 | - opening_brace 99 | - operator_usage_whitespace 100 | - operator_whitespace 101 | - overridden_super_call 102 | - override_in_extension 103 | - pattern_matching_keywords 104 | - private_action 105 | - private_outlet 106 | - private_over_fileprivate 107 | - private_unit_test 108 | - prohibited_super_call 109 | - protocol_property_accessors_order 110 | - quick_discouraged_call 111 | - quick_discouraged_focused_test 112 | - quick_discouraged_pending_test 113 | - redundant_discardable_let 114 | - redundant_nil_coalescing 115 | - redundant_optional_initialization 116 | - redundant_set_access_control 117 | - redundant_string_enum_value 118 | - redundant_void_return 119 | - required_enum_case 120 | - return_arrow_whitespace 121 | - shorthand_operator 122 | - single_test_class 123 | - sorted_first_last 124 | - sorted_imports 125 | - statement_position 126 | - strict_fileprivate 127 | - superfluous_disable_command 128 | - switch_case_alignment 129 | - syntactic_sugar 130 | - trailing_closure 131 | - trailing_comma 132 | - trailing_newline 133 | - trailing_semicolon 134 | - trailing_whitespace 135 | - type_body_length 136 | - type_name 137 | - unavailable_function 138 | - unneeded_break_in_switch 139 | - unneeded_parentheses_in_closure_argument 140 | - untyped_error_in_catch 141 | - unused_closure_parameter 142 | - unused_enumerated 143 | - unused_optional_binding 144 | - valid_ibinspectable 145 | - vertical_parameter_alignment 146 | - vertical_parameter_alignment_on_call 147 | - vertical_whitespace 148 | - void_return 149 | - weak_delegate 150 | - xctfail_message 151 | - yoda_condition 152 | - discouraged_optional_boolean 153 | - function_default_parameter_at_end 154 | - todo -------------------------------------------------------------------------------- /.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.swiftpm/xcode/package.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.swiftpm/xcode/package.xcworkspace/xcuserdata/abedalkareemomreyh.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/.swiftpm/xcode/package.xcworkspace/xcuserdata/abedalkareemomreyh.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /.swiftpm/xcode/xcuserdata/abedalkareemomreyh.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | SimpleEngine.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | SimpleEngine 16 | 17 | primary 18 | 19 | 20 | SimpleEngineTests 21 | 22 | primary 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /Carthage/Build/.SimpleEngine.version: -------------------------------------------------------------------------------- 1 | { 2 | "Mac" : [ 3 | 4 | ], 5 | "watchOS" : [ 6 | 7 | ], 8 | "tvOS" : [ 9 | 10 | ], 11 | "commitish" : "247bba9cbda761edd47446ca4446ef426c9c9824", 12 | "iOS" : [ 13 | { 14 | "name" : "SimpleEngine", 15 | "hash" : "88c0afd584454af35c59c802b2c069b1fedf27015f8dbf6073b551f40e74c417", 16 | "swiftToolchainVersion" : "5.1.3 (swiftlang-1100.0.282.1 clang-1100.0.33.15)" 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /Carthage/Build/iOS/SimpleEngine.framework.dSYM/Contents/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleIdentifier 8 | com.apple.xcode.dsym.abedalkareem.SimpleEngine 9 | CFBundleInfoDictionaryVersion 10 | 6.0 11 | CFBundlePackageType 12 | dSYM 13 | CFBundleSignature 14 | ???? 15 | CFBundleShortVersionString 16 | 1.0 17 | CFBundleVersion 18 | 1 19 | 20 | 21 | -------------------------------------------------------------------------------- /Carthage/Build/iOS/SimpleEngine.framework.dSYM/Contents/Resources/DWARF/SimpleEngine: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Carthage/Build/iOS/SimpleEngine.framework.dSYM/Contents/Resources/DWARF/SimpleEngine -------------------------------------------------------------------------------- /Carthage/Build/iOS/SimpleEngine.framework/Headers/SimpleEngine.h: -------------------------------------------------------------------------------- 1 | // 2 | // SimpleEngine.h 3 | // SimpleEngine 4 | // 5 | // Created by abedalkareem omreyh on 08/03/2020. 6 | // Copyright © 2020 abedalkareem. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for SimpleEngine. 12 | FOUNDATION_EXPORT double SimpleEngineVersionNumber; 13 | 14 | //! Project version string for SimpleEngine. 15 | FOUNDATION_EXPORT const unsigned char SimpleEngineVersionString[]; 16 | 17 | // In this header, you should import all the public headers of your framework using statements like #import 18 | 19 | 20 | -------------------------------------------------------------------------------- /Carthage/Build/iOS/SimpleEngine.framework/Info.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Carthage/Build/iOS/SimpleEngine.framework/Info.plist -------------------------------------------------------------------------------- /Carthage/Build/iOS/SimpleEngine.framework/Modules/SimpleEngine.swiftmodule/arm64-apple-ios.swiftdoc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Carthage/Build/iOS/SimpleEngine.framework/Modules/SimpleEngine.swiftmodule/arm64-apple-ios.swiftdoc -------------------------------------------------------------------------------- /Carthage/Build/iOS/SimpleEngine.framework/Modules/SimpleEngine.swiftmodule/arm64-apple-ios.swiftmodule: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Carthage/Build/iOS/SimpleEngine.framework/Modules/SimpleEngine.swiftmodule/arm64-apple-ios.swiftmodule -------------------------------------------------------------------------------- /Carthage/Build/iOS/SimpleEngine.framework/Modules/SimpleEngine.swiftmodule/arm64.swiftdoc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Carthage/Build/iOS/SimpleEngine.framework/Modules/SimpleEngine.swiftmodule/arm64.swiftdoc -------------------------------------------------------------------------------- /Carthage/Build/iOS/SimpleEngine.framework/Modules/SimpleEngine.swiftmodule/arm64.swiftmodule: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Carthage/Build/iOS/SimpleEngine.framework/Modules/SimpleEngine.swiftmodule/arm64.swiftmodule -------------------------------------------------------------------------------- /Carthage/Build/iOS/SimpleEngine.framework/Modules/SimpleEngine.swiftmodule/x86_64-apple-ios-simulator.swiftdoc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Carthage/Build/iOS/SimpleEngine.framework/Modules/SimpleEngine.swiftmodule/x86_64-apple-ios-simulator.swiftdoc -------------------------------------------------------------------------------- /Carthage/Build/iOS/SimpleEngine.framework/Modules/SimpleEngine.swiftmodule/x86_64-apple-ios-simulator.swiftmodule: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Carthage/Build/iOS/SimpleEngine.framework/Modules/SimpleEngine.swiftmodule/x86_64-apple-ios-simulator.swiftmodule -------------------------------------------------------------------------------- /Carthage/Build/iOS/SimpleEngine.framework/Modules/SimpleEngine.swiftmodule/x86_64.swiftdoc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Carthage/Build/iOS/SimpleEngine.framework/Modules/SimpleEngine.swiftmodule/x86_64.swiftdoc -------------------------------------------------------------------------------- /Carthage/Build/iOS/SimpleEngine.framework/Modules/SimpleEngine.swiftmodule/x86_64.swiftmodule: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Carthage/Build/iOS/SimpleEngine.framework/Modules/SimpleEngine.swiftmodule/x86_64.swiftmodule -------------------------------------------------------------------------------- /Carthage/Build/iOS/SimpleEngine.framework/Modules/module.modulemap: -------------------------------------------------------------------------------- 1 | framework module SimpleEngine { 2 | umbrella header "SimpleEngine.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | 8 | module SimpleEngine.Swift { 9 | header "SimpleEngine-Swift.h" 10 | requires objc 11 | } 12 | -------------------------------------------------------------------------------- /Carthage/Build/iOS/SimpleEngine.framework/SimpleEngine: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Carthage/Build/iOS/SimpleEngine.framework/SimpleEngine -------------------------------------------------------------------------------- /Example/Shared/Helpers/Constants/CollideTypes.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CollideTypes.swift 3 | // Virus 4 | // 5 | // Created by abedalkareem omreyh on 09/03/2020. 6 | // Copyright © 2020 abedalkareem. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | enum CollideTypes { 12 | static let virus = 1 13 | static let fire = 2 14 | static let blood = 3 15 | static let whiteCell = 4 16 | static let whiteFire = 5 17 | } 18 | -------------------------------------------------------------------------------- /Example/Shared/Helpers/Constants/Constants.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Constants.swift 3 | // Virus 4 | // 5 | // Created by abedalkareem omreyh on 20/03/2020. 6 | // Copyright © 2020 abedalkareem. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | enum Constants { 12 | enum Strings { 13 | static let adID = "" 14 | static let fontName = "RetroComputer" 15 | } 16 | 17 | enum Links { 18 | static let appLink = "https://apps.apple.com/gm/app/id1503292940" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Example/Shared/Helpers/Extensions/String+Helpers.swift: -------------------------------------------------------------------------------- 1 | // 2 | // String+Helpers.swift 3 | // Virus 4 | // 5 | // Created by abedalkareem omreyh on 18/03/2020. 6 | // Copyright © 2020 abedalkareem. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | extension String { 12 | var localize: String { 13 | NSLocalizedString(self, comment: "") 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Example/Shared/Helpers/Extensions/UIStoryboard.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIStoryboard.swift 3 | // Virus 4 | // 5 | // Created by abedalkareem omreyh on 14/03/2020. 6 | // Copyright © 2020 abedalkareem. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | extension UIStoryboard { 12 | 13 | /// 14 | /// Create new `ViewController` from `Storyboard`. 15 | /// - Parameter storyboard: The storyboard to instantiate the view controller from. 16 | /// - Parameter controller: The view controller type that you want to instantiate. 17 | /// - Parameter bundle: The bundle containing the storyboard file and its resources. 18 | /// Default value is `Bundle.main`. 19 | /// 20 | /// - Returns: A view controller instance. 21 | /// 22 | static func create(storyboard: Storyboard, 23 | controller: T.Type, 24 | bundle: Bundle? = Bundle.main) -> T { 25 | let uiStoryboard = UIStoryboard(name: storyboard.rawValue, bundle: nil) 26 | // swiftlint:disable force_cast 27 | return uiStoryboard.instantiateViewController(withIdentifier: String(describing: controller.self)) as! T 28 | } 29 | } 30 | 31 | /// 32 | /// Storyboards used in the app, when you create new `Storyboard` you need to add it here 33 | /// to use it. 34 | /// 35 | enum Storyboard: String { 36 | case main = "Main" 37 | case game = "Game" 38 | } 39 | -------------------------------------------------------------------------------- /Example/Shared/Helpers/Extensions/UIView+Animation.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIView+Animation.swift 3 | // Virus 4 | // 5 | // Created by abedalkareem omreyh on 20/09/2020. 6 | // Copyright © 2020 abedalkareem. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | extension UIView { 12 | 13 | /// 14 | /// Scale the view with the givin `x` and `y`. 15 | /// 16 | func animate(scaleX x: CGFloat, y: CGFloat, duration: TimeInterval = 0.2, completion: ((Bool) -> Void)? = nil) { 17 | UIView.animate(withDuration: duration, 18 | animations: { 19 | self.transform = CGAffineTransform(scaleX: x, y: y) 20 | }, completion: completion) 21 | } 22 | 23 | /// 24 | /// Animate the alpha of the view with `duration`. 25 | /// - Parameter duration: Defualt value for duration is `0.5`. 26 | /// 27 | func animate(alpha: CGFloat, with duration: Double = 0.5) { 28 | UIView.animate(withDuration: duration) { 29 | self.alpha = alpha 30 | } 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /Example/Shared/Helpers/GameKitHelper.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GameKitHelper.swift 3 | // Virus 4 | // 5 | // Created by abedalkareem omreyh on 6/18/19. 6 | // Copyright © 2019 abedalkareem. All rights reserved. 7 | // 8 | 9 | import GameKit 10 | import UIKit 11 | 12 | class GameKitHelper: NSObject { 13 | 14 | static let shared = GameKitHelper() 15 | 16 | var leaderboardID = "topplayers" 17 | 18 | func authenticateUser(_ authenticateHandler: @escaping (UIViewController?) -> Void) { 19 | let player = GKLocalPlayer.local 20 | player.authenticateHandler = { viewController, error in 21 | guard error == nil else { 22 | print(error?.localizedDescription ?? "") 23 | return 24 | } 25 | authenticateHandler(viewController) 26 | } 27 | } 28 | 29 | func report(score: Int64) { 30 | let reportedScore = GKScore(leaderboardIdentifier: leaderboardID) 31 | reportedScore.value = score 32 | GKScore.report([reportedScore]) { error in 33 | guard error == nil else { 34 | print(error?.localizedDescription ?? "") 35 | return 36 | } 37 | print("The score submitted to the game center") 38 | } 39 | } 40 | 41 | func report(achievement: Achievement, percentComplete: Double = 100) { 42 | let achievement = GKAchievement(identifier: achievement.identifier) 43 | achievement.percentComplete = percentComplete 44 | achievement.showsCompletionBanner = true 45 | GKAchievement.report([achievement]) { error in 46 | print(error?.localizedDescription ?? "") 47 | } 48 | } 49 | 50 | func getGameCenterControllerWith(viewState: GKGameCenterViewControllerState) -> GKGameCenterViewController { 51 | let viewController = GKGameCenterViewController() 52 | viewController.gameCenterDelegate = self 53 | viewController.viewState = viewState 54 | if viewState == .leaderboards { 55 | viewController.leaderboardIdentifier = leaderboardID 56 | } 57 | return viewController 58 | } 59 | 60 | } 61 | 62 | extension GameKitHelper: GKGameCenterControllerDelegate { 63 | 64 | func gameCenterViewControllerDidFinish(_ gameCenterViewController: GKGameCenterViewController) { 65 | gameCenterViewController.dismiss(animated: true, completion: nil) 66 | } 67 | } 68 | 69 | enum Achievement: String { 70 | 71 | var identifier: String { 72 | rawValue 73 | } 74 | 75 | case achievement1 = "start_the_attack" 76 | case achievement2 = "first_mission" 77 | case achievement3 = "second_mission" 78 | case achievement4 = "third_mission" 79 | case achievement5 = "forth_mission" 80 | case achievement6 = "fifth_mission" 81 | case achievement7 = "sixth_mission" 82 | case achievement8 = "seventh_mission" 83 | case achievement9 = "final_mission" 84 | case achievement10 = "you_saved_us" 85 | case achievement11 = "ask_for_help" 86 | } 87 | -------------------------------------------------------------------------------- /Example/Shared/Helpers/Helpers.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Helpers.swift 3 | // Virus 4 | // 5 | // Created by abedalkareem omreyh on 20/09/2020. 6 | // Copyright © 2020 abedalkareem. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | var isTV: Bool { 12 | #if os(iOS) 13 | return false 14 | #else 15 | return true 16 | #endif 17 | } 18 | -------------------------------------------------------------------------------- /Example/Shared/Helpers/Music.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Music.swift 3 | // Virus 4 | // 5 | // Created by abedalkareem omreyh on 14/03/2020. 6 | // Copyright © 2020 abedalkareem. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import SimpleEngine 11 | 12 | enum Music: String, MusicType { 13 | 14 | var format: String { 15 | var type: Type! 16 | switch self { 17 | case .mainMenu: 18 | type = .wav 19 | case .gameBackground: 20 | type = .wav 21 | case .gameOver: 22 | type = .mp3 23 | case .bodyScreen: 24 | type = .mp3 25 | case .buttonClicked: 26 | type = .wav 27 | case .fire: 28 | type = .wav 29 | case .win: 30 | type = .mp3 31 | case .liveDestroyed: 32 | type = .wav 33 | case .finalFight: 34 | type = .mp3 35 | case .virusVoice: 36 | type = .mp3 37 | } 38 | return type.rawValue 39 | } 40 | 41 | case mainMenu = "main_menu" 42 | case gameBackground = "new_battle" 43 | case gameOver = "game_over" 44 | case bodyScreen = "levels" 45 | case fire = "fire" 46 | case buttonClicked = "button_clicked" 47 | case win = "victory" 48 | case liveDestroyed = "explosion" 49 | case finalFight = "final_fight" 50 | case virusVoice = "virus_voice" 51 | } 52 | 53 | enum Type: String { 54 | case mp3 55 | case wav 56 | } 57 | -------------------------------------------------------------------------------- /Example/Shared/Helpers/ShareHelper.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ShareHelper.swift 3 | // Virus 4 | // 5 | // Created by abedalkareem omreyh on 6/24/19. 6 | // Copyright © 2019 abedalkareem. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class ShareHelper: NSObject { 12 | 13 | class func share(url: URL, string: String, sourceView: UIView) -> UIViewController? { 14 | var viewController: UIViewController? 15 | #if os(iOS) 16 | viewController = UIActivityViewController(activityItems: [string, url], applicationActivities: nil) 17 | viewController?.popoverPresentationController?.sourceView = sourceView 18 | viewController?.popoverPresentationController?.sourceRect = sourceView.bounds 19 | #endif 20 | return viewController 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /Example/Shared/Helpers/Status.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Status.swift 3 | // Virus 4 | // 5 | // Created by abedalkareem omreyh on 08/11/2019. 6 | // Copyright © 2019 abedalkareem. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | enum Status { 12 | 13 | /// 14 | /// Return the current level. 15 | /// 16 | static var currentLevel: Int { 17 | get { 18 | UserDefaults.standard.integer(forKey: "currentLevel") 19 | } 20 | set { 21 | UserDefaults.standard.set(newValue, forKey: "currentLevel") 22 | } 23 | } 24 | 25 | static var isGameEnd: Bool { 26 | currentLevel == 8 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "0.176", 9 | "green" : "0.145", 10 | "red" : "0.906" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | } 15 | ], 16 | "info" : { 17 | "author" : "xcode", 18 | "version" : 1 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Back.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "first_layer.png", 5 | "idiom" : "tv" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Back.imagestacklayer/Content.imageset/first_layer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Back.imagestacklayer/Content.imageset/first_layer.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Back.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | }, 6 | "layers" : [ 7 | { 8 | "filename" : "Front.imagestacklayer" 9 | }, 10 | { 11 | "filename" : "Middle.imagestacklayer" 12 | }, 13 | { 14 | "filename" : "Back.imagestacklayer" 15 | } 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Front.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "thried_layer.png", 5 | "idiom" : "tv" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Front.imagestacklayer/Content.imageset/thried_layer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Front.imagestacklayer/Content.imageset/thried_layer.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Front.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "second_layer.png", 5 | "idiom" : "tv" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Middle.imagestacklayer/Content.imageset/second_layer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Middle.imagestacklayer/Content.imageset/second_layer.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Middle.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Back.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "first_layer.png", 5 | "idiom" : "tv", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "first_layer-1.png", 10 | "idiom" : "tv", 11 | "scale" : "2x" 12 | } 13 | ], 14 | "info" : { 15 | "author" : "xcode", 16 | "version" : 1 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Back.imagestacklayer/Content.imageset/first_layer-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Back.imagestacklayer/Content.imageset/first_layer-1.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Back.imagestacklayer/Content.imageset/first_layer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Back.imagestacklayer/Content.imageset/first_layer.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Back.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | }, 6 | "layers" : [ 7 | { 8 | "filename" : "Front.imagestacklayer" 9 | }, 10 | { 11 | "filename" : "Middle.imagestacklayer" 12 | }, 13 | { 14 | "filename" : "Back.imagestacklayer" 15 | } 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "thried_layer.png", 5 | "idiom" : "tv", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "thried_layer-1.png", 10 | "idiom" : "tv", 11 | "scale" : "2x" 12 | } 13 | ], 14 | "info" : { 15 | "author" : "xcode", 16 | "version" : 1 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Content.imageset/thried_layer-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Content.imageset/thried_layer-1.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Content.imageset/thried_layer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Content.imageset/thried_layer.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "second_layer.png", 5 | "idiom" : "tv", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "second_layer-1.png", 10 | "idiom" : "tv", 11 | "scale" : "2x" 12 | } 13 | ], 14 | "info" : { 15 | "author" : "xcode", 16 | "version" : 1 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Content.imageset/second_layer-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Content.imageset/second_layer-1.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Content.imageset/second_layer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Content.imageset/second_layer.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "assets" : [ 3 | { 4 | "filename" : "App Icon - App Store.imagestack", 5 | "idiom" : "tv", 6 | "role" : "primary-app-icon", 7 | "size" : "1280x768" 8 | }, 9 | { 10 | "filename" : "App Icon.imagestack", 11 | "idiom" : "tv", 12 | "role" : "primary-app-icon", 13 | "size" : "400x240" 14 | }, 15 | { 16 | "filename" : "Top Shelf Image Wide.imageset", 17 | "idiom" : "tv", 18 | "role" : "top-shelf-image-wide", 19 | "size" : "2320x720" 20 | }, 21 | { 22 | "filename" : "Top Shelf Image.imageset", 23 | "idiom" : "tv", 24 | "role" : "top-shelf-image", 25 | "size" : "1920x720" 26 | } 27 | ], 28 | "info" : { 29 | "author" : "xcode", 30 | "version" : 1 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "topshelf_store 2.png", 5 | "idiom" : "tv", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "topshelf_store 2-2.png", 10 | "idiom" : "tv", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "topshelf_store 2-1.png", 15 | "idiom" : "tv-marketing", 16 | "scale" : "1x" 17 | }, 18 | { 19 | "filename" : "topshelf_store 2-3.png", 20 | "idiom" : "tv-marketing", 21 | "scale" : "2x" 22 | } 23 | ], 24 | "info" : { 25 | "author" : "xcode", 26 | "version" : 1 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/topshelf_store 2-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/topshelf_store 2-1.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/topshelf_store 2-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/topshelf_store 2-2.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/topshelf_store 2-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/topshelf_store 2-3.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/topshelf_store 2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/topshelf_store 2.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "topshelf 5.png", 5 | "idiom" : "tv", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "topshelf 5-2.png", 10 | "idiom" : "tv", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "topshelf 5-1.png", 15 | "idiom" : "tv-marketing", 16 | "scale" : "1x" 17 | }, 18 | { 19 | "filename" : "topshelf 5-3.png", 20 | "idiom" : "tv-marketing", 21 | "scale" : "2x" 22 | } 23 | ], 24 | "info" : { 25 | "author" : "xcode", 26 | "version" : 1 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/topshelf 5-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/topshelf 5-1.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/topshelf 5-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/topshelf 5-2.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/topshelf 5-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/topshelf 5-3.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/topshelf 5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/topshelf 5.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Icon-App-20x20@2x.png", 5 | "idiom" : "iphone", 6 | "scale" : "2x", 7 | "size" : "20x20" 8 | }, 9 | { 10 | "filename" : "Icon-App-20x20@3x.png", 11 | "idiom" : "iphone", 12 | "scale" : "3x", 13 | "size" : "20x20" 14 | }, 15 | { 16 | "filename" : "Icon-App-29x29@1x.png", 17 | "idiom" : "iphone", 18 | "scale" : "1x", 19 | "size" : "29x29" 20 | }, 21 | { 22 | "filename" : "Icon-App-29x29@2x.png", 23 | "idiom" : "iphone", 24 | "scale" : "2x", 25 | "size" : "29x29" 26 | }, 27 | { 28 | "filename" : "Icon-App-29x29@3x.png", 29 | "idiom" : "iphone", 30 | "scale" : "3x", 31 | "size" : "29x29" 32 | }, 33 | { 34 | "filename" : "Icon-App-40x40@2x.png", 35 | "idiom" : "iphone", 36 | "scale" : "2x", 37 | "size" : "40x40" 38 | }, 39 | { 40 | "filename" : "Icon-App-40x40@3x.png", 41 | "idiom" : "iphone", 42 | "scale" : "3x", 43 | "size" : "40x40" 44 | }, 45 | { 46 | "filename" : "Icon-App-60x60@2x.png", 47 | "idiom" : "iphone", 48 | "scale" : "2x", 49 | "size" : "60x60" 50 | }, 51 | { 52 | "filename" : "Icon-App-60x60@3x.png", 53 | "idiom" : "iphone", 54 | "scale" : "3x", 55 | "size" : "60x60" 56 | }, 57 | { 58 | "filename" : "Icon-App-20x20@1x.png", 59 | "idiom" : "ipad", 60 | "scale" : "1x", 61 | "size" : "20x20" 62 | }, 63 | { 64 | "filename" : "Icon-App-20x20@2x.png", 65 | "idiom" : "ipad", 66 | "scale" : "2x", 67 | "size" : "20x20" 68 | }, 69 | { 70 | "filename" : "Icon-App-29x29@1x.png", 71 | "idiom" : "ipad", 72 | "scale" : "1x", 73 | "size" : "29x29" 74 | }, 75 | { 76 | "filename" : "Icon-App-29x29@2x.png", 77 | "idiom" : "ipad", 78 | "scale" : "2x", 79 | "size" : "29x29" 80 | }, 81 | { 82 | "filename" : "Icon-App-40x40@1x.png", 83 | "idiom" : "ipad", 84 | "scale" : "1x", 85 | "size" : "40x40" 86 | }, 87 | { 88 | "filename" : "Icon-App-40x40@2x.png", 89 | "idiom" : "ipad", 90 | "scale" : "2x", 91 | "size" : "40x40" 92 | }, 93 | { 94 | "filename" : "Icon-App-76x76@1x.png", 95 | "idiom" : "ipad", 96 | "scale" : "1x", 97 | "size" : "76x76" 98 | }, 99 | { 100 | "filename" : "Icon-App-76x76@2x.png", 101 | "idiom" : "ipad", 102 | "scale" : "2x", 103 | "size" : "76x76" 104 | }, 105 | { 106 | "filename" : "Icon-App-83.5x83.5@2x.png", 107 | "idiom" : "ipad", 108 | "scale" : "2x", 109 | "size" : "83.5x83.5" 110 | }, 111 | { 112 | "filename" : "ItunesArtwork@2x.png", 113 | "idiom" : "ios-marketing", 114 | "scale" : "1x", 115 | "size" : "1024x1024" 116 | } 117 | ], 118 | "info" : { 119 | "author" : "xcode", 120 | "version" : 1 121 | } 122 | } 123 | -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/Dashboard Image.gcdashboardimage/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/Dashboard Image.gcdashboardimage/Logo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "thried_layer.png", 5 | "idiom" : "tv", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "thried_layer-1.png", 10 | "idiom" : "tv", 11 | "scale" : "2x" 12 | } 13 | ], 14 | "info" : { 15 | "author" : "xcode", 16 | "version" : 1 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/Dashboard Image.gcdashboardimage/Logo.imageset/thried_layer-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/Dashboard Image.gcdashboardimage/Logo.imageset/thried_layer-1.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/Dashboard Image.gcdashboardimage/Logo.imageset/thried_layer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/Dashboard Image.gcdashboardimage/Logo.imageset/thried_layer.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/Leaderboard.gcleaderboard/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | }, 6 | "properties" : { 7 | "identifier" : "topplayers" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/Leaderboard.gcleaderboard/Poster.imagestack/Back.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_dashboard.png", 5 | "idiom" : "tv", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "image_dashboard-1.png", 10 | "idiom" : "tv", 11 | "scale" : "2x" 12 | } 13 | ], 14 | "info" : { 15 | "author" : "xcode", 16 | "version" : 1 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/Leaderboard.gcleaderboard/Poster.imagestack/Back.imagestacklayer/Content.imageset/image_dashboard-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/Leaderboard.gcleaderboard/Poster.imagestack/Back.imagestacklayer/Content.imageset/image_dashboard-1.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/Leaderboard.gcleaderboard/Poster.imagestack/Back.imagestacklayer/Content.imageset/image_dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/Leaderboard.gcleaderboard/Poster.imagestack/Back.imagestacklayer/Content.imageset/image_dashboard.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/Leaderboard.gcleaderboard/Poster.imagestack/Back.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/Leaderboard.gcleaderboard/Poster.imagestack/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | }, 6 | "layers" : [ 7 | { 8 | "filename" : "Front.imagestacklayer" 9 | }, 10 | { 11 | "filename" : "Middle.imagestacklayer" 12 | }, 13 | { 14 | "filename" : "Back.imagestacklayer" 15 | } 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/Leaderboard.gcleaderboard/Poster.imagestack/Front.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_dashboard.png", 5 | "idiom" : "tv", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "image_dashboard-1.png", 10 | "idiom" : "tv", 11 | "scale" : "2x" 12 | } 13 | ], 14 | "info" : { 15 | "author" : "xcode", 16 | "version" : 1 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/Leaderboard.gcleaderboard/Poster.imagestack/Front.imagestacklayer/Content.imageset/image_dashboard-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/Leaderboard.gcleaderboard/Poster.imagestack/Front.imagestacklayer/Content.imageset/image_dashboard-1.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/Leaderboard.gcleaderboard/Poster.imagestack/Front.imagestacklayer/Content.imageset/image_dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/Leaderboard.gcleaderboard/Poster.imagestack/Front.imagestacklayer/Content.imageset/image_dashboard.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/Leaderboard.gcleaderboard/Poster.imagestack/Front.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/Leaderboard.gcleaderboard/Poster.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_dashboard.png", 5 | "idiom" : "tv", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "image_dashboard-1.png", 10 | "idiom" : "tv", 11 | "scale" : "2x" 12 | } 13 | ], 14 | "info" : { 15 | "author" : "xcode", 16 | "version" : 1 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/Leaderboard.gcleaderboard/Poster.imagestack/Middle.imagestacklayer/Content.imageset/image_dashboard-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/Leaderboard.gcleaderboard/Poster.imagestack/Middle.imagestacklayer/Content.imageset/image_dashboard-1.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/Leaderboard.gcleaderboard/Poster.imagestack/Middle.imagestacklayer/Content.imageset/image_dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/Leaderboard.gcleaderboard/Poster.imagestack/Middle.imagestacklayer/Content.imageset/image_dashboard.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/Leaderboard.gcleaderboard/Poster.imagestack/Middle.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/blood_cell/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/blood_cell/blood_cell.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "blood_cell.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/blood_cell/blood_cell.imageset/blood_cell.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/blood_cell/blood_cell.imageset/blood_cell.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/body/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/body/level_1.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "level_1.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/body/level_1.imageset/level_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/body/level_1.imageset/level_1.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/body/level_2.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "level_2.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/body/level_2.imageset/level_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/body/level_2.imageset/level_2.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/body/level_3.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "level_3.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/body/level_3.imageset/level_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/body/level_3.imageset/level_3.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/body/level_4.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "level_4.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/body/level_4.imageset/level_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/body/level_4.imageset/level_4.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/body/level_5.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "level_5.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/body/level_5.imageset/level_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/body/level_5.imageset/level_5.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/body/level_6.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "level_6.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/body/level_6.imageset/level_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/body/level_6.imageset/level_6.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/body/level_7.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "level_7.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/body/level_7.imageset/level_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/body/level_7.imageset/level_7.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/body/level_8.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "level_8.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/body/level_8.imageset/level_8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/body/level_8.imageset/level_8.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/body/level_9.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "level_9.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/body/level_9.imageset/level_9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/body/level_9.imageset/level_9.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/common/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/common/background.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "background.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/common/background.imageset/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/common/background.imageset/background.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/common/bottom_wall.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "bottom_wall.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/common/bottom_wall.imageset/bottom_wall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/common/bottom_wall.imageset/bottom_wall.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/common/button_background.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "resizing" : { 5 | "mode" : "9-part", 6 | "center" : { 7 | "mode" : "tile", 8 | "width" : 20, 9 | "height" : 20 10 | }, 11 | "cap-insets" : { 12 | "bottom" : 20, 13 | "top" : 20, 14 | "right" : 20, 15 | "left" : 20 16 | } 17 | }, 18 | "idiom" : "universal", 19 | "filename" : "button_background.png", 20 | "scale" : "1x" 21 | }, 22 | { 23 | "idiom" : "universal", 24 | "scale" : "2x" 25 | }, 26 | { 27 | "idiom" : "universal", 28 | "scale" : "3x" 29 | } 30 | ], 31 | "info" : { 32 | "version" : 1, 33 | "author" : "xcode" 34 | } 35 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/common/button_background.imageset/button_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/common/button_background.imageset/button_background.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/common/fire/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/common/fire/fire.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "fire.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/common/fire/fire.imageset/fire.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/common/fire/fire.imageset/fire.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/common/fire/fire_2.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "fire_2.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/common/fire/fire_2.imageset/fire_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/common/fire/fire_2.imageset/fire_2.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/common/fire/fire_3.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "fire_3.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/common/fire/fire_3.imageset/fire_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/common/fire/fire_3.imageset/fire_3.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/common/fire/fire_4.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "fire_4.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/common/fire/fire_4.imageset/fire_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/common/fire/fire_4.imageset/fire_4.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/common/fire/fire_5.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "fire_5.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/common/fire/fire_5.imageset/fire_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/common/fire/fire_5.imageset/fire_5.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/common/logo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "logo.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/common/logo.imageset/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/common/logo.imageset/logo.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/common/moving_strings.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "moving_strings.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/common/moving_strings.imageset/moving_strings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/common/moving_strings.imageset/moving_strings.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/common/share.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "share.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/common/share.imageset/share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/common/share.imageset/share.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/common/top_wall.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "top_wall.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/common/top_wall.imageset/top_wall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/common/top_wall.imageset/top_wall.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/common/white_fire.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "white_fire.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/common/white_fire.imageset/white_fire.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/common/white_fire.imageset/white_fire.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/controller/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/controller/controller_analog.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "analog_stick.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/controller/controller_analog.imageset/analog_stick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/controller/controller_analog.imageset/analog_stick.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/controller/controller_background.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "analog_background.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/controller/controller_background.imageset/analog_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/controller/controller_background.imageset/analog_background.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/game/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/game/live.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "live.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/game/live.imageset/live.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/game/live.imageset/live.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/game/lives_background.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "lives_background.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/game/lives_background.imageset/lives_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/game/lives_background.imageset/lives_background.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/infected_blood_cell/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/infected_blood_cell/infected_blood_cell.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "infected_blood_cell.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/infected_blood_cell/infected_blood_cell.imageset/infected_blood_cell.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/infected_blood_cell/infected_blood_cell.imageset/infected_blood_cell.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/infected_cell/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/infected_cell/infected_1.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "infected_1.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/infected_cell/infected_1.imageset/infected_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/infected_cell/infected_1.imageset/infected_1.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/infected_cell/infected_2.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "infected_2.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/infected_cell/infected_2.imageset/infected_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/infected_cell/infected_2.imageset/infected_2.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/infected_cell/infected_3.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "infected_3.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/infected_cell/infected_3.imageset/infected_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/infected_cell/infected_3.imageset/infected_3.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/infected_cell/infected_4.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "infected_4.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/infected_cell/infected_4.imageset/infected_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/infected_cell/infected_4.imageset/infected_4.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/infected_cell/infected_5.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "infected_5.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/infected_cell/infected_5.imageset/infected_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/infected_cell/infected_5.imageset/infected_5.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/infected_cell/infected_6.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "infected_6.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/infected_cell/infected_6.imageset/infected_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/infected_cell/infected_6.imageset/infected_6.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/infected_cell/infected_7.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "infected_7.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/infected_cell/infected_7.imageset/infected_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/infected_cell/infected_7.imageset/infected_7.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/main/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/main/achiv.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "achivmets_new.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/main/achiv.imageset/achivmets_new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/main/achiv.imageset/achivmets_new.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/main/leader.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "leader_new.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/main/leader.imageset/leader_new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/main/leader.imageset/leader_new.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/main/play.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "play.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/main/play.imageset/play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/main/play.imageset/play.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/man/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/man/bubble.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "bubble.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/man/bubble.imageset/bubble.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/man/bubble.imageset/bubble.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/man/man_1.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "man_1.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/man/man_1.imageset/man_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/man/man_1.imageset/man_1.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/man/man_2.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "man_2.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/man/man_2.imageset/man_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/man/man_2.imageset/man_2.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/progress/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/progress/progress_background.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "progress_background.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/progress/progress_background.imageset/progress_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/progress/progress_background.imageset/progress_background.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/progress/progress_blood.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "progress_blood.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/progress/progress_blood.imageset/progress_blood.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/progress/progress_blood.imageset/progress_blood.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/progress/progress_infected_blood.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "progress_infected_blood.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/progress/progress_infected_blood.imageset/progress_infected_blood.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/progress/progress_infected_blood.imageset/progress_infected_blood.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/virus/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/virus/backward/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/virus/backward/move_back_1.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "move_back_1.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/virus/backward/move_back_1.imageset/move_back_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/virus/backward/move_back_1.imageset/move_back_1.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/virus/backward/move_back_2.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "move_back_2.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/virus/backward/move_back_2.imageset/move_back_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/virus/backward/move_back_2.imageset/move_back_2.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/virus/backward/move_back_3.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "move_back_3.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/virus/backward/move_back_3.imageset/move_back_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/virus/backward/move_back_3.imageset/move_back_3.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/virus/bottom/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/virus/bottom/move_bottom_1.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "move_bottom_1.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/virus/bottom/move_bottom_1.imageset/move_bottom_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/virus/bottom/move_bottom_1.imageset/move_bottom_1.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/virus/bottom/move_bottom_2.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "move_bottom_2.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/virus/bottom/move_bottom_2.imageset/move_bottom_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/virus/bottom/move_bottom_2.imageset/move_bottom_2.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/virus/bottom/move_bottom_3.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "move_bottom_3.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/virus/bottom/move_bottom_3.imageset/move_bottom_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/virus/bottom/move_bottom_3.imageset/move_bottom_3.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/virus/forward/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/virus/forward/move_for_1.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "move_for_1.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/virus/forward/move_for_1.imageset/move_for_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/virus/forward/move_for_1.imageset/move_for_1.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/virus/forward/move_for_2.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "move_for_2.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/virus/forward/move_for_2.imageset/move_for_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/virus/forward/move_for_2.imageset/move_for_2.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/virus/forward/move_for_3.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "move_for_3.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/virus/forward/move_for_3.imageset/move_for_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/virus/forward/move_for_3.imageset/move_for_3.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/virus/idel/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/virus/idel/idel_1.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "idel_1.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/virus/idel/idel_1.imageset/idel_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/virus/idel/idel_1.imageset/idel_1.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/virus/idel/idel_2.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "idel_2.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/virus/idel/idel_2.imageset/idel_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/virus/idel/idel_2.imageset/idel_2.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/virus/top/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/virus/top/move_top_1.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "move_top_1.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/virus/top/move_top_1.imageset/move_top_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/virus/top/move_top_1.imageset/move_top_1.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/virus/top/move_top_2.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "move_top_2.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/virus/top/move_top_2.imageset/move_top_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/virus/top/move_top_2.imageset/move_top_2.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/virus/top/move_top_3.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "move_top_3.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/virus/top/move_top_3.imageset/move_top_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/virus/top/move_top_3.imageset/move_top_3.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/virus/virus.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "virus.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/virus/virus.imageset/virus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/virus/virus.imageset/virus.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/white_cell/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/white_cell/white_cell.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "white_cell.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/white_cell/white_cell.imageset/white_cell.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/white_cell/white_cell.imageset/white_cell.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/white_cell_destroy/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/white_cell_destroy/destroy_1.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "destroy_1.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/white_cell_destroy/destroy_1.imageset/destroy_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/white_cell_destroy/destroy_1.imageset/destroy_1.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/white_cell_destroy/destroy_2.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "destroy_2.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/white_cell_destroy/destroy_2.imageset/destroy_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/white_cell_destroy/destroy_2.imageset/destroy_2.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/white_cell_destroy/destroy_3.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "destroy_3.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/white_cell_destroy/destroy_3.imageset/destroy_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/white_cell_destroy/destroy_3.imageset/destroy_3.png -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/white_cell_destroy/destroy_4.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "destroy_4.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Shared/Resources/Assets/Assets.xcassets/white_cell_destroy/destroy_4.imageset/destroy_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/Assets/Assets.xcassets/white_cell_destroy/destroy_4.imageset/destroy_4.png -------------------------------------------------------------------------------- /Example/Shared/Resources/fonts/pixel_font.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/fonts/pixel_font.ttf -------------------------------------------------------------------------------- /Example/Shared/Resources/music/button_clicked.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/music/button_clicked.wav -------------------------------------------------------------------------------- /Example/Shared/Resources/music/explosion.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/music/explosion.wav -------------------------------------------------------------------------------- /Example/Shared/Resources/music/fire.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/music/fire.wav -------------------------------------------------------------------------------- /Example/Shared/Resources/music/game_over.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/music/game_over.mp3 -------------------------------------------------------------------------------- /Example/Shared/Resources/music/levels.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/music/levels.mp3 -------------------------------------------------------------------------------- /Example/Shared/Resources/music/main_menu.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/music/main_menu.wav -------------------------------------------------------------------------------- /Example/Shared/Resources/music/new_battle.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/music/new_battle.wav -------------------------------------------------------------------------------- /Example/Shared/Resources/music/victory.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/music/victory.mp3 -------------------------------------------------------------------------------- /Example/Shared/Resources/music/virus_voice.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Shared/Resources/music/virus_voice.mp3 -------------------------------------------------------------------------------- /Example/Shared/Resources/strings/en.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* 2 | Localizable.strings 3 | Virus 4 | 5 | Created by abedalkareem omreyh on 18/03/2020. 6 | Copyright © 2020 abedalkareem. All rights reserved. 7 | */ 8 | 9 | "attack" = "Attack!"; 10 | "start_again" = "Start Again"; 11 | 12 | "mission_1_title" = "First mission!"; 13 | "mission_2_title" = "Second mission!"; 14 | "mission_3_title" = "Third mission!"; 15 | "mission_4_title" = "Forth mission!"; 16 | "mission_5_title" = "Fifth mission!"; 17 | "mission_6_title" = "Sixth mission!"; 18 | "mission_7_title" = "Seventh mission!"; 19 | "mission_8_title" = "Final mission!"; 20 | "mission_9_title" = "Good job!!"; 21 | "mission_1_description" = "We are at a critical point in history.. human is making war destroying our planet so we need to stop them before it’s to late. Your first mission is to enter this human body!"; 22 | "mission_2_description" = "Your second mission is very important, we need to attack the brain, the thing human use to think and plan all this bad things… be careful."; 23 | "mission_3_description" = "The Third mission is to destroy lungs, it’s the thing human use to breathe if you destroy it you will weaken him and he will not be able to breathe."; 24 | "mission_4_description" = "Attack the Liver."; 25 | "mission_5_description" = "Attack intestines."; 26 | "mission_6_description" = "Attack The !@#$%$#@! it’s the thing human use to reproduction, destroy it and half of our problem solved even if he survived this attack."; 27 | "mission_7_description" = "Attack The stomach"; 28 | "mission_8_description" = "Attack The Heart and end this!, try to make it hard!"; 29 | "mission_9_description" = "The world now can leave in piece. Now we can build our new world! Thank you!"; 30 | 31 | "help_string" = "Help me destroying the viruses!"; 32 | 33 | "more_lives" = "Watch video to get extra lives!"; 34 | "watch" = "Watch"; 35 | "no" = "No"; 36 | -------------------------------------------------------------------------------- /Example/Shared/ViewControllers/Game/GameOverViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GameOverViewController.swift 3 | // Virus 4 | // 5 | // Created by abedalkareem omreyh on 16/03/2020. 6 | // Copyright © 2020 abedalkareem. All rights reserved. 7 | // 8 | 9 | import SimpleEngine 10 | import UIKit 11 | 12 | class GameOverViewController: UIViewController { 13 | 14 | // MARK: - IBOutlets 15 | 16 | @IBOutlet private weak var movingBackgroundView: MovingBackgroundView! 17 | 18 | // MARK: - Private properties 19 | 20 | // MARK: - ViewController lifecycle 21 | 22 | override func viewDidLoad() { 23 | super.viewDidLoad() 24 | 25 | playBackgroundSong() 26 | } 27 | 28 | override func viewDidAppear(_ animated: Bool) { 29 | super.viewDidAppear(animated) 30 | movingBackgroundView.view = StreamBackgroundView(frame: view.bounds) 31 | } 32 | 33 | private func playBackgroundSong() { 34 | SimpleMusicPlayer.shared.playBackgroundMusicWith(music: Music.gameOver) 35 | } 36 | 37 | // MARK: - IBActions 38 | 39 | @IBAction private func tryAgain(_ sender: Any) { 40 | SimpleMusicPlayer.shared.playBackgroundMusicWith(music: Music.buttonClicked) 41 | changeViewController(GameViewController.instance()) 42 | } 43 | 44 | @IBAction private func home(_ sender: Any) { 45 | SimpleMusicPlayer.shared.playBackgroundMusicWith(music: Music.buttonClicked) 46 | changeViewController(MainViewController.instance()) 47 | } 48 | 49 | @IBAction private func share(_ sender: UIButton) { 50 | guard let url = URL(string: Constants.Links.appLink) else { 51 | return 52 | } 53 | GameKitHelper.shared.report(achievement: .achievement11) 54 | guard let viewController = ShareHelper.share(url: url, 55 | string: "help_string".localize, 56 | sourceView: sender) else { 57 | return 58 | } 59 | present(viewController, animated: true, completion: nil) 60 | } 61 | 62 | // MARK: - ViewController instance 63 | 64 | static func instance() -> GameOverViewController { 65 | UIStoryboard.create(storyboard: .game, controller: GameOverViewController.self) 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /Example/Shared/ViewControllers/Main/LevelsViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LevelsViewController.swift 3 | // Virus 4 | // 5 | // Created by abedalkareem omreyh on 17/03/2020. 6 | // Copyright © 2020 abedalkareem. All rights reserved. 7 | // 8 | 9 | import SimpleEngine 10 | import UIKit 11 | 12 | class LevelsViewController: BaseGameViewController { 13 | 14 | // MARK: - IBOutlets 15 | 16 | @IBOutlet private weak var descriptionLabel: UILabel! 17 | @IBOutlet private weak var titleLabel: UILabel! 18 | @IBOutlet private weak var bodyImageView: UIImageView! 19 | @IBOutlet private weak var movingBackgroundView: MovingBackgroundView! 20 | @IBOutlet private weak var actionButton: UIButton! 21 | 22 | // MARK: - ViewController lifecycle 23 | 24 | override func viewDidLoad() { 25 | super.viewDidLoad() 26 | 27 | setupViews() 28 | playBackgroundMusic() 29 | reportAchievement() 30 | } 31 | 32 | override func viewDidAppear(_ animated: Bool) { 33 | super.viewDidAppear(animated) 34 | movingBackgroundView.view = StreamBackgroundView(frame: view.bounds) 35 | } 36 | 37 | private func setupViews() { 38 | analogView.isHidden = true 39 | let level = Status.currentLevel + 1 40 | titleLabel.text = "mission_\(level)_title".localize 41 | descriptionLabel.text = "mission_\(level)_description".localize 42 | bodyImageView.image = UIImage(named: "level_\(level)") 43 | actionButton 44 | .setTitle(Status.isGameEnd ? "start_again".localize : "attack".localize, 45 | for: .normal) 46 | } 47 | 48 | private func playBackgroundMusic() { 49 | let music = Status.isGameEnd ? Music.win : Music.bodyScreen 50 | SimpleMusicPlayer.shared.playBackgroundMusicWith(music: music) 51 | SimpleMusicPlayer.shared.playMusic(music: Music.virusVoice) 52 | } 53 | 54 | private func reportAchievement() { 55 | var achievement: Achievement = .achievement1 56 | switch Status.currentLevel { 57 | case 1: 58 | achievement = .achievement2 59 | case 2: 60 | achievement = .achievement3 61 | case 3: 62 | achievement = .achievement4 63 | case 4: 64 | achievement = .achievement5 65 | case 5: 66 | achievement = .achievement6 67 | case 6: 68 | achievement = .achievement7 69 | case 7: 70 | achievement = .achievement8 71 | case 8: 72 | achievement = .achievement9 73 | default: 74 | break 75 | } 76 | if Status.isGameEnd { 77 | GameKitHelper.shared.report(achievement: .achievement10) 78 | } 79 | GameKitHelper.shared.report(achievement: achievement) 80 | } 81 | 82 | // MARK: - IBActions 83 | 84 | @IBAction private func attack(_ sender: Any) { 85 | GameKitHelper.shared.report(achievement: .achievement1) 86 | SimpleMusicPlayer.shared.playMusic(music: Music.buttonClicked) 87 | if Status.isGameEnd { 88 | Status.currentLevel = 0 89 | } 90 | let viewController = GameViewController.instance() 91 | changeViewController(viewController) 92 | } 93 | 94 | @IBAction private func back(_ sender: Any) { 95 | let viewController = MainViewController.instance() 96 | changeViewController(viewController) 97 | } 98 | 99 | // MARK: - ViewController instance 100 | 101 | static func instance() -> LevelsViewController { 102 | UIStoryboard.create(storyboard: .main, controller: LevelsViewController.self) 103 | } 104 | 105 | // MARK: - deinit 106 | 107 | deinit { 108 | SimpleMusicPlayer.shared.stopMusic(music: Music.virusVoice) 109 | } 110 | } 111 | -------------------------------------------------------------------------------- /Example/Shared/ViewControllers/Main/MainViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MainViewController.swift 3 | // Virus 4 | // 5 | // Created by abedalkareem omreyh on 13/03/2020. 6 | // Copyright © 2020 abedalkareem. All rights reserved. 7 | // 8 | 9 | import GameController 10 | import SimpleEngine 11 | import UIKit 12 | 13 | class MainViewController: BaseGameViewController { 14 | 15 | // MARK: - IBOutlets 16 | 17 | @IBOutlet private weak var playButton: AppButton! 18 | @IBOutlet private weak var movingBackgroundView: MovingBackgroundView! 19 | 20 | // MARK: - Private properties 21 | 22 | private var bloodTimer: Timer? 23 | 24 | override var preferredFocusedView: UIView? { 25 | playButton 26 | } 27 | 28 | // MARK: - ViewController lifecycle 29 | 30 | override func viewDidLoad() { 31 | super.viewDidLoad() 32 | 33 | setupViews() 34 | playBackgroundMusic() 35 | authenticateUser() 36 | } 37 | 38 | override func viewDidAppear(_ animated: Bool) { 39 | super.viewDidAppear(animated) 40 | movingBackgroundView.view = StreamBackgroundView(frame: view.bounds) 41 | startBloodTimer() 42 | } 43 | 44 | override func viewDidDisappear(_ animated: Bool) { 45 | super.viewDidDisappear(animated) 46 | stopBloodTimer() 47 | } 48 | 49 | private func setupViews() { 50 | analogView.isHidden = true 51 | } 52 | 53 | func authenticateUser() { 54 | GameKitHelper.shared.authenticateUser { viewController in 55 | if let viewController = viewController { 56 | self.present(viewController, animated: true, completion: nil) 57 | } 58 | } 59 | } 60 | 61 | private func playBackgroundMusic() { 62 | SimpleMusicPlayer.shared.playBackgroundMusicWith(music: Music.mainMenu) 63 | } 64 | 65 | // MARK: - 66 | 67 | private func startBloodTimer() { 68 | bloodTimer = Timer.scheduledTimer(withTimeInterval: 0.5, repeats: true) { [weak self] _ in 69 | self?.addBloodCells() 70 | } 71 | } 72 | 73 | private func stopBloodTimer() { 74 | bloodTimer?.invalidate() 75 | bloodTimer = nil 76 | } 77 | 78 | // MARK: - Sprites Adding 79 | 80 | private func addBloodCells() { 81 | let bloodCellSprite = BloodCellSpriteView() 82 | let width = CGFloat(bloodCellSprite.width) 83 | let randomY = CGFloat.random(in: width...(view.bounds.height - width)) 84 | bloodCellSprite.frame.origin = CGPoint(x: -width, y: randomY) 85 | sceneView.addSubview(bloodCellSprite) 86 | bloodCellSprite.moveTo(x: view.bounds.width, y: randomY) 87 | } 88 | 89 | // MARK: - Properties 90 | 91 | @IBAction private func start(_ sender: Any) { 92 | SimpleMusicPlayer.shared.playMusic(music: Music.buttonClicked) 93 | let viewController = LevelsViewController.instance() 94 | changeViewController(viewController) 95 | } 96 | 97 | @IBAction private func topPlayers(_ sender: Any) { 98 | let viewController = GameKitHelper.shared.getGameCenterControllerWith(viewState: .leaderboards) 99 | present(viewController, animated: true, completion: nil) 100 | } 101 | 102 | @IBAction private func achievements(_ sender: Any) { 103 | let viewController = GameKitHelper.shared.getGameCenterControllerWith(viewState: .achievements) 104 | present(viewController, animated: true, completion: nil) 105 | } 106 | 107 | // MARK: - ViewController instance 108 | 109 | static func instance() -> MainViewController { 110 | UIStoryboard.create(storyboard: .main, controller: MainViewController.self) 111 | } 112 | 113 | } 114 | -------------------------------------------------------------------------------- /Example/Shared/Views/Backgrounds/StreamBackgroundView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // StreamBackgroundView.swift 3 | // Virus 4 | // 5 | // Created by abedalkareem omreyh on 11/03/2020. 6 | // Copyright © 2020 abedalkareem. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class StreamBackgroundView: UIView { 12 | 13 | // MARK: - Private properties 14 | 15 | private var topWallImageView: UIImageView! 16 | private var bottomWallImageView: UIImageView! 17 | private var stringsImageView: UIImageView! 18 | 19 | // MARK: - init 20 | 21 | override init(frame: CGRect) { 22 | super.init(frame: frame) 23 | setup() 24 | } 25 | 26 | required init?(coder: NSCoder) { 27 | super.init(coder: coder) 28 | setup() 29 | } 30 | 31 | private func setup() { 32 | 33 | stringsImageView = UIImageView() 34 | stringsImageView.image = #imageLiteral(resourceName: "moving_strings") 35 | stringsImageView.contentMode = .scaleAspectFill 36 | addSubview(stringsImageView) 37 | 38 | topWallImageView = UIImageView() 39 | topWallImageView.image = #imageLiteral(resourceName: "top_wall") 40 | topWallImageView.contentMode = .scaleAspectFill 41 | addSubview(topWallImageView) 42 | 43 | bottomWallImageView = UIImageView() 44 | bottomWallImageView.image = #imageLiteral(resourceName: "bottom_wall") 45 | bottomWallImageView.contentMode = .scaleAspectFill 46 | addSubview(bottomWallImageView) 47 | 48 | makeConstraints() 49 | } 50 | 51 | private func makeConstraints() { 52 | 53 | topWallImageView.translatesAutoresizingMaskIntoConstraints = false 54 | NSLayoutConstraint.activate([ 55 | topWallImageView.topAnchor.constraint(equalTo: topAnchor), 56 | topWallImageView.trailingAnchor.constraint(equalTo: trailingAnchor), 57 | topWallImageView.leadingAnchor.constraint(equalTo: leadingAnchor), 58 | topWallImageView.heightAnchor.constraint(equalToConstant: 30) 59 | ]) 60 | 61 | bottomWallImageView.translatesAutoresizingMaskIntoConstraints = false 62 | NSLayoutConstraint.activate([ 63 | bottomWallImageView.bottomAnchor.constraint(equalTo: bottomAnchor), 64 | bottomWallImageView.trailingAnchor.constraint(equalTo: trailingAnchor), 65 | bottomWallImageView.leadingAnchor.constraint(equalTo: leadingAnchor), 66 | bottomWallImageView.heightAnchor.constraint(equalToConstant: 30) 67 | ]) 68 | 69 | stringsImageView.translatesAutoresizingMaskIntoConstraints = false 70 | NSLayoutConstraint.activate([ 71 | stringsImageView.bottomAnchor.constraint(equalTo: bottomAnchor), 72 | stringsImageView.topAnchor.constraint(equalTo: topAnchor), 73 | stringsImageView.trailingAnchor.constraint(equalTo: trailingAnchor), 74 | stringsImageView.leadingAnchor.constraint(equalTo: leadingAnchor) 75 | ]) 76 | } 77 | 78 | } 79 | -------------------------------------------------------------------------------- /Example/Shared/Views/CustomView/AppButton.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppButton.swift 3 | // Virus 4 | // 5 | // Created by abedalkareem omreyh on 20/09/2020. 6 | // Copyright © 2020 abedalkareem. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class AppButton: UIButton { 12 | 13 | override func didUpdateFocus(in context: UIFocusUpdateContext, with coordinator: UIFocusAnimationCoordinator) { 14 | if context.nextFocusedView == self { 15 | animate(scaleX: 1.1, y: 1.1) 16 | } else if context.previouslyFocusedView == self { 17 | animate(scaleX: 1, y: 1) 18 | } 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /Example/Shared/Views/SpriteViews/BloodCellSpriteView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BloodCellSpriteView.swift 3 | // Virus 4 | // 5 | // Created by abedalkareem omreyh on 12/03/2020. 6 | // Copyright © 2020 abedalkareem. All rights reserved. 7 | // 8 | 9 | import SimpleEngine 10 | import UIKit 11 | 12 | class BloodCellSpriteView: SpriteView { 13 | 14 | // MARK: - Properties 15 | 16 | let width = 40 17 | let height = 40 18 | 19 | // MARK: - Private properties 20 | 21 | var notInfected = true 22 | 23 | // MARK: - Setup 24 | 25 | override func setup() { 26 | super.setup() 27 | 28 | frame = CGRect(x: 0, y: 0, width: width, height: height) 29 | 30 | type = CollideTypes.blood 31 | speed = 10 32 | 33 | stopWhenCollideTypes = [CollideTypes.virus, CollideTypes.fire] 34 | 35 | framesHolder = FramesHolder(idel: Frames(images: [#imageLiteral(resourceName: "blood_cell")])) 36 | } 37 | 38 | // MARK: - 39 | 40 | override func didRechedDesiredPoint() { 41 | removeFromSuperview() 42 | } 43 | 44 | override func onCollisionEnter(with object: ObjectView?) -> Bool { 45 | super.onCollisionEnter(with: object) 46 | guard notInfected else { 47 | return false 48 | } 49 | if object is FireSpriteView { 50 | infect() 51 | } 52 | return true 53 | } 54 | 55 | private func infect() { 56 | notInfected = false 57 | let frames = Frames(images: [#imageLiteral(resourceName: "infected_1"), #imageLiteral(resourceName: "infected_2"), #imageLiteral(resourceName: "infected_3"), #imageLiteral(resourceName: "infected_4"), #imageLiteral(resourceName: "infected_5"), #imageLiteral(resourceName: "infected_6")], duration: 0.4) 58 | startAnimationWith(frames: frames, 59 | repeatCount: 1, 60 | stopOtherAnimations: false) { 61 | self.framesHolder = FramesHolder(idel: Frames(images: [#imageLiteral(resourceName: "infected_6")])) 62 | self.updateFrames() 63 | } 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /Example/Shared/Views/SpriteViews/FireSpriteView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FireSpriteView.swift 3 | // Virus 4 | // 5 | // Created by abedalkareem omreyh on 11/03/2020. 6 | // Copyright © 2020 abedalkareem. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import SimpleEngine 11 | 12 | class FireSpriteView: SpriteView { 13 | 14 | // MARK: - Properties 15 | 16 | let width = 20 17 | let height = 20 18 | 19 | // MARK: - Setup 20 | 21 | override func setup() { 22 | super.setup() 23 | 24 | type = CollideTypes.fire 25 | speed = 20 26 | 27 | stopWhenCollideTypes = [] 28 | 29 | framesHolder = FramesHolder(idel: Frames(images: [#imageLiteral(resourceName: "fire"), #imageLiteral(resourceName: "fire_2"), #imageLiteral(resourceName: "fire_3"), #imageLiteral(resourceName: "fire_4"), #imageLiteral(resourceName: "fire_5")], duration: 0.1)) 30 | } 31 | 32 | override func didRechedDesiredPoint() { 33 | removeFromSuperview() 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /Example/Shared/Views/SpriteViews/ManSpriteView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ManSpriteView.swift 3 | // Virus 4 | // 5 | // Created by abedalkareem omreyh on 16/03/2020. 6 | // Copyright © 2020 abedalkareem. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import SimpleEngine 11 | 12 | @IBDesignable 13 | class ManSpriteView: SpriteView { 14 | 15 | // MARK: - Setup 16 | 17 | override func setup() { 18 | super.setup() 19 | #if !TARGET_INTERFACE_BUILDER 20 | startAnimationWith(frames: Frames(images: [#imageLiteral(resourceName: "man_2"), #imageLiteral(resourceName: "man_1")], duration: 0.2)) 21 | #endif 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /Example/Shared/Views/SpriteViews/TalkingVirusSpriteView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TalkingVirusSpriteView.swift 3 | // Virus 4 | // 5 | // Created by abedalkareem omreyh on 18/03/2020. 6 | // Copyright © 2020 abedalkareem. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import SimpleEngine 11 | 12 | @IBDesignable 13 | class TalkingVirusSpriteView: SpriteView { 14 | 15 | // MARK: - Setup 16 | 17 | override func setup() { 18 | super.setup() 19 | #if !TARGET_INTERFACE_BUILDER 20 | startAnimationWith(frames: Frames(images: [#imageLiteral(resourceName: "idel_1"), #imageLiteral(resourceName: "idel_2")], duration: 1)) 21 | #endif 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /Example/Shared/Views/SpriteViews/VirusSpriteView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // VirusSpriteView.swift 3 | // Example 4 | // 5 | // Created by abedalkareem omreyh on 09/03/2020. 6 | // Copyright © 2020 abedalkareem. All rights reserved. 7 | // 8 | 9 | import SimpleEngine 10 | import UIKit 11 | 12 | class VirusSpriteView: SpriteView { 13 | 14 | // MARK: - Properties 15 | 16 | let width = 75 17 | let height = 75 18 | 19 | // MARK: - Private properties 20 | 21 | private var timer: Timer? 22 | 23 | // MARK: - Setup 24 | 25 | override func setup() { 26 | super.setup() 27 | 28 | frame = CGRect(x: 0, y: 0, width: width, height: height) 29 | 30 | type = CollideTypes.virus 31 | shouldHitTheEdges = true 32 | speed = 10 33 | 34 | stopWhenCollideTypes = [] 35 | 36 | let defaultDuration = 0.5 37 | let idelDuration = 1.0 38 | framesHolder = FramesHolder(idel: Frames(images: [#imageLiteral(resourceName: "idel_1"), #imageLiteral(resourceName: "idel_2")], duration: idelDuration)) 39 | framesHolder?.top = Frames(images: [#imageLiteral(resourceName: "move_top_1"), #imageLiteral(resourceName: "move_top_2"), #imageLiteral(resourceName: "move_top_3")], duration: defaultDuration) 40 | framesHolder?.left = Frames(images: [#imageLiteral(resourceName: "move_for_1"), #imageLiteral(resourceName: "move_for_2"), #imageLiteral(resourceName: "move_for_3")], duration: defaultDuration) 41 | framesHolder?.right = Frames(images: [#imageLiteral(resourceName: "move_back_1"), #imageLiteral(resourceName: "move_back_2"), #imageLiteral(resourceName: "move_back_3")], duration: defaultDuration) 42 | framesHolder?.bottom = Frames(images: [#imageLiteral(resourceName: "move_bottom_1"), #imageLiteral(resourceName: "move_bottom_2"), #imageLiteral(resourceName: "move_bottom_3")], duration: defaultDuration) 43 | } 44 | 45 | // MARK: - View lifecycle 46 | 47 | override func didMoveToSuperview() { 48 | super.didMoveToSuperview() 49 | 50 | startTimer() 51 | } 52 | 53 | private func startTimer() { 54 | stopTimer() 55 | timer = Timer.scheduledTimer(withTimeInterval: 0.5, repeats: true) { [weak self] _ in 56 | self?.startFiring() 57 | } 58 | } 59 | 60 | private func stopTimer() { 61 | timer?.invalidate() 62 | timer = nil 63 | } 64 | 65 | private func startFiring() { 66 | guard let sceneView = superview as? SceneView else { 67 | return 68 | } 69 | let spriteView = FireSpriteView() 70 | spriteView.frame = CGRect(x: center.x, y: center.y, width: 20, height: 20) 71 | sceneView.addSubview(spriteView) 72 | spriteView.moveTo(x: 20, y: center.y) 73 | DispatchQueue.global().async { 74 | SimpleMusicPlayer.shared.playMusic(music: Music.fire) 75 | } 76 | } 77 | 78 | // MARK: - 79 | 80 | override func didPause() { 81 | stopTimer() 82 | } 83 | 84 | override func didResume() { 85 | startTimer() 86 | } 87 | 88 | // MARK: - deinit 89 | 90 | deinit { 91 | stopTimer() 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /Example/Shared/Views/SpriteViews/WhiteCellSpriteView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WhiteCellSpriteView.swift 3 | // Virus 4 | // 5 | // Created by abedalkareem omreyh on 12/03/2020. 6 | // Copyright © 2020 abedalkareem. All rights reserved. 7 | // 8 | 9 | import SimpleEngine 10 | import UIKit 11 | 12 | class WhiteCellSpriteView: SpriteView { 13 | 14 | // MARK: - Properties 15 | 16 | let width = 40 17 | let height = 40 18 | 19 | // MARK: - Private properties 20 | 21 | private var didColide = false 22 | private var timer: Timer? 23 | private var virusPoint: CGPoint! 24 | 25 | init(virusPoint: CGPoint) { 26 | super.init(frame: .zero) 27 | self.virusPoint = virusPoint 28 | } 29 | 30 | required init?(coder aDecoder: NSCoder) { 31 | super.init(coder: aDecoder) 32 | } 33 | 34 | // MARK: - Setup 35 | 36 | override func setup() { 37 | super.setup() 38 | 39 | frame = CGRect(x: 0, y: 0, width: width, height: height) 40 | 41 | type = CollideTypes.whiteCell 42 | speed = 10 43 | 44 | stopWhenCollideTypes = [CollideTypes.virus, CollideTypes.fire] 45 | 46 | framesHolder = FramesHolder(idel: Frames(images: [#imageLiteral(resourceName: "white_cell"), #imageLiteral(resourceName: "white_cell")])) 47 | } 48 | 49 | // MARK: - View lifecycle 50 | 51 | override func didMoveToSuperview() { 52 | super.didMoveToSuperview() 53 | 54 | startTimer() 55 | } 56 | 57 | private func startTimer() { 58 | stopTimer() 59 | timer = Timer.scheduledTimer(withTimeInterval: 1.2, repeats: true) { [weak self] _ in 60 | self?.startFiring() 61 | } 62 | } 63 | 64 | private func stopTimer() { 65 | timer?.invalidate() 66 | timer = nil 67 | } 68 | 69 | private func startFiring() { 70 | guard let sceneView = superview as? SceneView else { 71 | return 72 | } 73 | let spriteView = WhiteFireSpriteView() 74 | spriteView.frame = CGRect(x: center.x, y: center.y, width: 20, height: 20) 75 | sceneView.addSubview(spriteView) 76 | spriteView.moveTo(x: virusPoint.x, y: virusPoint.y) 77 | DispatchQueue.global().async { 78 | SimpleMusicPlayer.shared.playMusic(music: Music.fire) 79 | } 80 | } 81 | 82 | // MARK: - 83 | 84 | override func didRechedDesiredPoint() { 85 | removeFromSuperview() 86 | } 87 | 88 | override func didPause() { 89 | stopTimer() 90 | } 91 | 92 | override func didResume() { 93 | startTimer() 94 | } 95 | 96 | override func onCollisionEnter(with object: ObjectView?) -> Bool { 97 | super.onCollisionEnter(with: object) 98 | guard !didColide else { 99 | return false 100 | } 101 | switch object { 102 | case object as FireSpriteView: 103 | destroy() 104 | case object as VirusSpriteView: 105 | destroy() 106 | default: 107 | break 108 | } 109 | return true 110 | } 111 | 112 | private func destroy() { 113 | didColide = true 114 | let frames = Frames(images: [#imageLiteral(resourceName: "destroy_1"), #imageLiteral(resourceName: "destroy_2"), #imageLiteral(resourceName: "destroy_3"), #imageLiteral(resourceName: "destroy_4")], 115 | duration: 0.2) 116 | startAnimationWith(frames: frames, 117 | repeatCount: 1, 118 | stopOtherAnimations: true) { 119 | self.removeFromSuperview() 120 | } 121 | 122 | DispatchQueue.global().async { 123 | SimpleMusicPlayer.shared.playMusic(music: Music.liveDestroyed) 124 | } 125 | } 126 | 127 | // MARK: - deinit 128 | 129 | deinit { 130 | stopTimer() 131 | } 132 | } 133 | -------------------------------------------------------------------------------- /Example/Shared/Views/SpriteViews/WhiteFireSpriteView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WhiteFireSpriteView.swift 3 | // Virus 4 | // 5 | // Created by abedalkareem omreyh on 19/03/2020. 6 | // Copyright © 2020 abedalkareem. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import SimpleEngine 11 | 12 | class WhiteFireSpriteView: SpriteView { 13 | 14 | // MARK: - Properties 15 | 16 | let width = 10 17 | let height = 10 18 | 19 | // MARK: - Private properties 20 | 21 | private var didColide = false 22 | 23 | // MARK: - Setup 24 | 25 | override func setup() { 26 | super.setup() 27 | 28 | type = CollideTypes.whiteFire 29 | speed = 20 30 | 31 | stopWhenCollideTypes = [CollideTypes.virus, CollideTypes.fire] 32 | 33 | framesHolder = FramesHolder(idel: Frames(images: [#imageLiteral(resourceName: "white_fire")], duration: 0.1)) 34 | } 35 | 36 | // MARK: - 37 | 38 | override func onCollisionEnter(with object: ObjectView?) -> Bool { 39 | super.onCollisionEnter(with: object) 40 | guard !didColide else { 41 | return false 42 | } 43 | switch object { 44 | case object as FireSpriteView: 45 | destroy() 46 | case object as VirusSpriteView: 47 | destroy() 48 | default: 49 | break 50 | } 51 | return true 52 | } 53 | 54 | private func destroy() { 55 | didColide = true 56 | removeFromSuperview() 57 | DispatchQueue.global().async { 58 | SimpleMusicPlayer.shared.playMusic(music: Music.liveDestroyed) 59 | } 60 | } 61 | 62 | override func didRechedDesiredPoint() { 63 | removeFromSuperview() 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /Example/Virus.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Example/Virus.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Example/Virus.xcodeproj/project.xcworkspace/xcuserdata/abedalkareemomreyh.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/Example/Virus.xcodeproj/project.xcworkspace/xcuserdata/abedalkareemomreyh.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /Example/Virus.xcodeproj/xcshareddata/xcschemes/Virus.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 45 | 51 | 52 | 53 | 54 | 58 | 59 | 60 | 61 | 67 | 69 | 75 | 76 | 77 | 78 | 80 | 81 | 84 | 85 | 86 | -------------------------------------------------------------------------------- /Example/Virus.xcodeproj/xcshareddata/xcschemes/VirusTV.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 45 | 51 | 52 | 53 | 54 | 60 | 62 | 68 | 69 | 70 | 71 | 73 | 74 | 77 | 78 | 79 | -------------------------------------------------------------------------------- /Example/Virus.xcodeproj/xcuserdata/abedalkareemomreyh.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | Virus.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 0 11 | 12 | VirusTV.xcscheme_^#shared#^_ 13 | 14 | orderHint 15 | 9 16 | 17 | 18 | SuppressBuildableAutocreation 19 | 20 | C6F55F3E25165EA8000B39AA 21 | 22 | primary 23 | 24 | 25 | C6FF68532417683C008F9B02 26 | 27 | primary 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /Example/Virus/AppDelegate/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // Example 4 | // 5 | // Created by abedalkareem omreyh on 07/03/2020. 6 | // Copyright © 2020 abedalkareem. All rights reserved. 7 | // 8 | 9 | import SimpleEngine 10 | import UIKit 11 | 12 | @UIApplicationMain 13 | class AppDelegate: UIResponder, UIApplicationDelegate { 14 | 15 | var window: UIWindow? 16 | 17 | func application(_ application: UIApplication, 18 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 19 | 20 | setupAnalogViewSettings() 21 | 22 | SimpleMusicPlayer.shared.backgroundAudioPlayerVolume = 0.8 23 | 24 | return true 25 | } 26 | 27 | private func setupAnalogViewSettings() { 28 | AnalogView.Settings.analogImage = #imageLiteral(resourceName: "controller_analog") 29 | AnalogView.Settings.backgroundImage = #imageLiteral(resourceName: "controller_background") 30 | AnalogView.Settings.alpha = 0.9 31 | AnalogView.Settings.analogSize = 100 32 | AnalogView.Settings.margen = 25 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /Example/Virus/Storyboards/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /Example/Virus/SupportFiles/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 | $(MARKETING_VERSION) 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | GADApplicationIdentifier 22 | ca-app-pub-3940256099942544~1458002511 23 | LSRequiresIPhoneOS 24 | 25 | UIAppFonts 26 | 27 | pixel_font.ttf 28 | 29 | UILaunchStoryboardName 30 | LaunchScreen 31 | UIMainStoryboardFile 32 | Main 33 | UIRequiredDeviceCapabilities 34 | 35 | armv7 36 | gamekit 37 | 38 | UIRequiresFullScreen 39 | 40 | UIStatusBarHidden 41 | 42 | UISupportedInterfaceOrientations 43 | 44 | UIInterfaceOrientationLandscapeLeft 45 | UIInterfaceOrientationLandscapeRight 46 | 47 | UISupportedInterfaceOrientations~ipad 48 | 49 | UIInterfaceOrientationLandscapeLeft 50 | UIInterfaceOrientationLandscapeRight 51 | 52 | UIViewControllerBasedStatusBarAppearance 53 | 54 | 55 | 56 | -------------------------------------------------------------------------------- /Example/VirusTV/AppDelegate/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // VirusTV 4 | // 5 | // Created by abedalkareem omreyh on 19/09/2020. 6 | // Copyright © 2020 abedalkareem. All rights reserved. 7 | // 8 | 9 | import SimpleEngine 10 | import UIKit 11 | 12 | @main 13 | class AppDelegate: UIResponder, UIApplicationDelegate { 14 | 15 | var window: UIWindow? 16 | 17 | func application(_ application: UIApplication, 18 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 19 | 20 | setupAnalogViewSettings() 21 | 22 | SimpleMusicPlayer.shared.backgroundAudioPlayerVolume = 0.9 23 | 24 | return true 25 | } 26 | 27 | private func setupAnalogViewSettings() { 28 | AnalogView.Settings.analogImage = #imageLiteral(resourceName: "controller_analog") 29 | AnalogView.Settings.backgroundImage = #imageLiteral(resourceName: "controller_background") 30 | AnalogView.Settings.alpha = 0.9 31 | AnalogView.Settings.analogSize = 100 32 | AnalogView.Settings.margen = 25 33 | } 34 | 35 | func applicationWillResignActive(_ application: UIApplication) { } 36 | 37 | func applicationDidEnterBackground(_ application: UIApplication) { } 38 | 39 | func applicationWillEnterForeground(_ application: UIApplication) { } 40 | 41 | func applicationDidBecomeActive(_ application: UIApplication) { } 42 | 43 | } 44 | -------------------------------------------------------------------------------- /Example/VirusTV/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 | $(MARKETING_VERSION) 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | LSRequiresIPhoneOS 22 | 23 | UIAppFonts 24 | 25 | pixel_font.ttf 26 | 27 | UILaunchStoryboardName 28 | LaunchScreen 29 | UIMainStoryboardFile 30 | Main 31 | UIRequiredDeviceCapabilities 32 | 33 | arm64 34 | gamekit 35 | 36 | UIUserInterfaceStyle 37 | Automatic 38 | 39 | 40 | -------------------------------------------------------------------------------- /Example/VirusTV/Storyboards/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2019 Abedalkareem 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 | -------------------------------------------------------------------------------- /Package.swift: -------------------------------------------------------------------------------- 1 | // swift-tools-version:5.1 2 | // The swift-tools-version declares the minimum version of Swift required to build this package. 3 | 4 | import PackageDescription 5 | 6 | let package = Package( 7 | name: "SimpleEngine", 8 | platforms: [ 9 | .iOS(.v10), 10 | ], 11 | products: [ 12 | .library( 13 | name: "SimpleEngine", 14 | targets: ["SimpleEngine"]), 15 | ], 16 | dependencies: [], 17 | targets: [ 18 | .target( 19 | name: "SimpleEngine", 20 | dependencies: [], 21 | path: "SimpleEngine/SimpleEngine"), 22 | .testTarget( 23 | name: "SimpleEngineTests", 24 | dependencies: ["SimpleEngine"]), 25 | ] 26 | ) 27 | -------------------------------------------------------------------------------- /SimpleEngine.podspec: -------------------------------------------------------------------------------- 1 | # 2 | # Be sure to run `pod lib lint BlinkingLabel.podspec' to ensure this is a 3 | # valid spec before submitting. 4 | # 5 | # Any lines starting with a # are optional, but their use is encouraged 6 | # To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html 7 | # 8 | 9 | Pod::Spec.new do |s| 10 | s.name = 'SimpleEngine' 11 | s.version = '0.6.0' 12 | s.summary = 'A simple 2D game engine.' 13 | 14 | # This description is used to generate tags and improve search results. 15 | # * Think: What does it do? Why did you write it? What is the focus? 16 | # * Try to keep it short, snappy and to the point. 17 | # * Write the description between the DESC delimiters below. 18 | # * Finally, don't worry about the indent, CocoaPods strips it! 19 | 20 | s.description = <<-DESC 21 | A simple 2D game engine to make a simple beautiful iOS Games! 22 | DESC 23 | 24 | s.homepage = 'https://github.com/Abedalkareem/SimpleEngine' 25 | # s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2' 26 | s.license = { :type => 'MIT', :file => 'LICENSE' } 27 | s.author = { 'Abedalkareem' => 'abedalkareem.omreyh@yahoo.com' } 28 | s.source = { :git => 'https://github.com/Abedalkareem/SimpleEngine.git', :tag => s.version.to_s } 29 | s.social_media_url = 'https://twitter.com/AbedalkareemOmr' 30 | s.swift_version = '5.0' 31 | s.ios.deployment_target = '14.0' 32 | s.tvos.deployment_target = '14.0' 33 | 34 | s.source_files = 'SimpleEngine/SimpleEngine/**/*.swift' 35 | 36 | # s.resource_bundles = { 37 | # 'BlinkingLabel' => ['BlinkingLabel/Assets/*.png'] 38 | # } 39 | 40 | # s.public_header_files = 'Pod/Classes/**/*.h' 41 | # s.frameworks = 'UIKit', 'MapKit' 42 | # s.dependency 'AFNetworking', '~> 2.3' 43 | end 44 | -------------------------------------------------------------------------------- /SimpleEngine.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 12 | 13 | 15 | 16 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /SimpleEngine.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /SimpleEngine.xcworkspace/xcuserdata/abedalkareemomreyh.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/SimpleEngine.xcworkspace/xcuserdata/abedalkareemomreyh.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /SimpleEngine/SimpleEngine.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /SimpleEngine/SimpleEngine.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /SimpleEngine/SimpleEngine.xcodeproj/project.xcworkspace/xcuserdata/abedalkareemomreyh.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/SimpleEngine/SimpleEngine.xcodeproj/project.xcworkspace/xcuserdata/abedalkareemomreyh.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /SimpleEngine/SimpleEngine.xcodeproj/xcshareddata/xcschemes/SimpleEngine.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 44 | 50 | 51 | 57 | 58 | 59 | 60 | 62 | 63 | 66 | 67 | 68 | -------------------------------------------------------------------------------- /SimpleEngine/SimpleEngine.xcodeproj/xcuserdata/abedalkareemomreyh.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | SimpleEngine.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | C692F9662414BCC40079D5DD 16 | 17 | primary 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /SimpleEngine/SimpleEngine/Extensions/UIViewController+Helpers.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIViewController.swift 3 | // SimpleEngine 4 | // 5 | // Created by abedalkareem omreyh on 01/11/2019. 6 | // Copyright © 2019 abedalkareem. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | public extension UIViewController { 12 | 13 | private var appWindow: UIWindow? { 14 | UIApplication.shared.connectedScenes 15 | .compactMap { $0 as? UIWindowScene } 16 | .first { $0.activationState == .foregroundActive }? 17 | .windows 18 | .first { $0.isKeyWindow } 19 | } 20 | 21 | /// 22 | /// Use it to change the root view controller. 23 | /// - Parameter viewController: A view controller to set as a root. 24 | /// - Parameter animated: A bool value to determine either changing the view controller 25 | /// should set as root with animation or not. 26 | /// 27 | func changeViewController(_ viewController: UIViewController?, animated: Bool = true) { 28 | 29 | guard let window = appWindow else { 30 | return 31 | } 32 | 33 | guard animated else { 34 | window.rootViewController = viewController 35 | return 36 | } 37 | 38 | let view = UIView(frame: window.bounds) 39 | view.backgroundColor = .black 40 | window.addSubview(view) 41 | view.alpha = 0 42 | UIView.animate(withDuration: 0.5, 43 | animations: { 44 | view.alpha = 1 45 | }, completion: { _ in 46 | window.rootViewController = viewController 47 | view.removeFromSuperview() 48 | }) 49 | } 50 | 51 | } 52 | -------------------------------------------------------------------------------- /SimpleEngine/SimpleEngine/Helpers/Debouncer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Debouncer.swift 3 | // SimpleEngine 4 | // 5 | // Created by abedalkareem omreyh on 03/03/2020. 6 | // Copyright © 2020 abedalkareem. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | /// 12 | /// Use it to wait for some time before changing a value again. 13 | /// 14 | open class Debouncer { 15 | 16 | // MARK: - Private properties 17 | 18 | private let queue = DispatchQueue.main 19 | private var workItem: DispatchWorkItem? 20 | private var interval: TimeInterval 21 | 22 | // MARK: - init 23 | 24 | public init(interval: TimeInterval) { 25 | self.interval = interval 26 | } 27 | 28 | // MARK: - 29 | 30 | open func debounce(action: @escaping (() -> Void)) { 31 | workItem?.cancel() 32 | workItem = DispatchWorkItem { action() } 33 | guard let workItem = workItem else { return } 34 | queue.asyncAfter(deadline: .now() + interval, execute: workItem) 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /SimpleEngine/SimpleEngine/Helpers/SimpleMusicPlayer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SimpleMusicPlayer.swift 3 | // SimpleEngine 4 | // 5 | // Created by abedalkareem omreyh on 7/31/19. 6 | // Copyright © 2019 abedalkareem. All rights reserved. 7 | // 8 | 9 | import AVFoundation 10 | import UIKit 11 | 12 | open class SimpleMusicPlayer: NSObject { 13 | 14 | /// 15 | /// A singleton object to use the music player. 16 | /// 17 | public static let shared = SimpleMusicPlayer() 18 | 19 | // MARK: - Properties 20 | 21 | /// 22 | /// To check if the background audio is playing or not. 23 | /// 24 | open var isPlaying = false 25 | 26 | /// 27 | /// Volume of the background audio. 28 | /// The default is `0.5`. 29 | /// 30 | open var backgroundAudioPlayerVolume: Float = 0.5 31 | 32 | /// 33 | /// Volume of the sub audio. 34 | /// The default is `1`. 35 | /// 36 | open var subAudioPlayerVolume: Float = 1.0 37 | 38 | // MARK: - Private properties 39 | 40 | /// 41 | /// An ongoing audio playing in the background. 42 | /// 43 | private var backgroundAudioPlayer: AVAudioPlayer? 44 | 45 | /// 46 | /// A audio to play one time. 47 | /// 48 | private var subAudioPlayers = [(name: String, player: AVAudioPlayer)]() 49 | 50 | private var cachedMusic = [String: AVAudioPlayer]() 51 | 52 | /// 53 | /// Start playing the background music forever. 54 | /// 55 | open func playBackgroundMusicWith(music: M) { 56 | guard let path = Bundle.main.path(forResource: music.rawValue, ofType: music.format) else { 57 | return 58 | } 59 | let url = URL(fileURLWithPath: path) 60 | do { 61 | backgroundAudioPlayer = try AVAudioPlayer(contentsOf: url) 62 | backgroundAudioPlayer?.numberOfLoops = .max 63 | backgroundAudioPlayer?.volume = backgroundAudioPlayerVolume 64 | } catch { 65 | print(error.localizedDescription) 66 | } 67 | backgroundAudioPlayer?.play() 68 | isPlaying = true 69 | } 70 | 71 | /// 72 | /// Pause background music. 73 | /// 74 | func pauseBackgroundMusic() { 75 | backgroundAudioPlayer?.pause() 76 | isPlaying = false 77 | } 78 | 79 | /// 80 | /// Play a music one time. 81 | /// 82 | open func playMusic(music: M, shouldBeCached: Bool = false) { 83 | if let music = cachedMusic[music.rawValue], shouldBeCached { 84 | music.play() 85 | return 86 | } 87 | guard let path = Bundle.main.path(forResource: music.rawValue, ofType: music.format) else { 88 | return 89 | } 90 | let url = URL(fileURLWithPath: path) 91 | do { 92 | let subAudioPlayer = try AVAudioPlayer(contentsOf: url) 93 | subAudioPlayer.volume = subAudioPlayerVolume 94 | subAudioPlayer.play() 95 | subAudioPlayer.delegate = self 96 | if shouldBeCached { 97 | cachedMusic[music.rawValue] = subAudioPlayer 98 | } 99 | self.subAudioPlayers.append((music.rawValue, subAudioPlayer)) 100 | } catch { 101 | print(error.localizedDescription) 102 | } 103 | } 104 | 105 | open func stopMusic(music: M) { 106 | let audio = subAudioPlayers.first { $0.name == music.rawValue } 107 | audio?.player.stop() 108 | subAudioPlayers.removeAll { $0.name == music.rawValue } 109 | } 110 | } 111 | 112 | public protocol MusicType: RawRepresentable where RawValue == String { 113 | var format: String { get } 114 | } 115 | 116 | extension SimpleMusicPlayer: AVAudioPlayerDelegate { 117 | public func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) { 118 | DispatchQueue(label: "app.virus.audio").async { [weak self] in 119 | guard let index = self?.subAudioPlayers.firstIndex(where: { $0.player == player }) else { 120 | return 121 | } 122 | self?.subAudioPlayers.remove(at: index) 123 | } 124 | } 125 | } 126 | -------------------------------------------------------------------------------- /SimpleEngine/SimpleEngine/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 | -------------------------------------------------------------------------------- /SimpleEngine/SimpleEngine/SimpleEngine.h: -------------------------------------------------------------------------------- 1 | // 2 | // SimpleEngine.h 3 | // SimpleEngine 4 | // 5 | // Created by abedalkareem omreyh on 08/03/2020. 6 | // Copyright © 2020 abedalkareem. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for SimpleEngine. 12 | FOUNDATION_EXPORT double SimpleEngineVersionNumber; 13 | 14 | //! Project version string for SimpleEngine. 15 | FOUNDATION_EXPORT const unsigned char SimpleEngineVersionString[]; 16 | 17 | // In this header, you should import all the public headers of your framework using statements like #import 18 | 19 | 20 | -------------------------------------------------------------------------------- /SimpleEngine/SimpleEngine/Views/AnalogView/Analog.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Analog.swift 3 | // SimpleEngine 4 | // 5 | // Created by abedalkareem omreyh on 7/26/19. 6 | // Copyright © 2019 abedalkareem. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | public struct Analog { 12 | public var direction: Direction 13 | public var x: CGFloat 14 | public var y: CGFloat 15 | } 16 | 17 | extension Analog: Equatable { 18 | public static func == (lhs: Analog, rhs: Analog) -> Bool { 19 | lhs.direction == rhs.direction 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /SimpleEngine/SimpleEngine/Views/AnalogView/Direction.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Direction.swift 3 | // SimpleEngine 4 | // 5 | // Created by abedalkareem omreyh on 7/26/19. 6 | // Copyright © 2019 abedalkareem. All rights reserved. 7 | // 8 | import UIKit 9 | 10 | /// Direction value is a value between 0 to 1 that mapped to a `Direction`. 11 | /// 12 | /// The value from 0 to 0.5 in case of x mean the direction is `left`. 13 | /// The value from 0.5 to 1 in case of x mean the direction is `right`. 14 | /// The value from 0 to 0.5 in case of y mean the direction is `top`. 15 | /// The value from 0.5 to 1 in case of y mean the direction is `bottom`. 16 | /// The combination between the two of them give you `topRight`, `topLeft`, 17 | /// `bottomRight` and `bottomLeft`. 18 | /// If the two values are exatly 0.5, then the direction will be `center`. 19 | public enum Direction { 20 | case topLeft 21 | case bottomLeft 22 | case topRight 23 | case bottomRight 24 | case left 25 | case right 26 | case top 27 | case bottom 28 | case center 29 | 30 | public init(x: CGFloat, y: CGFloat) { 31 | switch (x, y) { 32 | case (0.5, 0.5): 33 | self = .center 34 | case (0.6...1, 0...0.41): 35 | self = .topRight 36 | case (0...0.41, 0.59...1): 37 | self = .bottomLeft 38 | case (0.59...1, 0.59...1): 39 | self = .bottomRight 40 | case (0...0.41, 0...0.41): 41 | self = .topLeft 42 | case (0...0.5, 0.41...0.59): 43 | self = .left 44 | case (0.5...1, 0.41...0.59): 45 | self = .right 46 | case (0.41...0.59, 0...0.5): 47 | self = .top 48 | case (0.41...0.59, 0.5...1): 49 | self = .bottom 50 | default: 51 | self = .center 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /SimpleEngine/SimpleEngine/Views/Objects/BackgroundView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BackgroundView.swift 3 | // SimpleEngine 4 | // 5 | // Created by abedalkareem omreyh on 7/26/19. 6 | // Copyright © 2019 abedalkareem. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | /// 12 | /// A view to set as a background for the `SceneView` it could be a normal image or a pattern image. 13 | /// 14 | @IBDesignable 15 | open class BackgroundView: UIView { 16 | 17 | // MARK: - IBInspectables 18 | 19 | /// 20 | /// An image to set as a background, the image could be a normal image or a pattern image. 21 | /// If you set a pattren image don't forget to set the `ImageType` to `pattern`. 22 | /// 23 | @IBInspectable open var image: UIImage = UIImage() { 24 | didSet { 25 | updateImage() 26 | } 27 | } 28 | 29 | // MARK: - Properties 30 | 31 | /// 32 | /// The type of the `image` it could be `full` or `pattern`. 33 | /// 34 | open var imageType: ImageType = .full 35 | 36 | // MARK: - Private properties 37 | 38 | private lazy var imageView = UIImageView() 39 | 40 | // MARK: - init 41 | 42 | /// 43 | /// - Parameters: 44 | /// - frame: Frame to set for the view. 45 | /// - image: An image to set as a background, the image could be a normal image or a pattern image. 46 | /// If you set a pattren image don't forget to set the `ImageType` to `pattern`. 47 | /// - imageType: The type of the `image` it could be `full` or `pattern`. 48 | /// 49 | public init(image: UIImage, frame: CGRect = .zero, imageType: ImageType = .full) { 50 | super.init(frame: frame) 51 | self.image = image 52 | self.imageType = imageType 53 | 54 | setup() 55 | } 56 | 57 | override public init(frame: CGRect) { 58 | super.init(frame: frame) 59 | setup() 60 | } 61 | 62 | public required init?(coder aDecoder: NSCoder) { 63 | super.init(coder: aDecoder) 64 | setup() 65 | } 66 | 67 | private func setup() { 68 | imageView.image = image 69 | imageView.contentMode = .scaleAspectFill 70 | addSubview(imageView) 71 | 72 | imageView.translatesAutoresizingMaskIntoConstraints = false 73 | NSLayoutConstraint.activate([ 74 | imageView.topAnchor.constraint(equalTo: topAnchor), 75 | imageView.bottomAnchor.constraint(equalTo: bottomAnchor), 76 | imageView.leadingAnchor.constraint(equalTo: leadingAnchor), 77 | imageView.trailingAnchor.constraint(equalTo: trailingAnchor) 78 | ]) 79 | } 80 | 81 | // MARK: - 82 | 83 | private func updateImage() { 84 | switch imageType { 85 | case .full: 86 | imageView.image = image 87 | backgroundColor = nil 88 | case .pattern: 89 | backgroundColor = UIColor(patternImage: image) 90 | imageView.image = nil 91 | } 92 | } 93 | 94 | // MARK: - Enums 95 | 96 | public enum ImageType { 97 | case pattern 98 | case full 99 | } 100 | } 101 | -------------------------------------------------------------------------------- /SimpleEngine/SimpleEngine/Views/Objects/MovingBackgroundView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MovingBackgroundView.swift 3 | // Pods-Virus 4 | // 5 | // Created by abedalkareem omreyh on 10/03/2020. 6 | // 7 | 8 | import UIKit 9 | 10 | public class MovingBackgroundView: UIView { 11 | 12 | // MARK: - Properties 13 | 14 | public var view: UIView? { 15 | didSet { 16 | oldValue?.removeFromSuperview() 17 | setup() 18 | } 19 | } 20 | 21 | // MARK: - Private properties 22 | 23 | private var secondView: UIView? { 24 | didSet { 25 | oldValue?.removeFromSuperview() 26 | } 27 | } 28 | // MARK: - init 29 | 30 | public init(view: UIView) { 31 | super.init(frame: .zero) 32 | self.view = view 33 | setup() 34 | } 35 | 36 | override public init(frame: CGRect) { 37 | super.init(frame: frame) 38 | setup() 39 | } 40 | 41 | public required init?(coder aDecoder: NSCoder) { 42 | super.init(coder: aDecoder) 43 | setup() 44 | } 45 | 46 | private func setup() { 47 | secondView = view?.snapshotView(afterScreenUpdates: true) 48 | if let view = view, let secondView = secondView { 49 | addSubview(view) 50 | addSubview(secondView) 51 | } 52 | 53 | playAnimation() 54 | addObservers() 55 | } 56 | 57 | // MARK: - View lifecycle 58 | 59 | override public func didMoveToSuperview() { 60 | super.didMoveToSuperview() 61 | 62 | if superview == nil { 63 | removeObservers() 64 | } 65 | } 66 | 67 | // MARK: - Observers 68 | 69 | private func addObservers() { 70 | NotificationCenter.default 71 | .addObserver(self, 72 | selector: #selector(playAnimation), 73 | name: UIApplication.didBecomeActiveNotification, 74 | object: nil) 75 | } 76 | 77 | private func removeObservers() { 78 | NotificationCenter.default 79 | .removeObserver(self, 80 | name: UIApplication.didBecomeActiveNotification, 81 | object: nil) 82 | } 83 | 84 | // MARK: - Animations 85 | 86 | @objc 87 | private func playAnimation() { 88 | animate() 89 | animateSecondView() 90 | } 91 | 92 | private func animate() { 93 | guard let view = view else { 94 | return 95 | } 96 | let orginalFrame = bounds 97 | var newFrame = orginalFrame 98 | newFrame.origin.x = -orginalFrame.size.width 99 | view.frame = newFrame 100 | UIView.animate(withDuration: 0.5, 101 | delay: .zero, 102 | options: [.repeat, .curveLinear]) { 103 | view.frame = orginalFrame 104 | } 105 | } 106 | 107 | private func animateSecondView() { 108 | guard let secondView = secondView else { 109 | return 110 | } 111 | let orginalFrame = bounds 112 | var newFrame = orginalFrame 113 | newFrame.origin.x = +orginalFrame.size.width 114 | secondView.frame = orginalFrame 115 | UIView.animate(withDuration: 0.5, 116 | delay: .zero, 117 | options: [.repeat, .curveLinear]) { 118 | secondView.frame = newFrame 119 | } 120 | } 121 | } 122 | -------------------------------------------------------------------------------- /SimpleEngine/SimpleEngine/Views/Objects/NodeView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NodeView.swift 3 | // SimpleEngine 4 | // 5 | // Created by abedalkareem omreyh on 7/26/19. 6 | // Copyright © 2019 abedalkareem. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | /// 12 | /// A `NodeView` is a thing that don't move, it's a chair, table or wall in your game. 13 | /// 14 | @IBDesignable 15 | open class NodeView: ObjectView { 16 | 17 | // MARK: - IBInspectables 18 | 19 | @IBInspectable open var image: UIImage = UIImage() { 20 | didSet { 21 | backgroundColor = .clear 22 | imageView.image = image 23 | } 24 | } 25 | 26 | // MARK: - Private properties 27 | 28 | private var imageView = UIImageView() 29 | 30 | // MARK: - init 31 | 32 | override public init(frame: CGRect) { 33 | super.init(frame: frame) 34 | setup() 35 | } 36 | 37 | public required init?(coder aDecoder: NSCoder) { 38 | super.init(coder: aDecoder) 39 | setup() 40 | } 41 | 42 | /// 43 | /// It can be overrided to do extra setups in the subview side. 44 | /// 45 | open func setup() { 46 | imageView = UIImageView() 47 | addSubview(imageView) 48 | 49 | imageView.translatesAutoresizingMaskIntoConstraints = false 50 | NSLayoutConstraint.activate([ 51 | imageView.topAnchor.constraint(equalTo: topAnchor), 52 | imageView.bottomAnchor.constraint(equalTo: bottomAnchor), 53 | imageView.leadingAnchor.constraint(equalTo: leadingAnchor), 54 | imageView.trailingAnchor.constraint(equalTo: trailingAnchor) 55 | ]) 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /SimpleEngine/SimpleEngine/Views/Objects/ObjectView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ObjectView.swift 3 | // SimpleEngine 4 | // 5 | // Created by abedalkareem omreyh on 7/21/19. 6 | // Copyright © 2019 abedalkareem. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | /// 12 | /// The parent class for the `NodeView` and `SpriteView`. 13 | /// this has the common properties and methods like the update method and the type property 14 | /// 15 | @IBDesignable 16 | open class ObjectView: UIView { 17 | 18 | // MARK: - IBInspectables 19 | 20 | /// 21 | /// The type of the `ObjectView` is a unique number for the same kind of objects, like the trees or enemy. 22 | /// This will be used when to object collides together. and if should the object stop 23 | /// when colliding with another object. 24 | /// 25 | @IBInspectable open var type: Int = 0 26 | 27 | // MARK: - Properties 28 | 29 | /// 30 | /// A unique id for each object. 31 | /// 32 | open var id: String = { return UUID().uuidString }() 33 | 34 | open var paused: Bool = false { 35 | didSet { 36 | if paused { 37 | stopTimer() 38 | didPause() 39 | } else { 40 | startTimer() 41 | didResume() 42 | } 43 | } 44 | } 45 | 46 | // MARK: - Private properties 47 | 48 | private var timer: Timer? 49 | 50 | // MARK: - init 51 | 52 | override public init(frame: CGRect) { 53 | super.init(frame: frame) 54 | setup() 55 | } 56 | 57 | public required init?(coder aDecoder: NSCoder) { 58 | super.init(coder: aDecoder) 59 | setup() 60 | } 61 | 62 | private func setup() { 63 | startTimer() 64 | } 65 | 66 | // MARK: - View lifecycle 67 | 68 | override open func didMoveToSuperview() { 69 | super.didMoveToSuperview() 70 | if superview == nil { 71 | stopTimer() 72 | } 73 | } 74 | 75 | private func startTimer() { 76 | stopTimer() 77 | timer = Timer.scheduledTimer(timeInterval: 0.016, 78 | target: self, 79 | selector: #selector(update), 80 | userInfo: nil, 81 | repeats: true) 82 | } 83 | 84 | private func stopTimer() { 85 | timer?.invalidate() 86 | timer = nil 87 | } 88 | 89 | // MARK: - 90 | 91 | @objc 92 | open func update() { } 93 | 94 | /// 95 | /// A method will be called when any object collided with this object. 96 | /// 97 | /// - Parameter object: The object that collided with this current object. 98 | /// 99 | /// - Returns: Return true if the object should report the collide to the view controller. 100 | /// The defualt is `true`. 101 | /// 102 | @discardableResult 103 | open func onCollisionEnter(with object: ObjectView?) -> Bool { 104 | true 105 | } 106 | 107 | /// 108 | /// Override to get an update when the game paused to do any pause logic. 109 | /// 110 | open func didPause() {} 111 | 112 | /// 113 | /// Override to get an update when the game resumed to do any resume logic. 114 | /// 115 | open func didResume() {} 116 | } 117 | -------------------------------------------------------------------------------- /SimpleEngine/SimpleEngine/Views/Objects/SceneView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SceneView.swift 3 | // SimpleEngine 4 | // 5 | // Created by abedalkareem omreyh on 27/10/2019. 6 | // Copyright © 2019 abedalkareem. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | /// 12 | /// A view where you will add the `Sprites` or `Nodes`. You can think of this as level. 13 | /// Each `BaseGameViewController` should have 1 scene, and should be connected throgh `IBOutlet`. 14 | /// 15 | @IBDesignable 16 | open class SceneView: UIView { 17 | 18 | // MARK: - Properties 19 | 20 | open var paused: Bool = false { 21 | didSet { 22 | pauseObjects(paused: paused) 23 | } 24 | } 25 | 26 | // MARK: - init 27 | 28 | override public init(frame: CGRect) { 29 | super.init(frame: frame) 30 | setup() 31 | } 32 | 33 | public required init?(coder aDecoder: NSCoder) { 34 | super.init(coder: aDecoder) 35 | setup() 36 | } 37 | 38 | private func setup() { 39 | backgroundColor = .clear 40 | } 41 | 42 | private func pauseObjects(paused: Bool) { 43 | subviews 44 | .compactMap { $0 as? ObjectView } 45 | .forEach { $0.paused = paused } 46 | } 47 | 48 | } 49 | -------------------------------------------------------------------------------- /SimpleEngine/SimpleEngine/Views/Objects/SpriteView/Frames.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Frames.swift 3 | // SimpleEngine 4 | // 5 | // Created by abedalkareem omreyh on 7/26/19. 6 | // Copyright © 2019 abedalkareem. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | /// 12 | /// To set a frames for the movment of the `SpriteView`. You can set the images (frames) that will show 13 | /// when the user move to right, left, top, bottom, topLeft, bottomLeft, topRight, bottomRight or idel. 14 | /// If you did not pass the topLeft or bottomLeft the left images will be used, same for topRight and bottomRight you 15 | /// will get right images. 16 | /// At least you need to pass the idel images and it will be used for 17 | /// all the frames. 18 | /// You can set the duration of the frames by setting the duration property. 19 | /// 20 | open class FramesHolder { 21 | open var top: Frames? 22 | open var left: Frames? 23 | open var right: Frames? 24 | open var bottom: Frames? 25 | open var idel: Frames 26 | open var topLeft: Frames? 27 | open var bottomLeft: Frames? 28 | open var topRight: Frames? 29 | open var bottomRight: Frames? 30 | 31 | public init(idel: Frames, 32 | top: Frames? = nil, 33 | left: Frames? = nil, 34 | right: Frames? = nil, 35 | bottom: Frames? = nil, 36 | topLeft: Frames? = nil, 37 | bottomLeft: Frames? = nil, 38 | topRight: Frames? = nil, 39 | bottomRight: Frames? = nil) { 40 | self.top = top 41 | self.left = left 42 | self.right = right 43 | self.bottom = bottom 44 | self.idel = idel 45 | self.topLeft = topLeft 46 | self.bottomLeft = bottomLeft 47 | self.topRight = topRight 48 | self.bottomRight = bottomRight 49 | } 50 | 51 | /// 52 | /// A method that will return an array of images to animate depending on the direction you will pass. 53 | /// 54 | open func `for`(_ direction: Direction) -> Frames { 55 | var frame: Frames 56 | switch direction { 57 | case .left: 58 | frame = left ?? idel 59 | case .right: 60 | frame = right ?? idel 61 | case .top: 62 | frame = top ?? idel 63 | case .bottom: 64 | frame = bottom ?? idel 65 | case .center: 66 | frame = idel 67 | case .topLeft: 68 | frame = topLeft ?? left ?? idel 69 | case .bottomLeft: 70 | frame = bottomLeft ?? left ?? idel 71 | case .topRight: 72 | frame = topRight ?? right ?? idel 73 | case .bottomRight: 74 | frame = bottomRight ?? right ?? idel 75 | } 76 | return frame 77 | } 78 | } 79 | 80 | open class Frames { 81 | open var images: [UIImage]? 82 | open var duration = 0.3 83 | 84 | public init(images: [UIImage]?, duration: Double = 0.3) { 85 | self.images = images 86 | self.duration = duration 87 | } 88 | } 89 | -------------------------------------------------------------------------------- /Tests/LinuxMain.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | 3 | import SimpleEngineTests 4 | 5 | var tests = [XCTestCaseEntry]() 6 | tests += SimpleEngineTests.allTests() 7 | XCTMain(tests) 8 | -------------------------------------------------------------------------------- /Tests/SimpleEngineTests/SimpleEngineTests.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | @testable import SimpleEngine 3 | 4 | final class SimpleEngineTests: XCTestCase { 5 | func testExample() { 6 | XCTAssertEqual("Tests to be added", "Tests to be added") 7 | } 8 | static var allTests = [ 9 | ("testExample", testExample), 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /Tests/SimpleEngineTests/XCTestManifests.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | 3 | #if !canImport(ObjectiveC) 4 | public func allTests() -> [XCTestCaseEntry] { 5 | return [ 6 | testCase(SimpleEngineTests.allTests), 7 | ] 8 | } 9 | #endif 10 | -------------------------------------------------------------------------------- /cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/cover.png -------------------------------------------------------------------------------- /screenshots/storyboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/screenshots/storyboard.png -------------------------------------------------------------------------------- /screenshots/storyboard_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Abedalkareem/SimpleEngine/81f591fa646a7b4083c424b7a3ba78e2d1681e4c/screenshots/storyboard_2.png --------------------------------------------------------------------------------