├── .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
--------------------------------------------------------------------------------