实例介绍
3D_Apple_Games_by_Tutorials_3.0是由rayWinderich发布的,质量高,比较新,这里是它的配套源码和素材。
【实例截图】
【核心代码】
c2409c10-c45d-49c5-afac-81209856caec
├── __MACOSX
│ └── Source
│ ├── 01-scenes
│ │ ├── final
│ │ │ └── GeometryFighter
│ │ │ ├── GeometryFighter
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ └── AppIcon.appiconset
│ │ │ │ └── Base.lproj
│ │ │ └── GeometryFighter.xcodeproj
│ │ │ └── project.xcworkspace
│ │ └── starter
│ │ └── resources
│ │ └── AppIcon
│ ├── 02-nodes
│ │ ├── challenge
│ │ │ └── GeometryFighter
│ │ │ ├── GeometryFighter
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ └── Logo_Diffuse.imageset
│ │ │ │ ├── Base.lproj
│ │ │ │ └── GeometryFighter.scnassets
│ │ │ │ ├── Sounds
│ │ │ │ └── Textures
│ │ │ └── GeometryFighter.xcodeproj
│ │ │ └── project.xcworkspace
│ │ ├── final
│ │ │ └── GeometryFighter
│ │ │ ├── GeometryFighter
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ └── Logo_Diffuse.imageset
│ │ │ │ ├── Base.lproj
│ │ │ │ └── GeometryFighter.scnassets
│ │ │ │ ├── Sounds
│ │ │ │ └── Textures
│ │ │ └── GeometryFighter.xcodeproj
│ │ │ └── project.xcworkspace
│ │ └── starter
│ │ ├── GeometryFighter
│ │ │ ├── GeometryFighter
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ └── AppIcon.appiconset
│ │ │ │ └── Base.lproj
│ │ │ └── GeometryFighter.xcodeproj
│ │ │ └── project.xcworkspace
│ │ └── resources
│ │ └── GeometryFighter.scnassets
│ │ ├── Sounds
│ │ └── Textures
│ ├── 03-physics
│ │ ├── final
│ │ │ └── GeometryFighter
│ │ │ ├── GeometryFighter
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ └── Logo_Diffuse.imageset
│ │ │ │ ├── Base.lproj
│ │ │ │ ├── GameUtils
│ │ │ │ └── GeometryFighter.scnassets
│ │ │ │ ├── Sounds
│ │ │ │ └── Textures
│ │ │ └── GeometryFighter.xcodeproj
│ │ │ └── project.xcworkspace
│ │ └── starter
│ │ └── GeometryFighter
│ │ ├── GeometryFighter
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ └── Logo_Diffuse.imageset
│ │ │ ├── Base.lproj
│ │ │ └── GeometryFighter.scnassets
│ │ │ ├── Sounds
│ │ │ └── Textures
│ │ └── GeometryFighter.xcodeproj
│ │ └── project.xcworkspace
│ ├── 04-render-loop
│ │ ├── final
│ │ │ └── GeometryFighter
│ │ │ ├── GeometryFighter
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ └── Logo_Diffuse.imageset
│ │ │ │ ├── Base.lproj
│ │ │ │ ├── GameUtils
│ │ │ │ └── GeometryFighter.scnassets
│ │ │ │ ├── Sounds
│ │ │ │ └── Textures
│ │ │ └── GeometryFighter.xcodeproj
│ │ │ └── project.xcworkspace
│ │ └── starter
│ │ └── GeometryFighter
│ │ ├── GeometryFighter
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ └── Logo_Diffuse.imageset
│ │ │ ├── Base.lproj
│ │ │ ├── GameUtils
│ │ │ └── GeometryFighter.scnassets
│ │ │ ├── Sounds
│ │ │ └── Textures
│ │ └── GeometryFighter.xcodeproj
│ │ └── project.xcworkspace
│ ├── 05-particle-systems
│ │ ├── challenge
│ │ │ └── GeometryFighter
│ │ │ ├── GeometryFighter
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ └── Logo_Diffuse.imageset
│ │ │ │ ├── Base.lproj
│ │ │ │ ├── GameUtils
│ │ │ │ └── GeometryFighter.scnassets
│ │ │ │ ├── Sounds
│ │ │ │ └── Textures
│ │ │ └── GeometryFighter.xcodeproj
│ │ │ └── project.xcworkspace
│ │ ├── final
│ │ │ └── GeometryFighter
│ │ │ ├── GeometryFighter
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ └── Logo_Diffuse.imageset
│ │ │ │ ├── Base.lproj
│ │ │ │ ├── GameUtils
│ │ │ │ └── GeometryFighter.scnassets
│ │ │ │ ├── Sounds
│ │ │ │ └── Textures
│ │ │ └── GeometryFighter.xcodeproj
│ │ │ └── project.xcworkspace
│ │ ├── juiced
│ │ │ └── GeometryFighter
│ │ │ ├── GeometryFighter
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ └── Logo_Diffuse.imageset
│ │ │ │ ├── Base.lproj
│ │ │ │ ├── GameUtils
│ │ │ │ └── GeometryFighter.scnassets
│ │ │ │ ├── Sounds
│ │ │ │ └── Textures
│ │ │ └── GeometryFighter.xcodeproj
│ │ │ └── project.xcworkspace
│ │ └── starter
│ │ └── GeometryFighter
│ │ ├── GeometryFighter
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ └── Logo_Diffuse.imageset
│ │ │ ├── Base.lproj
│ │ │ ├── GameUtils
│ │ │ └── GeometryFighter.scnassets
│ │ │ ├── Sounds
│ │ │ └── Textures
│ │ └── GeometryFighter.xcodeproj
│ │ └── project.xcworkspace
│ ├── 06-scene-editor
│ │ ├── final
│ │ │ └── Breaker
│ │ │ ├── Breaker
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ └── Logo_Diffuse.imageset
│ │ │ │ ├── Base.lproj
│ │ │ │ ├── Breaker.scnassets
│ │ │ │ │ ├── Scenes
│ │ │ │ │ ├── Sounds
│ │ │ │ │ └── Textures
│ │ │ │ └── GameUtils
│ │ │ └── Breaker.xcodeproj
│ │ │ └── project.xcworkspace
│ │ └── starter
│ │ └── Breaker
│ │ ├── Breaker
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ └── Logo_Diffuse.imageset
│ │ │ ├── Base.lproj
│ │ │ ├── Breaker.scnassets
│ │ │ │ ├── Sounds
│ │ │ │ └── Textures
│ │ │ └── GameUtils
│ │ └── Breaker.xcodeproj
│ │ └── project.xcworkspace
│ ├── 07-cameras
│ │ ├── final
│ │ │ └── Breaker
│ │ │ ├── Breaker
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ └── Logo_Diffuse.imageset
│ │ │ │ ├── Base.lproj
│ │ │ │ ├── Breaker.scnassets
│ │ │ │ │ ├── Scenes
│ │ │ │ │ ├── Sounds
│ │ │ │ │ └── Textures
│ │ │ │ └── GameUtils
│ │ │ └── Breaker.xcodeproj
│ │ │ └── project.xcworkspace
│ │ └── starter
│ │ └── Breaker
│ │ ├── Breaker
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ └── Logo_Diffuse.imageset
│ │ │ ├── Base.lproj
│ │ │ ├── Breaker.scnassets
│ │ │ │ ├── Scenes
│ │ │ │ ├── Sounds
│ │ │ │ └── Textures
│ │ │ └── GameUtils
│ │ └── Breaker.xcodeproj
│ │ └── project.xcworkspace
│ ├── 08-lights
│ │ ├── final
│ │ │ └── Breaker
│ │ │ ├── Breaker
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ └── Logo_Diffuse.imageset
│ │ │ │ ├── Base.lproj
│ │ │ │ ├── Breaker.scnassets
│ │ │ │ │ ├── Scenes
│ │ │ │ │ ├── Sounds
│ │ │ │ │ └── Textures
│ │ │ │ └── GameUtils
│ │ │ └── Breaker.xcodeproj
│ │ │ └── project.xcworkspace
│ │ └── starter
│ │ └── Breaker
│ │ ├── Breaker
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ └── Logo_Diffuse.imageset
│ │ │ ├── Base.lproj
│ │ │ ├── Breaker.scnassets
│ │ │ │ ├── Scenes
│ │ │ │ ├── Sounds
│ │ │ │ └── Textures
│ │ │ └── GameUtils
│ │ └── Breaker.xcodeproj
│ │ └── project.xcworkspace
│ ├── 09-primitives
│ │ ├── challenge
│ │ │ └── Breaker
│ │ │ ├── Breaker
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ └── Logo_Diffuse.imageset
│ │ │ │ ├── Base.lproj
│ │ │ │ ├── Breaker.scnassets
│ │ │ │ │ ├── Scenes
│ │ │ │ │ ├── Sounds
│ │ │ │ │ └── Textures
│ │ │ │ └── GameUtils
│ │ │ └── Breaker.xcodeproj
│ │ │ └── project.xcworkspace
│ │ ├── final
│ │ │ └── Breaker
│ │ │ ├── Breaker
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ └── Logo_Diffuse.imageset
│ │ │ │ ├── Base.lproj
│ │ │ │ ├── Breaker.scnassets
│ │ │ │ │ ├── Scenes
│ │ │ │ │ ├── Sounds
│ │ │ │ │ └── Textures
│ │ │ │ └── GameUtils
│ │ │ └── Breaker.xcodeproj
│ │ │ └── project.xcworkspace
│ │ └── starter
│ │ └── Breaker
│ │ ├── Breaker
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ └── Logo_Diffuse.imageset
│ │ │ ├── Base.lproj
│ │ │ ├── Breaker.scnassets
│ │ │ │ ├── Scenes
│ │ │ │ ├── Sounds
│ │ │ │ └── Textures
│ │ │ └── GameUtils
│ │ └── Breaker.xcodeproj
│ │ └── project.xcworkspace
│ ├── 10-basic-collision-detection
│ │ ├── challenge
│ │ │ └── Breaker
│ │ │ ├── Breaker
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ └── Logo_Diffuse.imageset
│ │ │ │ ├── Base.lproj
│ │ │ │ ├── Breaker.scnassets
│ │ │ │ │ ├── Scenes
│ │ │ │ │ ├── Sounds
│ │ │ │ │ └── Textures
│ │ │ │ └── GameUtils
│ │ │ └── Breaker.xcodeproj
│ │ │ └── project.xcworkspace
│ │ ├── final
│ │ │ └── Breaker
│ │ │ ├── Breaker
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ └── Logo_Diffuse.imageset
│ │ │ │ ├── Base.lproj
│ │ │ │ ├── Breaker.scnassets
│ │ │ │ │ ├── Scenes
│ │ │ │ │ ├── Sounds
│ │ │ │ │ └── Textures
│ │ │ │ └── GameUtils
│ │ │ └── Breaker.xcodeproj
│ │ │ └── project.xcworkspace
│ │ └── starter
│ │ └── Breaker
│ │ ├── Breaker
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ └── Logo_Diffuse.imageset
│ │ │ ├── Base.lproj
│ │ │ ├── Breaker.scnassets
│ │ │ │ ├── Scenes
│ │ │ │ ├── Sounds
│ │ │ │ └── Textures
│ │ │ └── GameUtils
│ │ └── Breaker.xcodeproj
│ │ └── project.xcworkspace
│ ├── 11-materials
│ │ ├── final
│ │ │ └── MarbleMaze
│ │ │ ├── MarbleMaze
│ │ │ │ ├── art.scnassets
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ └── AppIcon.appiconset
│ │ │ │ └── Base.lproj
│ │ │ └── MarbleMaze.xcodeproj
│ │ │ └── project.xcworkspace
│ │ └── starter
│ │ ├── MarbleMaze
│ │ │ ├── MarbleMaze
│ │ │ │ ├── art.scnassets
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ └── AppIcon.appiconset
│ │ │ │ └── Base.lproj
│ │ │ └── MarbleMaze.xcodeproj
│ │ │ └── project.xcworkspace
│ │ └── SoccerBall
│ │ ├── SoccerBall
│ │ │ ├── Assets.xcassets
│ │ │ │ └── AppIcon.appiconset
│ │ │ ├── ball.scnassets
│ │ │ └── Base.lproj
│ │ └── SoccerBall.xcodeproj
│ │ └── project.xcworkspace
│ ├── 12-reference-nodes
│ │ ├── challenge
│ │ │ └── MarbleMaze
│ │ │ ├── MarbleMaze
│ │ │ │ ├── art.scnassets
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ └── AppIcon.appiconset
│ │ │ │ └── Base.lproj
│ │ │ └── MarbleMaze.xcodeproj
│ │ │ └── project.xcworkspace
│ │ ├── final
│ │ │ └── MarbleMaze
│ │ │ ├── MarbleMaze
│ │ │ │ ├── art.scnassets
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ └── AppIcon.appiconset
│ │ │ │ └── Base.lproj
│ │ │ └── MarbleMaze.xcodeproj
│ │ │ └── project.xcworkspace
│ │ └── starter
│ │ └── MarbleMaze
│ │ ├── MarbleMaze
│ │ │ ├── art.scnassets
│ │ │ ├── Assets.xcassets
│ │ │ │ └── AppIcon.appiconset
│ │ │ └── Base.lproj
│ │ └── MarbleMaze.xcodeproj
│ │ └── project.xcworkspace
│ ├── 13-shadows
│ │ ├── challenge
│ │ │ └── MarbleMaze
│ │ │ ├── MarbleMaze
│ │ │ │ ├── art.scnassets
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ └── AppIcon.appiconset
│ │ │ │ └── Base.lproj
│ │ │ └── MarbleMaze.xcodeproj
│ │ │ └── project.xcworkspace
│ │ ├── final
│ │ │ └── MarbleMaze
│ │ │ ├── MarbleMaze
│ │ │ │ ├── art.scnassets
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ └── AppIcon.appiconset
│ │ │ │ └── Base.lproj
│ │ │ └── MarbleMaze.xcodeproj
│ │ │ └── project.xcworkspace
│ │ └── starter
│ │ └── MarbleMaze
│ │ ├── MarbleMaze
│ │ │ ├── art.scnassets
│ │ │ ├── Assets.xcassets
│ │ │ │ └── AppIcon.appiconset
│ │ │ └── Base.lproj
│ │ └── MarbleMaze.xcodeproj
│ │ └── project.xcworkspace
│ ├── 14-intermediate-collision-detection
│ │ ├── challenge
│ │ │ └── MarbleMaze
│ │ │ ├── MarbleMaze
│ │ │ │ ├── art.scnassets
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ └── AppIcon.appiconset
│ │ │ │ ├── Base.lproj
│ │ │ │ └── GameUtils
│ │ │ └── MarbleMaze.xcodeproj
│ │ │ └── project.xcworkspace
│ │ ├── final
│ │ │ └── MarbleMaze
│ │ │ ├── MarbleMaze
│ │ │ │ ├── art.scnassets
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ └── AppIcon.appiconset
│ │ │ │ ├── Base.lproj
│ │ │ │ └── GameUtils
│ │ │ └── MarbleMaze.xcodeproj
│ │ │ └── project.xcworkspace
│ │ └── starter
│ │ └── MarbleMaze
│ │ ├── MarbleMaze
│ │ │ ├── art.scnassets
│ │ │ ├── Assets.xcassets
│ │ │ │ └── AppIcon.appiconset
│ │ │ └── Base.lproj
│ │ └── MarbleMaze.xcodeproj
│ │ └── project.xcworkspace
│ ├── 15-motion-control
│ │ ├── final
│ │ │ └── MarbleMaze
│ │ │ ├── MarbleMaze
│ │ │ │ ├── art.scnassets
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ └── MarbleMaze_Splash.imageset
│ │ │ │ ├── Base.lproj
│ │ │ │ ├── GameUtils
│ │ │ │ └── Sounds
│ │ │ └── MarbleMaze.xcodeproj
│ │ │ └── project.xcworkspace
│ │ └── starter
│ │ └── MarbleMaze
│ │ ├── MarbleMaze
│ │ │ ├── art.scnassets
│ │ │ ├── Assets.xcassets
│ │ │ │ └── AppIcon.appiconset
│ │ │ ├── Base.lproj
│ │ │ └── GameUtils
│ │ └── MarbleMaze.xcodeproj
│ │ └── project.xcworkspace
│ ├── 16-macos-games
│ │ ├── final
│ │ │ └── GeometryFighter
│ │ │ ├── GeometryFighter
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ └── Logo_Diffuse.imageset
│ │ │ │ ├── Base.lproj
│ │ │ │ ├── GameUtils
│ │ │ │ └── GeometryFighter.scnassets
│ │ │ │ ├── Sounds
│ │ │ │ └── Textures
│ │ │ ├── GeometryFighterMac
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ └── AppIcon.appiconset
│ │ │ │ └── Base.lproj
│ │ │ └── GeometryFighter.xcodeproj
│ │ │ └── project.xcworkspace
│ │ └── starter
│ │ └── GeometryFighter
│ │ ├── GeometryFighter
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ └── Logo_Diffuse.imageset
│ │ │ ├── Base.lproj
│ │ │ ├── GameUtils
│ │ │ └── GeometryFighter.scnassets
│ │ │ ├── Sounds
│ │ │ └── Textures
│ │ └── GeometryFighter.xcodeproj
│ │ └── project.xcworkspace
│ ├── 17-tvos-games
│ │ ├── final
│ │ │ └── Breaker
│ │ │ ├── Breaker
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ └── Logo_Diffuse.imageset
│ │ │ │ ├── Base.lproj
│ │ │ │ ├── Breaker.scnassets
│ │ │ │ │ ├── Scenes
│ │ │ │ │ ├── Sounds
│ │ │ │ │ └── Textures
│ │ │ │ └── GameUtils
│ │ │ ├── BreakerTV
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── App Icon & Top Shelf Image.brandassets
│ │ │ │ │ │ ├── App Icon - Large.imagestack
│ │ │ │ │ │ │ ├── Back.imagestacklayer
│ │ │ │ │ │ │ │ └── Content.imageset
│ │ │ │ │ │ │ ├── Front.imagestacklayer
│ │ │ │ │ │ │ │ └── Content.imageset
│ │ │ │ │ │ │ └── Middle.imagestacklayer
│ │ │ │ │ │ │ └── Content.imageset
│ │ │ │ │ │ ├── App Icon - Small.imagestack
│ │ │ │ │ │ │ ├── Back.imagestacklayer
│ │ │ │ │ │ │ │ └── Content.imageset
│ │ │ │ │ │ │ ├── Front.imagestacklayer
│ │ │ │ │ │ │ │ └── Content.imageset
│ │ │ │ │ │ │ └── Middle.imagestacklayer
│ │ │ │ │ │ │ └── Content.imageset
│ │ │ │ │ │ ├── Top Shelf Image.imageset
│ │ │ │ │ │ └── Top Shelf Image Wide.imageset
│ │ │ │ │ └── LaunchImage.launchimage
│ │ │ │ └── Base.lproj
│ │ │ └── Breaker.xcodeproj
│ │ │ └── project.xcworkspace
│ │ └── starter
│ │ └── Breaker
│ │ ├── Breaker
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ └── Logo_Diffuse.imageset
│ │ │ ├── Base.lproj
│ │ │ ├── Breaker.scnassets
│ │ │ │ ├── Scenes
│ │ │ │ ├── Sounds
│ │ │ │ └── Textures
│ │ │ └── GameUtils
│ │ └── Breaker.xcodeproj
│ │ └── project.xcworkspace
│ ├── 18-watchos-games
│ │ ├── final
│ │ │ └── GeometryFighter
│ │ │ ├── GeometryFighter
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ └── Logo_Diffuse.imageset
│ │ │ │ ├── Base.lproj
│ │ │ │ ├── GameUtils
│ │ │ │ └── GeometryFighter.scnassets
│ │ │ │ ├── Sounds
│ │ │ │ └── Textures
│ │ │ ├── GeometryFighterWatch
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ └── AppIcon.appiconset
│ │ │ │ └── Base.lproj
│ │ │ ├── GeometryFighterWatch Extension
│ │ │ │ └── Assets.xcassets
│ │ │ │ └── Complication.complicationset
│ │ │ │ ├── Circular.imageset
│ │ │ │ ├── Modular.imageset
│ │ │ │ └── Utilitarian.imageset
│ │ │ └── GeometryFighter.xcodeproj
│ │ │ └── project.xcworkspace
│ │ └── starter
│ │ └── GeometryFighter
│ │ ├── GeometryFighter
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ └── Logo_Diffuse.imageset
│ │ │ ├── Base.lproj
│ │ │ ├── GameUtils
│ │ │ └── GeometryFighter.scnassets
│ │ │ ├── Sounds
│ │ │ └── Textures
│ │ └── GeometryFighter.xcodeproj
│ │ └── project.xcworkspace
│ ├── 19-transitions
│ │ ├── challenge
│ │ │ └── Mr.Pig
│ │ │ ├── Mr.Pig
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ └── MrPig_Launch.imageset
│ │ │ │ ├── Base.lproj
│ │ │ │ ├── GameUtils
│ │ │ │ └── MrPig.scnassets
│ │ │ │ └── Audio
│ │ │ └── Mr.Pig.xcodeproj
│ │ │ └── project.xcworkspace
│ │ ├── final
│ │ │ └── Mr.Pig
│ │ │ ├── Mr.Pig
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ └── MrPig_Launch.imageset
│ │ │ │ ├── Base.lproj
│ │ │ │ ├── GameUtils
│ │ │ │ └── MrPig.scnassets
│ │ │ │ └── Audio
│ │ │ └── Mr.Pig.xcodeproj
│ │ │ └── project.xcworkspace
│ │ └── starter
│ │ └── Mr.Pig
│ │ ├── Mr.Pig
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ └── MrPig_Launch.imageset
│ │ │ ├── Base.lproj
│ │ │ ├── GameUtils
│ │ │ └── MrPig.scnassets
│ │ │ └── Audio
│ │ └── Mr.Pig.xcodeproj
│ │ └── project.xcworkspace
│ ├── 20-advanced-scene-creation
│ │ ├── challenge
│ │ │ └── Mr.Pig
│ │ │ ├── Mr.Pig
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ └── MrPig_Launch.imageset
│ │ │ │ ├── Base.lproj
│ │ │ │ ├── GameUtils
│ │ │ │ └── MrPig.scnassets
│ │ │ │ └── Audio
│ │ │ └── Mr.Pig.xcodeproj
│ │ │ └── project.xcworkspace
│ │ ├── final
│ │ │ └── Mr.Pig
│ │ │ ├── Mr.Pig
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ └── MrPig_Launch.imageset
│ │ │ │ ├── Base.lproj
│ │ │ │ ├── GameUtils
│ │ │ │ └── MrPig.scnassets
│ │ │ │ └── Audio
│ │ │ └── Mr.Pig.xcodeproj
│ │ │ └── project.xcworkspace
│ │ └── starter
│ │ └── Mr.Pig
│ │ ├── Mr.Pig
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ └── MrPig_Launch.imageset
│ │ │ ├── Base.lproj
│ │ │ ├── GameUtils
│ │ │ └── MrPig.scnassets
│ │ │ └── Audio
│ │ └── Mr.Pig.xcodeproj
│ │ └── project.xcworkspace
│ ├── 21-actions
│ │ ├── challenge
│ │ │ └── Mr.Pig
│ │ │ ├── Mr.Pig
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ └── MrPig_Launch.imageset
│ │ │ │ ├── Base.lproj
│ │ │ │ ├── GameUtils
│ │ │ │ └── MrPig.scnassets
│ │ │ │ └── Audio
│ │ │ └── Mr.Pig.xcodeproj
│ │ │ └── project.xcworkspace
│ │ ├── final
│ │ │ └── Mr.Pig
│ │ │ ├── Mr.Pig
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ └── MrPig_Launch.imageset
│ │ │ │ ├── Base.lproj
│ │ │ │ ├── GameUtils
│ │ │ │ └── MrPig.scnassets
│ │ │ │ └── Audio
│ │ │ └── Mr.Pig.xcodeproj
│ │ │ └── project.xcworkspace
│ │ └── starter
│ │ └── Mr.Pig
│ │ ├── Mr.Pig
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ └── MrPig_Launch.imageset
│ │ │ ├── Base.lproj
│ │ │ ├── GameUtils
│ │ │ └── MrPig.scnassets
│ │ │ └── Audio
│ │ └── Mr.Pig.xcodeproj
│ │ └── project.xcworkspace
│ ├── 22-advanced-collision-detection
│ │ ├── final
│ │ │ └── Mr.Pig
│ │ │ ├── Mr.Pig
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ └── MrPig_Launch.imageset
│ │ │ │ ├── Base.lproj
│ │ │ │ ├── GameUtils
│ │ │ │ └── MrPig.scnassets
│ │ │ │ └── Audio
│ │ │ └── Mr.Pig.xcodeproj
│ │ │ └── project.xcworkspace
│ │ └── starter
│ │ └── Mr.Pig
│ │ ├── Mr.Pig
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ └── MrPig_Launch.imageset
│ │ │ ├── Base.lproj
│ │ │ ├── GameUtils
│ │ │ └── MrPig.scnassets
│ │ │ └── Audio
│ │ └── Mr.Pig.xcodeproj
│ │ └── project.xcworkspace
│ ├── 23-audio
│ │ ├── challenge
│ │ │ └── Mr.Pig
│ │ │ ├── Mr.Pig
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ └── MrPig_Launch.imageset
│ │ │ │ ├── Base.lproj
│ │ │ │ ├── GameUtils
│ │ │ │ └── MrPig.scnassets
│ │ │ │ └── Audio
│ │ │ └── Mr.Pig.xcodeproj
│ │ │ └── project.xcworkspace
│ │ ├── final
│ │ │ └── Mr.Pig
│ │ │ ├── Mr.Pig
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ └── MrPig_Launch.imageset
│ │ │ │ ├── Base.lproj
│ │ │ │ ├── GameUtils
│ │ │ │ └── MrPig.scnassets
│ │ │ │ └── Audio
│ │ │ └── Mr.Pig.xcodeproj
│ │ │ └── project.xcworkspace
│ │ └── starter
│ │ └── Mr.Pig
│ │ ├── Mr.Pig
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ └── MrPig_Launch.imageset
│ │ │ ├── Base.lproj
│ │ │ ├── GameUtils
│ │ │ └── MrPig.scnassets
│ │ │ └── Audio
│ │ └── Mr.Pig.xcodeproj
│ │ └── project.xcworkspace
│ └── 24-3d-art-for-programmers
│ ├── challenge
│ │ └── Mr.Pig
│ │ ├── Mr.Pig
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ └── MrPig_Launch.imageset
│ │ │ ├── Base.lproj
│ │ │ ├── GameUtils
│ │ │ └── MrPig.scnassets
│ │ │ └── Audio
│ │ └── Mr.Pig.xcodeproj
│ │ └── project.xcworkspace
│ ├── final
│ │ └── Mr.Pig
│ │ ├── Mr.Pig
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ └── MrPig_Launch.imageset
│ │ │ ├── Base.lproj
│ │ │ ├── GameUtils
│ │ │ └── MrPig.scnassets
│ │ │ └── Audio
│ │ └── Mr.Pig.xcodeproj
│ │ └── project.xcworkspace
│ └── starter
│ └── Mr.Pig
│ ├── Mr.Pig
│ │ ├── Assets.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ └── MrPig_Launch.imageset
│ │ ├── Base.lproj
│ │ ├── GameUtils
│ │ └── MrPig.scnassets
│ │ └── Audio
│ └── Mr.Pig.xcodeproj
│ └── project.xcworkspace
└── Source
├── 01-scenes
│ ├── final
│ │ └── GeometryFighter
│ │ ├── GeometryFighter
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets
│ │ │ │ └── AppIcon.appiconset
│ │ │ │ ├── AppIcon_60@2x.png
│ │ │ │ ├── AppIcon_60@3x.png
│ │ │ │ ├── AppIcon_76@2x.png
│ │ │ │ ├── AppIcon_76.png
│ │ │ │ ├── AppIcon_85_5@2x.png
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── GameViewController.swift
│ │ │ └── Info.plist
│ │ └── GeometryFighter.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ └── starter
│ └── resources
│ └── AppIcon
│ ├── AppIcon_60@2x.png
│ ├── AppIcon_60@3x.png
│ ├── AppIcon_76@2x.png
│ ├── AppIcon_76.png
│ ├── AppIcon_83_5@2x.png
│ └── AppIcon.afdesign
├── 02-nodes
│ ├── challenge
│ │ └── GeometryFighter
│ │ ├── GeometryFighter
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ ├── AppIcon_60@2x.png
│ │ │ │ │ ├── AppIcon_60@3x.png
│ │ │ │ │ ├── AppIcon_76@2x.png
│ │ │ │ │ ├── AppIcon_76.png
│ │ │ │ │ ├── AppIcon_85_5@2x.png
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Contents.json
│ │ │ │ └── Logo_Diffuse.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── Logo_Diffuse.png
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── GameViewController.swift
│ │ │ ├── GeometryFighter.scnassets
│ │ │ │ ├── Sounds
│ │ │ │ │ ├── ExplodeBad.wav
│ │ │ │ │ ├── ExplodeGood.wav
│ │ │ │ │ ├── GameOver.wav
│ │ │ │ │ ├── SpawnBad.wav
│ │ │ │ │ └── SpawnGood.wav
│ │ │ │ └── Textures
│ │ │ │ ├── Background_Diffuse.png
│ │ │ │ ├── CircleParticle.png
│ │ │ │ ├── GameOver_Diffuse.png
│ │ │ │ ├── Logo_Diffuse.png
│ │ │ │ └── TapToPlay_Diffuse.png
│ │ │ ├── Info.plist
│ │ │ └── ShapeType.swift
│ │ └── GeometryFighter.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ ├── final
│ │ └── GeometryFighter
│ │ ├── GeometryFighter
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ ├── AppIcon_60@2x.png
│ │ │ │ │ ├── AppIcon_60@3x.png
│ │ │ │ │ ├── AppIcon_76@2x.png
│ │ │ │ │ ├── AppIcon_76.png
│ │ │ │ │ ├── AppIcon_85_5@2x.png
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Contents.json
│ │ │ │ └── Logo_Diffuse.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── Logo_Diffuse.png
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── GameViewController.swift
│ │ │ ├── GeometryFighter.scnassets
│ │ │ │ ├── Sounds
│ │ │ │ │ ├── ExplodeBad.wav
│ │ │ │ │ ├── ExplodeGood.wav
│ │ │ │ │ ├── GameOver.wav
│ │ │ │ │ ├── SpawnBad.wav
│ │ │ │ │ └── SpawnGood.wav
│ │ │ │ └── Textures
│ │ │ │ ├── Background_Diffuse.png
│ │ │ │ ├── CircleParticle.png
│ │ │ │ ├── GameOver_Diffuse.png
│ │ │ │ ├── Logo_Diffuse.png
│ │ │ │ └── TapToPlay_Diffuse.png
│ │ │ ├── Info.plist
│ │ │ └── ShapeType.swift
│ │ └── GeometryFighter.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ └── starter
│ ├── GeometryFighter
│ │ ├── GeometryFighter
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets
│ │ │ │ └── AppIcon.appiconset
│ │ │ │ ├── AppIcon_60@2x.png
│ │ │ │ ├── AppIcon_60@3x.png
│ │ │ │ ├── AppIcon_76@2x.png
│ │ │ │ ├── AppIcon_76.png
│ │ │ │ ├── AppIcon_85_5@2x.png
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── GameViewController.swift
│ │ │ └── Info.plist
│ │ └── GeometryFighter.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ └── resources
│ └── GeometryFighter.scnassets
│ ├── Sounds
│ │ ├── ExplodeBad.wav
│ │ ├── ExplodeGood.wav
│ │ ├── GameOver.wav
│ │ ├── SpawnBad.wav
│ │ └── SpawnGood.wav
│ └── Textures
│ ├── Background_Diffuse.png
│ ├── CircleParticle.png
│ ├── GameOver_Diffuse.png
│ ├── Logo_Diffuse.png
│ └── TapToPlay_Diffuse.png
├── 03-physics
│ ├── final
│ │ └── GeometryFighter
│ │ ├── GeometryFighter
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ ├── AppIcon_60@2x.png
│ │ │ │ │ ├── AppIcon_60@3x.png
│ │ │ │ │ ├── AppIcon_76@2x.png
│ │ │ │ │ ├── AppIcon_76.png
│ │ │ │ │ ├── AppIcon_83_5@2x.png
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Contents.json
│ │ │ │ └── Logo_Diffuse.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── Logo_Diffuse.png
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── GameUtils
│ │ │ │ ├── Double+Extensions.swift
│ │ │ │ ├── Float+Extensions.swift
│ │ │ │ ├── GameHelper.swift
│ │ │ │ ├── Generics.swift
│ │ │ │ ├── Int+Extensions.swift
│ │ │ │ ├── SCNAction+Extensions.swift
│ │ │ │ └── UIColor+Extensions.swift
│ │ │ ├── GameViewController.swift
│ │ │ ├── GeometryFighter.scnassets
│ │ │ │ ├── Sounds
│ │ │ │ │ ├── ExplodeBad.wav
│ │ │ │ │ ├── ExplodeGood.wav
│ │ │ │ │ ├── GameOver.wav
│ │ │ │ │ ├── SpawnBad.wav
│ │ │ │ │ └── SpawnGood.wav
│ │ │ │ └── Textures
│ │ │ │ ├── Background_Diffuse.png
│ │ │ │ ├── CircleParticle.png
│ │ │ │ ├── GameOver_Diffuse.png
│ │ │ │ ├── Logo_Diffuse.png
│ │ │ │ └── TapToPlay_Diffuse.png
│ │ │ ├── Info.plist
│ │ │ └── ShapeType.swift
│ │ └── GeometryFighter.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ └── starter
│ └── GeometryFighter
│ ├── GeometryFighter
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ │ ├── AppIcon_60@2x.png
│ │ │ │ ├── AppIcon_60@3x.png
│ │ │ │ ├── AppIcon_76@2x.png
│ │ │ │ ├── AppIcon_76.png
│ │ │ │ ├── AppIcon_83_5@2x.png
│ │ │ │ └── Contents.json
│ │ │ ├── Contents.json
│ │ │ └── Logo_Diffuse.imageset
│ │ │ ├── Contents.json
│ │ │ └── Logo_Diffuse.png
│ │ ├── Base.lproj
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── GameViewController.swift
│ │ ├── GeometryFighter.scnassets
│ │ │ ├── Sounds
│ │ │ │ ├── ExplodeBad.wav
│ │ │ │ ├── ExplodeGood.wav
│ │ │ │ ├── GameOver.wav
│ │ │ │ ├── SpawnBad.wav
│ │ │ │ └── SpawnGood.wav
│ │ │ └── Textures
│ │ │ ├── Background_Diffuse.png
│ │ │ ├── CircleParticle.png
│ │ │ ├── GameOver_Diffuse.png
│ │ │ ├── Logo_Diffuse.png
│ │ │ └── TapToPlay_Diffuse.png
│ │ ├── Info.plist
│ │ └── ShapeType.swift
│ └── GeometryFighter.xcodeproj
│ ├── project.pbxproj
│ └── project.xcworkspace
│ └── contents.xcworkspacedata
├── 04-render-loop
│ ├── final
│ │ └── GeometryFighter
│ │ ├── GeometryFighter
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ ├── AppIcon_60@2x.png
│ │ │ │ │ ├── AppIcon_60@3x.png
│ │ │ │ │ ├── AppIcon_76@2x.png
│ │ │ │ │ ├── AppIcon_76.png
│ │ │ │ │ ├── AppIcon_85_5@2x.png
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Contents.json
│ │ │ │ └── Logo_Diffuse.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── Logo_Diffuse.png
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── GameUtils
│ │ │ │ ├── Double+Extensions.swift
│ │ │ │ ├── Float+Extensions.swift
│ │ │ │ ├── GameHelper.swift
│ │ │ │ ├── Generics.swift
│ │ │ │ ├── Int+Extensions.swift
│ │ │ │ ├── SCNAction+Extensions.swift
│ │ │ │ └── UIColor+Extensions.swift
│ │ │ ├── GameViewController.swift
│ │ │ ├── GeometryFighter.scnassets
│ │ │ │ ├── Sounds
│ │ │ │ │ ├── ExplodeBad.wav
│ │ │ │ │ ├── ExplodeGood.wav
│ │ │ │ │ ├── GameOver.wav
│ │ │ │ │ ├── SpawnBad.wav
│ │ │ │ │ └── SpawnGood.wav
│ │ │ │ └── Textures
│ │ │ │ ├── Background_Diffuse.png
│ │ │ │ ├── CircleParticle.png
│ │ │ │ ├── GameOver_Diffuse.png
│ │ │ │ ├── Logo_Diffuse.png
│ │ │ │ └── TapToPlay_Diffuse.png
│ │ │ ├── Info.plist
│ │ │ └── ShapeType.swift
│ │ └── GeometryFighter.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ └── starter
│ └── GeometryFighter
│ ├── GeometryFighter
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ │ ├── AppIcon_60@2x.png
│ │ │ │ ├── AppIcon_60@3x.png
│ │ │ │ ├── AppIcon_76@2x.png
│ │ │ │ ├── AppIcon_76.png
│ │ │ │ ├── AppIcon_85_5@2x.png
│ │ │ │ └── Contents.json
│ │ │ ├── Contents.json
│ │ │ └── Logo_Diffuse.imageset
│ │ │ ├── Contents.json
│ │ │ └── Logo_Diffuse.png
│ │ ├── Base.lproj
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── GameUtils
│ │ │ ├── Double+Extensions.swift
│ │ │ ├── Float+Extensions.swift
│ │ │ ├── GameHelper.swift
│ │ │ ├── Generics.swift
│ │ │ ├── Int+Extensions.swift
│ │ │ ├── SCNAction+Extensions.swift
│ │ │ └── UIColor+Extensions.swift
│ │ ├── GameViewController.swift
│ │ ├── GeometryFighter.scnassets
│ │ │ ├── Sounds
│ │ │ │ ├── ExplodeBad.wav
│ │ │ │ ├── ExplodeGood.wav
│ │ │ │ ├── GameOver.wav
│ │ │ │ ├── SpawnBad.wav
│ │ │ │ └── SpawnGood.wav
│ │ │ └── Textures
│ │ │ ├── Background_Diffuse.png
│ │ │ ├── CircleParticle.png
│ │ │ ├── GameOver_Diffuse.png
│ │ │ ├── Logo_Diffuse.png
│ │ │ └── TapToPlay_Diffuse.png
│ │ ├── Info.plist
│ │ └── ShapeType.swift
│ └── GeometryFighter.xcodeproj
│ ├── project.pbxproj
│ └── project.xcworkspace
│ └── contents.xcworkspacedata
├── 05-particle-systems
│ ├── challenge
│ │ └── GeometryFighter
│ │ ├── GeometryFighter
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ ├── AppIcon_60@2x.png
│ │ │ │ │ ├── AppIcon_60@3x.png
│ │ │ │ │ ├── AppIcon_76@2x.png
│ │ │ │ │ ├── AppIcon_76.png
│ │ │ │ │ ├── AppIcon_83_5@2x.png
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Contents.json
│ │ │ │ └── Logo_Diffuse.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── Logo_Diffuse.png
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Explode.scnp
│ │ │ ├── GameUtils
│ │ │ │ ├── Double+Extensions.swift
│ │ │ │ ├── Float+Extensions.swift
│ │ │ │ ├── GameHelper.swift
│ │ │ │ ├── Generics.swift
│ │ │ │ ├── Int+Extensions.swift
│ │ │ │ ├── SCNAction+Extensions.swift
│ │ │ │ └── UIColor+Extensions.swift
│ │ │ ├── GameViewController.swift
│ │ │ ├── GeometryFighter.scnassets
│ │ │ │ ├── Sounds
│ │ │ │ │ ├── ExplodeBad.wav
│ │ │ │ │ ├── ExplodeGood.wav
│ │ │ │ │ ├── GameOver.wav
│ │ │ │ │ ├── SpawnBad.wav
│ │ │ │ │ └── SpawnGood.wav
│ │ │ │ └── Textures
│ │ │ │ ├── Background_Diffuse.png
│ │ │ │ ├── CircleParticle.png
│ │ │ │ ├── GameOver_Diffuse.png
│ │ │ │ ├── Logo_Diffuse.png
│ │ │ │ └── TapToPlay_Diffuse.png
│ │ │ ├── Info.plist
│ │ │ ├── ShapeType.swift
│ │ │ ├── spark.png
│ │ │ └── Trail.scnp
│ │ └── GeometryFighter.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ ├── final
│ │ └── GeometryFighter
│ │ ├── GeometryFighter
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ ├── AppIcon_60@2x.png
│ │ │ │ │ ├── AppIcon_60@3x.png
│ │ │ │ │ ├── AppIcon_76@2x.png
│ │ │ │ │ ├── AppIcon_76.png
│ │ │ │ │ ├── AppIcon_83_5@2x.png
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Contents.json
│ │ │ │ └── Logo_Diffuse.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── Logo_Diffuse.png
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── GameUtils
│ │ │ │ ├── Double+Extensions.swift
│ │ │ │ ├── Float+Extensions.swift
│ │ │ │ ├── GameHelper.swift
│ │ │ │ ├── Generics.swift
│ │ │ │ ├── Int+Extensions.swift
│ │ │ │ ├── SCNAction+Extensions.swift
│ │ │ │ └── UIColor+Extensions.swift
│ │ │ ├── GameViewController.swift
│ │ │ ├── GeometryFighter.scnassets
│ │ │ │ ├── Sounds
│ │ │ │ │ ├── ExplodeBad.wav
│ │ │ │ │ ├── ExplodeGood.wav
│ │ │ │ │ ├── GameOver.wav
│ │ │ │ │ ├── SpawnBad.wav
│ │ │ │ │ └── SpawnGood.wav
│ │ │ │ └── Textures
│ │ │ │ ├── Background_Diffuse.png
│ │ │ │ ├── CircleParticle.png
│ │ │ │ ├── GameOver_Diffuse.png
│ │ │ │ ├── Logo_Diffuse.png
│ │ │ │ └── TapToPlay_Diffuse.png
│ │ │ ├── Info.plist
│ │ │ ├── ShapeType.swift
│ │ │ ├── spark.png
│ │ │ └── Trail.scnp
│ │ └── GeometryFighter.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ ├── juiced
│ │ └── GeometryFighter
│ │ ├── GeometryFighter
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ ├── AppIcon_60@2x.png
│ │ │ │ │ ├── AppIcon_60@3x.png
│ │ │ │ │ ├── AppIcon_76@2x.png
│ │ │ │ │ ├── AppIcon_76.png
│ │ │ │ │ ├── AppIcon_83_5@2x.png
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Contents.json
│ │ │ │ └── Logo_Diffuse.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── Logo_Diffuse.png
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Explode.scnp
│ │ │ ├── GameUtils
│ │ │ │ ├── Double+Extensions.swift
│ │ │ │ ├── Float+Extensions.swift
│ │ │ │ ├── GameHelper.swift
│ │ │ │ ├── Generics.swift
│ │ │ │ ├── Int+Extensions.swift
│ │ │ │ ├── SCNAction+Extensions.swift
│ │ │ │ └── UIColor+Extensions.swift
│ │ │ ├── GameViewController.swift
│ │ │ ├── GeometryFighter.scnassets
│ │ │ │ ├── Sounds
│ │ │ │ │ ├── ExplodeBad.wav
│ │ │ │ │ ├── ExplodeGood.wav
│ │ │ │ │ ├── GameOver.wav
│ │ │ │ │ ├── SpawnBad.wav
│ │ │ │ │ └── SpawnGood.wav
│ │ │ │ └── Textures
│ │ │ │ ├── Background_Diffuse.png
│ │ │ │ ├── CircleParticle.png
│ │ │ │ ├── GameOver_Diffuse.png
│ │ │ │ ├── Logo_Diffuse.png
│ │ │ │ └── TapToPlay_Diffuse.png
│ │ │ ├── Info.plist
│ │ │ ├── ShapeType.swift
│ │ │ ├── spark.png
│ │ │ └── Trail.scnp
│ │ └── GeometryFighter.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ └── starter
│ └── GeometryFighter
│ ├── GeometryFighter
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ │ ├── AppIcon_60@2x.png
│ │ │ │ ├── AppIcon_60@3x.png
│ │ │ │ ├── AppIcon_76@2x.png
│ │ │ │ ├── AppIcon_76.png
│ │ │ │ ├── AppIcon_83_5@2x.png
│ │ │ │ └── Contents.json
│ │ │ ├── Contents.json
│ │ │ └── Logo_Diffuse.imageset
│ │ │ ├── Contents.json
│ │ │ └── Logo_Diffuse.png
│ │ ├── Base.lproj
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── GameUtils
│ │ │ ├── Double+Extensions.swift
│ │ │ ├── Float+Extensions.swift
│ │ │ ├── GameHelper.swift
│ │ │ ├── Generics.swift
│ │ │ ├── Int+Extensions.swift
│ │ │ ├── SCNAction+Extensions.swift
│ │ │ └── UIColor+Extensions.swift
│ │ ├── GameViewController.swift
│ │ ├── GeometryFighter.scnassets
│ │ │ ├── Sounds
│ │ │ │ ├── ExplodeBad.wav
│ │ │ │ ├── ExplodeGood.wav
│ │ │ │ ├── GameOver.wav
│ │ │ │ ├── SpawnBad.wav
│ │ │ │ └── SpawnGood.wav
│ │ │ └── Textures
│ │ │ ├── Background_Diffuse.png
│ │ │ ├── CircleParticle.png
│ │ │ ├── GameOver_Diffuse.png
│ │ │ ├── Logo_Diffuse.png
│ │ │ └── TapToPlay_Diffuse.png
│ │ ├── Info.plist
│ │ └── ShapeType.swift
│ └── GeometryFighter.xcodeproj
│ ├── project.pbxproj
│ └── project.xcworkspace
│ └── contents.xcworkspacedata
├── 06-scene-editor
│ ├── final
│ │ └── Breaker
│ │ ├── Breaker
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ ├── BreakerAppIcon_120x120.png
│ │ │ │ │ ├── BreakerAppIcon_152x152.png
│ │ │ │ │ ├── BreakerAppIcon_167x167.png
│ │ │ │ │ ├── BreakerAppIcon_180x180.png
│ │ │ │ │ ├── BreakerAppIcon_76x76.png
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Contents.json
│ │ │ │ └── Logo_Diffuse.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── Logo_Diffuse.png
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Breaker.scnassets
│ │ │ │ ├── Scenes
│ │ │ │ │ └── Game.scn
│ │ │ │ ├── Sounds
│ │ │ │ │ ├── Barrier.wav
│ │ │ │ │ ├── Block0.wav
│ │ │ │ │ ├── Block1.wav
│ │ │ │ │ ├── Block2.wav
│ │ │ │ │ ├── GameOver.wav
│ │ │ │ │ └── Paddle.wav
│ │ │ │ └── Textures
│ │ │ │ ├── GameOver_Diffuse.png
│ │ │ │ ├── Particle.png
│ │ │ │ └── TapToPlay_Diffuse.png
│ │ │ ├── GameUtils
│ │ │ │ ├── GameHelper.swift
│ │ │ │ ├── GameUtils.swift
│ │ │ │ ├── SCNAction+Extensions.swift
│ │ │ │ └── SCNVector3+Extensions.swift
│ │ │ ├── GameViewController.swift
│ │ │ └── Info.plist
│ │ └── Breaker.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ └── starter
│ └── Breaker
│ ├── Breaker
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ │ ├── BreakerAppIcon_120x120.png
│ │ │ │ ├── BreakerAppIcon_152x152.png
│ │ │ │ ├── BreakerAppIcon_180x180.png
│ │ │ │ ├── BreakerAppIcon_76x76.png
│ │ │ │ ├── BreakerAppIcon_83_5x83_5.png
│ │ │ │ └── Contents.json
│ │ │ ├── Contents.json
│ │ │ └── Logo_Diffuse.imageset
│ │ │ ├── Contents.json
│ │ │ └── Logo_Diffuse.png
│ │ ├── Base.lproj
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── Breaker.scnassets
│ │ │ ├── Sounds
│ │ │ │ ├── Barrier.wav
│ │ │ │ ├── Block0.wav
│ │ │ │ ├── Block1.wav
│ │ │ │ ├── Block2.wav
│ │ │ │ ├── GameOver.wav
│ │ │ │ └── Paddle.wav
│ │ │ └── Textures
│ │ │ ├── GameOver_Diffuse.png
│ │ │ ├── Particle.png
│ │ │ └── TapToPlay_Diffuse.png
│ │ ├── GameUtils
│ │ │ ├── GameHelper.swift
│ │ │ ├── GameUtils.swift
│ │ │ ├── SCNAction+Extensions.swift
│ │ │ └── SCNVector3+Extensions.swift
│ │ ├── GameViewController.swift
│ │ └── Info.plist
│ └── Breaker.xcodeproj
│ ├── project.pbxproj
│ └── project.xcworkspace
│ └── contents.xcworkspacedata
├── 07-cameras
│ ├── final
│ │ └── Breaker
│ │ ├── Breaker
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ ├── BreakerAppIcon_120x120.png
│ │ │ │ │ ├── BreakerAppIcon_152x152.png
│ │ │ │ │ ├── BreakerAppIcon_167x167.png
│ │ │ │ │ ├── BreakerAppIcon_180x180.png
│ │ │ │ │ ├── BreakerAppIcon_76x76.png
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Contents.json
│ │ │ │ └── Logo_Diffuse.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── Logo_Diffuse.png
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Breaker.scnassets
│ │ │ │ ├── Scenes
│ │ │ │ │ └── Game.scn
│ │ │ │ ├── Sounds
│ │ │ │ │ ├── Barrier.wav
│ │ │ │ │ ├── Block0.wav
│ │ │ │ │ ├── Block1.wav
│ │ │ │ │ ├── Block2.wav
│ │ │ │ │ ├── GameOver.wav
│ │ │ │ │ └── Paddle.wav
│ │ │ │ └── Textures
│ │ │ │ ├── GameOver_Diffuse.png
│ │ │ │ ├── Logo_Diffuse.png
│ │ │ │ ├── Particle.png
│ │ │ │ └── TapToPlay_Diffuse.png
│ │ │ ├── GameUtils
│ │ │ │ ├── GameHelper.swift
│ │ │ │ ├── GameUtils.swift
│ │ │ │ ├── SCNAction+Extensions.swift
│ │ │ │ └── SCNVector3+Extensions.swift
│ │ │ ├── GameViewController.swift
│ │ │ └── Info.plist
│ │ └── Breaker.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ └── starter
│ └── Breaker
│ ├── Breaker
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ │ ├── BreakerAppIcon_120x120.png
│ │ │ │ ├── BreakerAppIcon_152x152.png
│ │ │ │ ├── BreakerAppIcon_167x167.png
│ │ │ │ ├── BreakerAppIcon_180x180.png
│ │ │ │ ├── BreakerAppIcon_76x76.png
│ │ │ │ └── Contents.json
│ │ │ ├── Contents.json
│ │ │ └── Logo_Diffuse.imageset
│ │ │ ├── Contents.json
│ │ │ └── Logo_Diffuse.png
│ │ ├── Base.lproj
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── Breaker.scnassets
│ │ │ ├── Scenes
│ │ │ │ └── Game.scn
│ │ │ ├── Sounds
│ │ │ │ ├── Barrier.wav
│ │ │ │ ├── Block0.wav
│ │ │ │ ├── Block1.wav
│ │ │ │ ├── Block2.wav
│ │ │ │ ├── GameOver.wav
│ │ │ │ └── Paddle.wav
│ │ │ └── Textures
│ │ │ ├── GameOver_Diffuse.png
│ │ │ ├── Logo_Diffuse.png
│ │ │ ├── Particle.png
│ │ │ └── TapToPlay_Diffuse.png
│ │ ├── GameUtils
│ │ │ ├── GameHelper.swift
│ │ │ ├── GameUtils.swift
│ │ │ ├── SCNAction+Extensions.swift
│ │ │ └── SCNVector3+Extensions.swift
│ │ ├── GameViewController.swift
│ │ └── Info.plist
│ └── Breaker.xcodeproj
│ ├── project.pbxproj
│ └── project.xcworkspace
│ └── contents.xcworkspacedata
├── 08-lights
│ ├── final
│ │ └── Breaker
│ │ ├── Breaker
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ ├── BreakerAppIcon_120x120.png
│ │ │ │ │ ├── BreakerAppIcon_152x152.png
│ │ │ │ │ ├── BreakerAppIcon_167x167.png
│ │ │ │ │ ├── BreakerAppIcon_180x180.png
│ │ │ │ │ ├── BreakerAppIcon_76x76.png
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Contents.json
│ │ │ │ └── Logo_Diffuse.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── Logo_Diffuse.png
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Breaker.scnassets
│ │ │ │ ├── Scenes
│ │ │ │ │ └── Game.scn
│ │ │ │ ├── Sounds
│ │ │ │ │ ├── Barrier.wav
│ │ │ │ │ ├── Block0.wav
│ │ │ │ │ ├── Block1.wav
│ │ │ │ │ ├── Block2.wav
│ │ │ │ │ ├── GameOver.wav
│ │ │ │ │ └── Paddle.wav
│ │ │ │ └── Textures
│ │ │ │ ├── GameOver_Diffuse.png
│ │ │ │ ├── Logo_Diffuse.png
│ │ │ │ ├── Particle.png
│ │ │ │ └── TapToPlay_Diffuse.png
│ │ │ ├── GameUtils
│ │ │ │ ├── GameHelper.swift
│ │ │ │ ├── GameUtils.swift
│ │ │ │ ├── SCNAction+Extensions.swift
│ │ │ │ └── SCNVector3+Extensions.swift
│ │ │ ├── GameViewController.swift
│ │ │ └── Info.plist
│ │ └── Breaker.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ └── starter
│ └── Breaker
│ ├── Breaker
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ │ ├── BreakerAppIcon_120x120.png
│ │ │ │ ├── BreakerAppIcon_152x152.png
│ │ │ │ ├── BreakerAppIcon_167x167.png
│ │ │ │ ├── BreakerAppIcon_180x180.png
│ │ │ │ ├── BreakerAppIcon_76x76.png
│ │ │ │ └── Contents.json
│ │ │ ├── Contents.json
│ │ │ └── Logo_Diffuse.imageset
│ │ │ ├── Contents.json
│ │ │ └── Logo_Diffuse.png
│ │ ├── Base.lproj
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── Breaker.scnassets
│ │ │ ├── Scenes
│ │ │ │ └── Game.scn
│ │ │ ├── Sounds
│ │ │ │ ├── Barrier.wav
│ │ │ │ ├── Block0.wav
│ │ │ │ ├── Block1.wav
│ │ │ │ ├── Block2.wav
│ │ │ │ ├── GameOver.wav
│ │ │ │ └── Paddle.wav
│ │ │ └── Textures
│ │ │ ├── GameOver_Diffuse.png
│ │ │ ├── Logo_Diffuse.png
│ │ │ ├── Particle.png
│ │ │ └── TapToPlay_Diffuse.png
│ │ ├── GameUtils
│ │ │ ├── GameHelper.swift
│ │ │ ├── GameUtils.swift
│ │ │ ├── SCNAction+Extensions.swift
│ │ │ └── SCNVector3+Extensions.swift
│ │ ├── GameViewController.swift
│ │ └── Info.plist
│ └── Breaker.xcodeproj
│ ├── project.pbxproj
│ └── project.xcworkspace
│ └── contents.xcworkspacedata
├── 09-primitives
│ ├── challenge
│ │ └── Breaker
│ │ ├── Breaker
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ ├── BreakerAppIcon_120x120.png
│ │ │ │ │ ├── BreakerAppIcon_152x152.png
│ │ │ │ │ ├── BreakerAppIcon_167x167.png
│ │ │ │ │ ├── BreakerAppIcon_180x180.png
│ │ │ │ │ ├── BreakerAppIcon_76x76.png
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Contents.json
│ │ │ │ └── Logo_Diffuse.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── Logo_Diffuse.png
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Breaker.scnassets
│ │ │ │ ├── Scenes
│ │ │ │ │ └── Game.scn
│ │ │ │ ├── Sounds
│ │ │ │ │ ├── Barrier.wav
│ │ │ │ │ ├── Block0.wav
│ │ │ │ │ ├── Block1.wav
│ │ │ │ │ ├── Block2.wav
│ │ │ │ │ ├── GameOver.wav
│ │ │ │ │ └── Paddle.wav
│ │ │ │ └── Textures
│ │ │ │ ├── GameOver_Diffuse.png
│ │ │ │ ├── Logo_Diffuse.png
│ │ │ │ ├── Particle.png
│ │ │ │ └── TapToPlay_Diffuse.png
│ │ │ ├── GameUtils
│ │ │ │ ├── GameHelper.swift
│ │ │ │ ├── GameUtils.swift
│ │ │ │ ├── SCNAction+Extensions.swift
│ │ │ │ └── SCNVector3+Extensions.swift
│ │ │ ├── GameViewController.swift
│ │ │ └── Info.plist
│ │ └── Breaker.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ ├── final
│ │ └── Breaker
│ │ ├── Breaker
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ ├── BreakerAppIcon_120x120.png
│ │ │ │ │ ├── BreakerAppIcon_152x152.png
│ │ │ │ │ ├── BreakerAppIcon_167x167.png
│ │ │ │ │ ├── BreakerAppIcon_180x180.png
│ │ │ │ │ ├── BreakerAppIcon_76x76.png
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Contents.json
│ │ │ │ └── Logo_Diffuse.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── Logo_Diffuse.png
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Breaker.scnassets
│ │ │ │ ├── Scenes
│ │ │ │ │ └── Game.scn
│ │ │ │ ├── Sounds
│ │ │ │ │ ├── Barrier.wav
│ │ │ │ │ ├── Block0.wav
│ │ │ │ │ ├── Block1.wav
│ │ │ │ │ ├── Block2.wav
│ │ │ │ │ ├── GameOver.wav
│ │ │ │ │ └── Paddle.wav
│ │ │ │ └── Textures
│ │ │ │ ├── GameOver_Diffuse.png
│ │ │ │ ├── Logo_Diffuse.png
│ │ │ │ ├── Particle.png
│ │ │ │ └── TapToPlay_Diffuse.png
│ │ │ ├── GameUtils
│ │ │ │ ├── GameHelper.swift
│ │ │ │ ├── GameUtils.swift
│ │ │ │ ├── SCNAction+Extensions.swift
│ │ │ │ └── SCNVector3+Extensions.swift
│ │ │ ├── GameViewController.swift
│ │ │ └── Info.plist
│ │ └── Breaker.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ └── starter
│ └── Breaker
│ ├── Breaker
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ │ ├── BreakerAppIcon_120x120.png
│ │ │ │ ├── BreakerAppIcon_152x152.png
│ │ │ │ ├── BreakerAppIcon_167x167.png
│ │ │ │ ├── BreakerAppIcon_180x180.png
│ │ │ │ ├── BreakerAppIcon_76x76.png
│ │ │ │ └── Contents.json
│ │ │ ├── Contents.json
│ │ │ └── Logo_Diffuse.imageset
│ │ │ ├── Contents.json
│ │ │ └── Logo_Diffuse.png
│ │ ├── Base.lproj
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── Breaker.scnassets
│ │ │ ├── Scenes
│ │ │ │ └── Game.scn
│ │ │ ├── Sounds
│ │ │ │ ├── Barrier.wav
│ │ │ │ ├── Block0.wav
│ │ │ │ ├── Block1.wav
│ │ │ │ ├── Block2.wav
│ │ │ │ ├── GameOver.wav
│ │ │ │ └── Paddle.wav
│ │ │ └── Textures
│ │ │ ├── GameOver_Diffuse.png
│ │ │ ├── Logo_Diffuse.png
│ │ │ ├── Particle.png
│ │ │ └── TapToPlay_Diffuse.png
│ │ ├── GameUtils
│ │ │ ├── GameHelper.swift
│ │ │ ├── GameUtils.swift
│ │ │ ├── SCNAction+Extensions.swift
│ │ │ └── SCNVector3+Extensions.swift
│ │ ├── GameViewController.swift
│ │ └── Info.plist
│ └── Breaker.xcodeproj
│ ├── project.pbxproj
│ └── project.xcworkspace
│ └── contents.xcworkspacedata
├── 10-basic-collision-detection
│ ├── challenge
│ │ └── Breaker
│ │ ├── Breaker
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ ├── BreakerAppIcon_120x120.png
│ │ │ │ │ ├── BreakerAppIcon_152x152.png
│ │ │ │ │ ├── BreakerAppIcon_167x167.png
│ │ │ │ │ ├── BreakerAppIcon_180x180.png
│ │ │ │ │ ├── BreakerAppIcon_76x76.png
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Contents.json
│ │ │ │ └── Logo_Diffuse.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── Logo_Diffuse.png
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Breaker.scnassets
│ │ │ │ ├── Scenes
│ │ │ │ │ └── Game.scn
│ │ │ │ ├── Sounds
│ │ │ │ │ ├── Barrier.wav
│ │ │ │ │ ├── Block0.wav
│ │ │ │ │ ├── Block1.wav
│ │ │ │ │ ├── Block2.wav
│ │ │ │ │ ├── GameOver.wav
│ │ │ │ │ └── Paddle.wav
│ │ │ │ └── Textures
│ │ │ │ ├── GameOver_Diffuse.png
│ │ │ │ ├── Logo_Diffuse.png
│ │ │ │ ├── Particle.png
│ │ │ │ └── TapToPlay_Diffuse.png
│ │ │ ├── GameUtils
│ │ │ │ ├── GameHelper.swift
│ │ │ │ ├── GameUtils.swift
│ │ │ │ ├── SCNAction+Extensions.swift
│ │ │ │ └── SCNVector3+Extensions.swift
│ │ │ ├── GameViewController.swift
│ │ │ └── Info.plist
│ │ └── Breaker.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ ├── final
│ │ └── Breaker
│ │ ├── Breaker
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ ├── BreakerAppIcon_120x120.png
│ │ │ │ │ ├── BreakerAppIcon_152x152.png
│ │ │ │ │ ├── BreakerAppIcon_167x167.png
│ │ │ │ │ ├── BreakerAppIcon_180x180.png
│ │ │ │ │ ├── BreakerAppIcon_76x76.png
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Contents.json
│ │ │ │ └── Logo_Diffuse.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── Logo_Diffuse.png
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Breaker.scnassets
│ │ │ │ ├── Scenes
│ │ │ │ │ └── Game.scn
│ │ │ │ ├── Sounds
│ │ │ │ │ ├── Barrier.wav
│ │ │ │ │ ├── Block0.wav
│ │ │ │ │ ├── Block1.wav
│ │ │ │ │ ├── Block2.wav
│ │ │ │ │ ├── GameOver.wav
│ │ │ │ │ └── Paddle.wav
│ │ │ │ └── Textures
│ │ │ │ ├── GameOver_Diffuse.png
│ │ │ │ ├── Logo_Diffuse.png
│ │ │ │ ├── Particle.png
│ │ │ │ └── TapToPlay_Diffuse.png
│ │ │ ├── GameUtils
│ │ │ │ ├── GameHelper.swift
│ │ │ │ ├── GameUtils.swift
│ │ │ │ ├── SCNAction+Extensions.swift
│ │ │ │ └── SCNVector3+Extensions.swift
│ │ │ ├── GameViewController.swift
│ │ │ └── Info.plist
│ │ └── Breaker.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ └── starter
│ └── Breaker
│ ├── Breaker
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ │ ├── BreakerAppIcon_120x120.png
│ │ │ │ ├── BreakerAppIcon_152x152.png
│ │ │ │ ├── BreakerAppIcon_167x167.png
│ │ │ │ ├── BreakerAppIcon_180x180.png
│ │ │ │ ├── BreakerAppIcon_76x76.png
│ │ │ │ └── Contents.json
│ │ │ ├── Contents.json
│ │ │ └── Logo_Diffuse.imageset
│ │ │ ├── Contents.json
│ │ │ └── Logo_Diffuse.png
│ │ ├── Base.lproj
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── Breaker.scnassets
│ │ │ ├── Scenes
│ │ │ │ └── Game.scn
│ │ │ ├── Sounds
│ │ │ │ ├── Barrier.wav
│ │ │ │ ├── Block0.wav
│ │ │ │ ├── Block1.wav
│ │ │ │ ├── Block2.wav
│ │ │ │ ├── GameOver.wav
│ │ │ │ └── Paddle.wav
│ │ │ └── Textures
│ │ │ ├── GameOver_Diffuse.png
│ │ │ ├── Logo_Diffuse.png
│ │ │ ├── Particle.png
│ │ │ └── TapToPlay_Diffuse.png
│ │ ├── GameUtils
│ │ │ ├── GameHelper.swift
│ │ │ ├── GameUtils.swift
│ │ │ ├── SCNAction+Extensions.swift
│ │ │ └── SCNVector3+Extensions.swift
│ │ ├── GameViewController.swift
│ │ └── Info.plist
│ └── Breaker.xcodeproj
│ ├── project.pbxproj
│ └── project.xcworkspace
│ └── contents.xcworkspacedata
├── 11-materials
│ ├── final
│ │ └── MarbleMaze
│ │ ├── MarbleMaze
│ │ │ ├── AppDelegate.swift
│ │ │ ├── art.scnassets
│ │ │ │ ├── game.scn
│ │ │ │ ├── img_ball_diffuse.jpg
│ │ │ │ ├── img_ball_emission.jpg
│ │ │ │ ├── img_ball_normal.png
│ │ │ │ ├── img_crate_diffuse.jpg
│ │ │ │ ├── img_crate_normal.jpg
│ │ │ │ ├── img_pillar_diffuse.jpg
│ │ │ │ ├── img_pillar_normal.jpg
│ │ │ │ ├── img_pillar_specular.jpg
│ │ │ │ ├── img_skybox.jpg
│ │ │ │ ├── img_stone_ambient.jpg
│ │ │ │ ├── img_stone_diffuse.jpg
│ │ │ │ └── img_stone_normal.jpg
│ │ │ ├── Assets.xcassets
│ │ │ │ └── AppIcon.appiconset
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── GameViewController.swift
│ │ │ └── Info.plist
│ │ └── MarbleMaze.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ └── starter
│ ├── MarbleMaze
│ │ ├── MarbleMaze
│ │ │ ├── AppDelegate.swift
│ │ │ ├── art.scnassets
│ │ │ │ ├── game.scn
│ │ │ │ ├── img_ball_diffuse.jpg
│ │ │ │ ├── img_ball_emission.jpg
│ │ │ │ ├── img_ball_normal.png
│ │ │ │ ├── img_crate_diffuse.jpg
│ │ │ │ ├── img_crate_normal.jpg
│ │ │ │ ├── img_pillar_diffuse.jpg
│ │ │ │ ├── img_pillar_normal.jpg
│ │ │ │ ├── img_pillar_specular.jpg
│ │ │ │ ├── img_skybox.jpg
│ │ │ │ ├── img_stone_ambient.jpg
│ │ │ │ ├── img_stone_diffuse.jpg
│ │ │ │ └── img_stone_normal.jpg
│ │ │ ├── Assets.xcassets
│ │ │ │ └── AppIcon.appiconset
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── GameViewController.swift
│ │ │ └── Info.plist
│ │ └── MarbleMaze.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ └── SoccerBall
│ ├── SoccerBall
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets
│ │ │ └── AppIcon.appiconset
│ │ │ └── Contents.json
│ │ ├── ball.scnassets
│ │ │ ├── 00_Start.scn
│ │ │ ├── 01_Diffuse.scn
│ │ │ ├── 02_Normal.scn
│ │ │ ├── 03_Reflective.scn
│ │ │ ├── 04_Occlusion.scn
│ │ │ ├── 05_Specular.scn
│ │ │ ├── 06_Emission.scn
│ │ │ ├── 07_Transparency.scn
│ │ │ ├── 08_Final.scn
│ │ │ ├── 09_Final+MultiplyMap.scn
│ │ │ ├── 10_Final+Emission.scn
│ │ │ ├── 11_Final+Transparency.scn
│ │ │ ├── 12_Final+PBR.scn
│ │ │ ├── 13_MetalnessVSRoughness.scn
│ │ │ ├── 99_LightingModels.scn
│ │ │ ├── ball_diffuse.jpg
│ │ │ ├── ball_emission.jpg
│ │ │ ├── ball_environment.jpg
│ │ │ ├── ball_normal.jpg
│ │ │ ├── ball_occlusion.jpg
│ │ │ ├── ball_reflective.jpg
│ │ │ ├── ball_specular.jpg
│ │ │ └── ball_transparent.jpg
│ │ ├── Base.lproj
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── GameViewController.swift
│ │ └── Info.plist
│ └── SoccerBall.xcodeproj
│ ├── project.pbxproj
│ └── project.xcworkspace
│ └── contents.xcworkspacedata
├── 12-reference-nodes
│ ├── challenge
│ │ └── MarbleMaze
│ │ ├── MarbleMaze
│ │ │ ├── AppDelegate.swift
│ │ │ ├── art.scnassets
│ │ │ │ ├── game.scn
│ │ │ │ ├── img_ball_diffuse.jpg
│ │ │ │ ├── img_ball_emission.jpg
│ │ │ │ ├── img_ball_normal.png
│ │ │ │ ├── img_crate_diffuse.jpg
│ │ │ │ ├── img_crate_normal.jpg
│ │ │ │ ├── img_pillar_diffuse.jpg
│ │ │ │ ├── img_pillar_normal.jpg
│ │ │ │ ├── img_pillar_specular.jpg
│ │ │ │ ├── img_skybox.jpg
│ │ │ │ ├── img_stone_ambient.jpg
│ │ │ │ ├── img_stone_diffuse.jpg
│ │ │ │ ├── img_stone_normal.jpg
│ │ │ │ ├── obj_ball.scn
│ │ │ │ ├── obj_crate1x1.scn
│ │ │ │ ├── obj_pillar1x3.scn
│ │ │ │ ├── obj_stone1x1.scn
│ │ │ │ └── obj_stone3x3.scn
│ │ │ ├── Assets.xcassets
│ │ │ │ └── AppIcon.appiconset
│ │ │ │ ├── AppIcon_120x120.png
│ │ │ │ ├── AppIcon_152x152.png
│ │ │ │ ├── AppIcon_167x167.png
│ │ │ │ ├── AppIcon_180x180.png
│ │ │ │ ├── AppIcon_76x76.png
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── GameViewController.swift
│ │ │ └── Info.plist
│ │ └── MarbleMaze.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ ├── final
│ │ └── MarbleMaze
│ │ ├── MarbleMaze
│ │ │ ├── AppDelegate.swift
│ │ │ ├── art.scnassets
│ │ │ │ ├── game.scn
│ │ │ │ ├── img_ball_diffuse.jpg
│ │ │ │ ├── img_ball_emission.jpg
│ │ │ │ ├── img_ball_normal.png
│ │ │ │ ├── img_crate_diffuse.jpg
│ │ │ │ ├── img_crate_normal.jpg
│ │ │ │ ├── img_pillar_diffuse.jpg
│ │ │ │ ├── img_pillar_normal.jpg
│ │ │ │ ├── img_pillar_specular.jpg
│ │ │ │ ├── img_skybox.jpg
│ │ │ │ ├── img_stone_ambient.jpg
│ │ │ │ ├── img_stone_diffuse.jpg
│ │ │ │ ├── img_stone_normal.jpg
│ │ │ │ └── obj_ball.scn
│ │ │ ├── Assets.xcassets
│ │ │ │ └── AppIcon.appiconset
│ │ │ │ ├── AppIcon_120x120.png
│ │ │ │ ├── AppIcon_152x152.png
│ │ │ │ ├── AppIcon_167x167.png
│ │ │ │ ├── AppIcon_180x180.png
│ │ │ │ ├── AppIcon_76x76.png
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── GameViewController.swift
│ │ │ └── Info.plist
│ │ └── MarbleMaze.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ └── starter
│ └── MarbleMaze
│ ├── MarbleMaze
│ │ ├── AppDelegate.swift
│ │ ├── art.scnassets
│ │ │ ├── game.scn
│ │ │ ├── img_ball_diffuse.jpg
│ │ │ ├── img_ball_emission.jpg
│ │ │ ├── img_ball_normal.png
│ │ │ ├── img_crate_diffuse.jpg
│ │ │ ├── img_crate_normal.jpg
│ │ │ ├── img_pillar_diffuse.jpg
│ │ │ ├── img_pillar_normal.jpg
│ │ │ ├── img_pillar_specular.jpg
│ │ │ ├── img_skybox.jpg
│ │ │ ├── img_stone_ambient.jpg
│ │ │ ├── img_stone_diffuse.jpg
│ │ │ └── img_stone_normal.jpg
│ │ ├── Assets.xcassets
│ │ │ └── AppIcon.appiconset
│ │ │ └── Contents.json
│ │ ├── Base.lproj
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── GameViewController.swift
│ │ └── Info.plist
│ └── MarbleMaze.xcodeproj
│ ├── project.pbxproj
│ └── project.xcworkspace
│ └── contents.xcworkspacedata
├── 13-shadows
│ ├── challenge
│ │ └── MarbleMaze
│ │ ├── MarbleMaze
│ │ │ ├── AppDelegate.swift
│ │ │ ├── art.scnassets
│ │ │ │ ├── game.scn
│ │ │ │ ├── img_ball_diffuse.jpg
│ │ │ │ ├── img_ball_emission.jpg
│ │ │ │ ├── img_ball_normal.png
│ │ │ │ ├── img_crate_diffuse.jpg
│ │ │ │ ├── img_crate_normal.jpg
│ │ │ │ ├── img_pillar_diffuse.jpg
│ │ │ │ ├── img_pillar_normal.jpg
│ │ │ │ ├── img_pillar_specular.jpg
│ │ │ │ ├── img_skybox.jpg
│ │ │ │ ├── img_stone_ambient.jpg
│ │ │ │ ├── img_stone_diffuse.jpg
│ │ │ │ ├── img_stone_normal.jpg
│ │ │ │ ├── obj_ball.scn
│ │ │ │ ├── obj_crate1x1.scn
│ │ │ │ ├── obj_pillar1x3.scn
│ │ │ │ ├── obj_stone1x1.scn
│ │ │ │ ├── obj_stone3x3.scn
│ │ │ │ ├── set_restpoint.scn
│ │ │ │ ├── set_straight_bridge.scn
│ │ │ │ └── set_zigzag_bridge.scn
│ │ │ ├── Assets.xcassets
│ │ │ │ └── AppIcon.appiconset
│ │ │ │ ├── AppIcon_120x120.png
│ │ │ │ ├── AppIcon_152x152.png
│ │ │ │ ├── AppIcon_167x167.png
│ │ │ │ ├── AppIcon_180x180.png
│ │ │ │ ├── AppIcon_76x76.png
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── GameViewController.swift
│ │ │ └── Info.plist
│ │ └── MarbleMaze.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ ├── final
│ │ └── MarbleMaze
│ │ ├── MarbleMaze
│ │ │ ├── AppDelegate.swift
│ │ │ ├── art.scnassets
│ │ │ │ ├── game.scn
│ │ │ │ ├── img_ball_diffuse.jpg
│ │ │ │ ├── img_ball_emission.jpg
│ │ │ │ ├── img_ball_normal.png
│ │ │ │ ├── img_crate_diffuse.jpg
│ │ │ │ ├── img_crate_normal.jpg
│ │ │ │ ├── img_pillar_diffuse.jpg
│ │ │ │ ├── img_pillar_normal.jpg
│ │ │ │ ├── img_pillar_specular.jpg
│ │ │ │ ├── img_skybox.jpg
│ │ │ │ ├── img_stone_ambient.jpg
│ │ │ │ ├── img_stone_diffuse.jpg
│ │ │ │ ├── img_stone_normal.jpg
│ │ │ │ ├── obj_ball.scn
│ │ │ │ ├── obj_crate1x1.scn
│ │ │ │ ├── obj_pillar1x3.scn
│ │ │ │ ├── obj_stone1x1.scn
│ │ │ │ ├── obj_stone3x3.scn
│ │ │ │ └── set_restpoint.scn
│ │ │ ├── Assets.xcassets
│ │ │ │ └── AppIcon.appiconset
│ │ │ │ ├── AppIcon_120x120.png
│ │ │ │ ├── AppIcon_152x152.png
│ │ │ │ ├── AppIcon_167x167.png
│ │ │ │ ├── AppIcon_180x180.png
│ │ │ │ ├── AppIcon_76x76.png
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── GameViewController.swift
│ │ │ └── Info.plist
│ │ └── MarbleMaze.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ └── starter
│ └── MarbleMaze
│ ├── MarbleMaze
│ │ ├── AppDelegate.swift
│ │ ├── art.scnassets
│ │ │ ├── game.scn
│ │ │ ├── img_ball_diffuse.jpg
│ │ │ ├── img_ball_emission.jpg
│ │ │ ├── img_ball_normal.png
│ │ │ ├── img_crate_diffuse.jpg
│ │ │ ├── img_crate_normal.jpg
│ │ │ ├── img_pillar_diffuse.jpg
│ │ │ ├── img_pillar_normal.jpg
│ │ │ ├── img_pillar_specular.jpg
│ │ │ ├── img_skybox.jpg
│ │ │ ├── img_stone_ambient.jpg
│ │ │ ├── img_stone_diffuse.jpg
│ │ │ ├── img_stone_normal.jpg
│ │ │ ├── obj_ball.scn
│ │ │ ├── obj_crate1x1.scn
│ │ │ ├── obj_pillar1x3.scn
│ │ │ ├── obj_stone1x1.scn
│ │ │ └── obj_stone3x3.scn
│ │ ├── Assets.xcassets
│ │ │ └── AppIcon.appiconset
│ │ │ ├── AppIcon_120x120.png
│ │ │ ├── AppIcon_152x152.png
│ │ │ ├── AppIcon_167x167.png
│ │ │ ├── AppIcon_180x180.png
│ │ │ ├── AppIcon_76x76.png
│ │ │ └── Contents.json
│ │ ├── Base.lproj
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── GameViewController.swift
│ │ └── Info.plist
│ └── MarbleMaze.xcodeproj
│ ├── project.pbxproj
│ └── project.xcworkspace
│ └── contents.xcworkspacedata
├── 14-intermediate-collision-detection
│ ├── challenge
│ │ └── MarbleMaze
│ │ ├── MarbleMaze
│ │ │ ├── AppDelegate.swift
│ │ │ ├── art.scnassets
│ │ │ │ ├── game.scn
│ │ │ │ ├── img_ball_diffuse.jpg
│ │ │ │ ├── img_ball_emission.jpg
│ │ │ │ ├── img_ball_normal.png
│ │ │ │ ├── img_crate_diffuse.jpg
│ │ │ │ ├── img_crate_normal.jpg
│ │ │ │ ├── img_pillar_diffuse.jpg
│ │ │ │ ├── img_pillar_normal.jpg
│ │ │ │ ├── img_pillar_specular.jpg
│ │ │ │ ├── img_skybox.jpg
│ │ │ │ ├── img_stone_ambient.jpg
│ │ │ │ ├── img_stone_diffuse.jpg
│ │ │ │ ├── img_stone_normal.jpg
│ │ │ │ ├── obj_ball.scn
│ │ │ │ ├── obj_crate1x1.scn
│ │ │ │ ├── obj_pearl.scn
│ │ │ │ ├── obj_pillar1x3.scn
│ │ │ │ ├── obj_stone1x1.scn
│ │ │ │ ├── obj_stone3x3.scn
│ │ │ │ ├── set_restpoint.scn
│ │ │ │ ├── set_straight_bridge.scn
│ │ │ │ └── set_zigzag_bridge.scn
│ │ │ ├── Assets.xcassets
│ │ │ │ └── AppIcon.appiconset
│ │ │ │ ├── AppIcon_120x120.png
│ │ │ │ ├── AppIcon_152x152.png
│ │ │ │ ├── AppIcon_167x167.png
│ │ │ │ ├── AppIcon_180x180.png
│ │ │ │ ├── AppIcon_76x76.png
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── GameUtils
│ │ │ │ ├── CoreMotionHelper.swift
│ │ │ │ ├── GameHelper.swift
│ │ │ │ ├── GameUtils.swift
│ │ │ │ ├── SCNAction+Extensions.swift
│ │ │ │ └── SCNVector3+Extensions.swift
│ │ │ ├── GameViewController.swift
│ │ │ └── Info.plist
│ │ └── MarbleMaze.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ ├── final
│ │ └── MarbleMaze
│ │ ├── MarbleMaze
│ │ │ ├── AppDelegate.swift
│ │ │ ├── art.scnassets
│ │ │ │ ├── game.scn
│ │ │ │ ├── img_ball_diffuse.jpg
│ │ │ │ ├── img_ball_emission.jpg
│ │ │ │ ├── img_ball_normal.png
│ │ │ │ ├── img_crate_diffuse.jpg
│ │ │ │ ├── img_crate_normal.jpg
│ │ │ │ ├── img_pillar_diffuse.jpg
│ │ │ │ ├── img_pillar_normal.jpg
│ │ │ │ ├── img_pillar_specular.jpg
│ │ │ │ ├── img_skybox.jpg
│ │ │ │ ├── img_stone_ambient.jpg
│ │ │ │ ├── img_stone_diffuse.jpg
│ │ │ │ ├── img_stone_normal.jpg
│ │ │ │ ├── obj_ball.scn
│ │ │ │ ├── obj_crate1x1.scn
│ │ │ │ ├── obj_pearl.scn
│ │ │ │ ├── obj_pillar1x3.scn
│ │ │ │ ├── obj_stone1x1.scn
│ │ │ │ ├── obj_stone3x3.scn
│ │ │ │ ├── set_restpoint.scn
│ │ │ │ ├── set_straight_bridge.scn
│ │ │ │ └── set_zigzag_bridge.scn
│ │ │ ├── Assets.xcassets
│ │ │ │ └── AppIcon.appiconset
│ │ │ │ ├── AppIcon_120x120.png
│ │ │ │ ├── AppIcon_152x152.png
│ │ │ │ ├── AppIcon_167x167.png
│ │ │ │ ├── AppIcon_180x180.png
│ │ │ │ ├── AppIcon_76x76.png
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── GameUtils
│ │ │ │ ├── CoreMotionHelper.swift
│ │ │ │ ├── GameHelper.swift
│ │ │ │ ├── GameUtils.swift
│ │ │ │ ├── SCNAction+Extensions.swift
│ │ │ │ └── SCNVector3+Extensions.swift
│ │ │ ├── GameViewController.swift
│ │ │ └── Info.plist
│ │ └── MarbleMaze.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ └── starter
│ └── MarbleMaze
│ ├── MarbleMaze
│ │ ├── AppDelegate.swift
│ │ ├── art.scnassets
│ │ │ ├── game.scn
│ │ │ ├── img_ball_diffuse.jpg
│ │ │ ├── img_ball_emission.jpg
│ │ │ ├── img_ball_normal.png
│ │ │ ├── img_crate_diffuse.jpg
│ │ │ ├── img_crate_normal.jpg
│ │ │ ├── img_pillar_diffuse.jpg
│ │ │ ├── img_pillar_normal.jpg
│ │ │ ├── img_pillar_specular.jpg
│ │ │ ├── img_skybox.jpg
│ │ │ ├── img_stone_ambient.jpg
│ │ │ ├── img_stone_diffuse.jpg
│ │ │ ├── img_stone_normal.jpg
│ │ │ ├── obj_ball.scn
│ │ │ ├── obj_crate1x1.scn
│ │ │ ├── obj_pillar1x3.scn
│ │ │ ├── obj_stone1x1.scn
│ │ │ ├── obj_stone3x3.scn
│ │ │ ├── set_restpoint.scn
│ │ │ ├── set_straight_bridge.scn
│ │ │ └── set_zigzag_bridge.scn
│ │ ├── Assets.xcassets
│ │ │ └── AppIcon.appiconset
│ │ │ ├── AppIcon_120x120.png
│ │ │ ├── AppIcon_152x152.png
│ │ │ ├── AppIcon_167x167.png
│ │ │ ├── AppIcon_180x180.png
│ │ │ ├── AppIcon_76x76.png
│ │ │ └── Contents.json
│ │ ├── Base.lproj
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── GameViewController.swift
│ │ └── Info.plist
│ └── MarbleMaze.xcodeproj
│ ├── project.pbxproj
│ └── project.xcworkspace
│ └── contents.xcworkspacedata
├── 15-motion-control
│ ├── final
│ │ └── MarbleMaze
│ │ ├── MarbleMaze
│ │ │ ├── AppDelegate.swift
│ │ │ ├── art.scnassets
│ │ │ │ ├── game.scn
│ │ │ │ ├── img_ball_diffuse.jpg
│ │ │ │ ├── img_ball_emission.jpg
│ │ │ │ ├── img_ball_normal.png
│ │ │ │ ├── img_crate_diffuse.jpg
│ │ │ │ ├── img_crate_normal.jpg
│ │ │ │ ├── img_pillar_diffuse.jpg
│ │ │ │ ├── img_pillar_normal.jpg
│ │ │ │ ├── img_pillar_specular.jpg
│ │ │ │ ├── img_skybox.jpg
│ │ │ │ ├── img_stone_ambient.jpg
│ │ │ │ ├── img_stone_diffuse.jpg
│ │ │ │ ├── img_stone_normal.jpg
│ │ │ │ ├── obj_ball.scn
│ │ │ │ ├── obj_crate1x1.scn
│ │ │ │ ├── obj_pearl.scn
│ │ │ │ ├── obj_pillar1x3.scn
│ │ │ │ ├── obj_stone1x1.scn
│ │ │ │ ├── obj_stone3x3.scn
│ │ │ │ ├── set_restpoint.scn
│ │ │ │ ├── set_straight_bridge.scn
│ │ │ │ └── set_zigzag_bridge.scn
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ ├── AppIcon_120x120.png
│ │ │ │ │ ├── AppIcon_152x152.png
│ │ │ │ │ ├── AppIcon_167x167.png
│ │ │ │ │ ├── AppIcon_180x180.png
│ │ │ │ │ ├── AppIcon_76x76.png
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Contents.json
│ │ │ │ └── MarbleMaze_Splash.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── MarbleMaze_Splash.png
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── GameUtils
│ │ │ │ ├── CoreMotionHelper.swift
│ │ │ │ ├── GameHelper.swift
│ │ │ │ ├── GameUtils.swift
│ │ │ │ ├── SCNAction+Extensions.swift
│ │ │ │ └── SCNVector3+Extensions.swift
│ │ │ ├── GameViewController.swift
│ │ │ ├── Info.plist
│ │ │ └── Sounds
│ │ │ ├── Bump.wav
│ │ │ ├── GameOver.wav
│ │ │ ├── Powerup.wav
│ │ │ └── Reset.wav
│ │ └── MarbleMaze.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ └── starter
│ └── MarbleMaze
│ ├── MarbleMaze
│ │ ├── AppDelegate.swift
│ │ ├── art.scnassets
│ │ │ ├── game.scn
│ │ │ ├── img_ball_diffuse.jpg
│ │ │ ├── img_ball_emission.jpg
│ │ │ ├── img_ball_normal.png
│ │ │ ├── img_crate_diffuse.jpg
│ │ │ ├── img_crate_normal.jpg
│ │ │ ├── img_pillar_diffuse.jpg
│ │ │ ├── img_pillar_normal.jpg
│ │ │ ├── img_pillar_specular.jpg
│ │ │ ├── img_skybox.jpg
│ │ │ ├── img_stone_ambient.jpg
│ │ │ ├── img_stone_diffuse.jpg
│ │ │ ├── img_stone_normal.jpg
│ │ │ ├── obj_ball.scn
│ │ │ ├── obj_crate1x1.scn
│ │ │ ├── obj_pearl.scn
│ │ │ ├── obj_pillar1x3.scn
│ │ │ ├── obj_stone1x1.scn
│ │ │ ├── obj_stone3x3.scn
│ │ │ ├── set_restpoint.scn
│ │ │ ├── set_straight_bridge.scn
│ │ │ └── set_zigzag_bridge.scn
│ │ ├── Assets.xcassets
│ │ │ └── AppIcon.appiconset
│ │ │ ├── AppIcon_120x120.png
│ │ │ ├── AppIcon_152x152.png
│ │ │ ├── AppIcon_167x167.png
│ │ │ ├── AppIcon_180x180.png
│ │ │ ├── AppIcon_76x76.png
│ │ │ └── Contents.json
│ │ ├── Base.lproj
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── GameUtils
│ │ │ ├── CoreMotionHelper.swift
│ │ │ ├── GameHelper.swift
│ │ │ ├── GameUtils.swift
│ │ │ ├── SCNAction+Extensions.swift
│ │ │ └── SCNVector3+Extensions.swift
│ │ ├── GameViewController.swift
│ │ └── Info.plist
│ └── MarbleMaze.xcodeproj
│ ├── project.pbxproj
│ └── project.xcworkspace
│ └── contents.xcworkspacedata
├── 16-macos-games
│ ├── final
│ │ └── GeometryFighter
│ │ ├── GeometryFighter
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ ├── AppIcon_60@2x.png
│ │ │ │ │ ├── AppIcon_60@3x.png
│ │ │ │ │ ├── AppIcon_76@2x.png
│ │ │ │ │ ├── AppIcon_76.png
│ │ │ │ │ ├── AppIcon_83_5@2x.png
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Contents.json
│ │ │ │ └── Logo_Diffuse.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── Logo_Diffuse.png
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Explode.scnp
│ │ │ ├── GameUtils
│ │ │ │ ├── Double+Extensions.swift
│ │ │ │ ├── Float+Extensions.swift
│ │ │ │ ├── GameHelper.swift
│ │ │ │ ├── Generics.swift
│ │ │ │ ├── Int+Extensions.swift
│ │ │ │ ├── NSColor+Extension.swift
│ │ │ │ ├── SCNAction+Extensions.swift
│ │ │ │ └── UIColor+Extensions.swift
│ │ │ ├── GameViewController.swift
│ │ │ ├── GeometryFighter.scnassets
│ │ │ │ ├── Sounds
│ │ │ │ │ ├── ExplodeBad.wav
│ │ │ │ │ ├── ExplodeGood.wav
│ │ │ │ │ ├── GameOver.wav
│ │ │ │ │ ├── SpawnBad.wav
│ │ │ │ │ └── SpawnGood.wav
│ │ │ │ └── Textures
│ │ │ │ ├── Background_Diffuse.png
│ │ │ │ ├── CircleParticle.png
│ │ │ │ ├── GameOver_Diffuse.png
│ │ │ │ ├── Logo_Diffuse.png
│ │ │ │ └── TapToPlay_Diffuse.png
│ │ │ ├── Info.plist
│ │ │ ├── ShapeType.swift
│ │ │ ├── spark.png
│ │ │ └── Trail.scnp
│ │ ├── GeometryFighterMac
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets
│ │ │ │ └── AppIcon.appiconset
│ │ │ │ ├── AppIcon_128@2x.png
│ │ │ │ ├── AppIcon_128.png
│ │ │ │ ├── AppIcon_16@2x.png
│ │ │ │ ├── AppIcon_16.png
│ │ │ │ ├── AppIcon_256@2x.png
│ │ │ │ ├── AppIcon_256.png
│ │ │ │ ├── AppIcon_32@2x.png
│ │ │ │ ├── AppIcon_32.png
│ │ │ │ ├── AppIcon_512@2x.png
│ │ │ │ ├── AppIcon_512.png
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj
│ │ │ │ └── MainMenu.xib
│ │ │ ├── GameViewController.swift
│ │ │ ├── GameView.swift
│ │ │ └── Info.plist
│ │ └── GeometryFighter.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ └── starter
│ └── GeometryFighter
│ ├── GeometryFighter
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ │ ├── AppIcon_60@2x.png
│ │ │ │ ├── AppIcon_60@3x.png
│ │ │ │ ├── AppIcon_76@2x.png
│ │ │ │ ├── AppIcon_76.png
│ │ │ │ ├── AppIcon_83_5@2x.png
│ │ │ │ └── Contents.json
│ │ │ ├── Contents.json
│ │ │ └── Logo_Diffuse.imageset
│ │ │ ├── Contents.json
│ │ │ └── Logo_Diffuse.png
│ │ ├── Base.lproj
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── Explode.scnp
│ │ ├── GameUtils
│ │ │ ├── Double+Extensions.swift
│ │ │ ├── Float+Extensions.swift
│ │ │ ├── GameHelper.swift
│ │ │ ├── Generics.swift
│ │ │ ├── Int+Extensions.swift
│ │ │ ├── SCNAction+Extensions.swift
│ │ │ └── UIColor+Extensions.swift
│ │ ├── GameViewController.swift
│ │ ├── GeometryFighter.scnassets
│ │ │ ├── Sounds
│ │ │ │ ├── ExplodeBad.wav
│ │ │ │ ├── ExplodeGood.wav
│ │ │ │ ├── GameOver.wav
│ │ │ │ ├── SpawnBad.wav
│ │ │ │ └── SpawnGood.wav
│ │ │ └── Textures
│ │ │ ├── Background_Diffuse.png
│ │ │ ├── CircleParticle.png
│ │ │ ├── GameOver_Diffuse.png
│ │ │ ├── Logo_Diffuse.png
│ │ │ └── TapToPlay_Diffuse.png
│ │ ├── Info.plist
│ │ ├── ShapeType.swift
│ │ ├── spark.png
│ │ └── Trail.scnp
│ └── GeometryFighter.xcodeproj
│ ├── project.pbxproj
│ └── project.xcworkspace
│ └── contents.xcworkspacedata
├── 17-tvos-games
│ ├── final
│ │ └── Breaker
│ │ ├── Breaker
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ ├── BreakerAppIcon_120x120.png
│ │ │ │ │ ├── BreakerAppIcon_152x152.png
│ │ │ │ │ ├── BreakerAppIcon_167x167.png
│ │ │ │ │ ├── BreakerAppIcon_180x180.png
│ │ │ │ │ ├── BreakerAppIcon_76x76.png
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Contents.json
│ │ │ │ └── Logo_Diffuse.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── Logo_Diffuse.png
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Breaker.scnassets
│ │ │ │ ├── Scenes
│ │ │ │ │ └── Game.scn
│ │ │ │ ├── Sounds
│ │ │ │ │ ├── Barrier.wav
│ │ │ │ │ ├── Block0.wav
│ │ │ │ │ ├── Block1.wav
│ │ │ │ │ ├── Block2.wav
│ │ │ │ │ ├── GameOver.wav
│ │ │ │ │ └── Paddle.wav
│ │ │ │ └── Textures
│ │ │ │ ├── GameOver_Diffuse.png
│ │ │ │ ├── Logo_Diffuse.png
│ │ │ │ ├── Particle.png
│ │ │ │ └── TapToPlay_Diffuse.png
│ │ │ ├── GameUtils
│ │ │ │ ├── GameHelper.swift
│ │ │ │ ├── GameUtils.swift
│ │ │ │ ├── SCNAction+Extensions.swift
│ │ │ │ └── SCNVector3+Extensions.swift
│ │ │ ├── GameViewController.swift
│ │ │ └── Info.plist
│ │ ├── BreakerTV
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── App Icon & Top Shelf Image.brandassets
│ │ │ │ │ ├── App Icon - Large.imagestack
│ │ │ │ │ │ ├── Back.imagestacklayer
│ │ │ │ │ │ │ ├── Content.imageset
│ │ │ │ │ │ │ │ ├── Back.png
│ │ │ │ │ │ │ │ └── Contents.json
│ │ │ │ │ │ │ └── Contents.json
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── Front.imagestacklayer
│ │ │ │ │ │ │ ├── Content.imageset
│ │ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ │ └── Front.png
│ │ │ │ │ │ │ └── Contents.json
│ │ │ │ │ │ └── Middle.imagestacklayer
│ │ │ │ │ │ ├── Content.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ └── Middle.png
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ ├── App Icon - Small.imagestack
│ │ │ │ │ │ ├── Back.imagestacklayer
│ │ │ │ │ │ │ ├── Content.imageset
│ │ │ │ │ │ │ │ ├── Back.png
│ │ │ │ │ │ │ │ └── Contents.json
│ │ │ │ │ │ │ └── Contents.json
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── Front.imagestacklayer
│ │ │ │ │ │ │ ├── Content.imageset
│ │ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ │ └── Front.png
│ │ │ │ │ │ │ └── Contents.json
│ │ │ │ │ │ └── Middle.imagestacklayer
│ │ │ │ │ │ ├── Content.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ └── Middle.png
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── Top Shelf Image.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── TopShelfImage.png
│ │ │ │ │ └── Top Shelf Image Wide.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ └── TopShelfImageWide.png
│ │ │ │ ├── Contents.json
│ │ │ │ └── LaunchImage.launchimage
│ │ │ │ ├── Contents.json
│ │ │ │ └── LaunchImage.png
│ │ │ ├── Base.lproj
│ │ │ │ └── Main.storyboard
│ │ │ └── Info.plist
│ │ └── Breaker.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ └── starter
│ └── Breaker
│ ├── Breaker
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ │ ├── BreakerAppIcon_120x120.png
│ │ │ │ ├── BreakerAppIcon_152x152.png
│ │ │ │ ├── BreakerAppIcon_167x167.png
│ │ │ │ ├── BreakerAppIcon_180x180.png
│ │ │ │ ├── BreakerAppIcon_76x76.png
│ │ │ │ └── Contents.json
│ │ │ ├── Contents.json
│ │ │ └── Logo_Diffuse.imageset
│ │ │ ├── Contents.json
│ │ │ └── Logo_Diffuse.png
│ │ ├── Base.lproj
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── Breaker.scnassets
│ │ │ ├── Scenes
│ │ │ │ └── Game.scn
│ │ │ ├── Sounds
│ │ │ │ ├── Barrier.wav
│ │ │ │ ├── Block0.wav
│ │ │ │ ├── Block1.wav
│ │ │ │ ├── Block2.wav
│ │ │ │ ├── GameOver.wav
│ │ │ │ └── Paddle.wav
│ │ │ └── Textures
│ │ │ ├── GameOver_Diffuse.png
│ │ │ ├── Logo_Diffuse.png
│ │ │ ├── Particle.png
│ │ │ └── TapToPlay_Diffuse.png
│ │ ├── GameUtils
│ │ │ ├── GameHelper.swift
│ │ │ ├── GameUtils.swift
│ │ │ ├── SCNAction+Extensions.swift
│ │ │ └── SCNVector3+Extensions.swift
│ │ ├── GameViewController.swift
│ │ └── Info.plist
│ └── Breaker.xcodeproj
│ ├── project.pbxproj
│ └── project.xcworkspace
│ └── contents.xcworkspacedata
├── 18-watchos-games
│ ├── final
│ │ └── GeometryFighter
│ │ ├── GeometryFighter
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ ├── AppIcon_60@2x.png
│ │ │ │ │ ├── AppIcon_60@3x.png
│ │ │ │ │ ├── AppIcon_76@2x.png
│ │ │ │ │ ├── AppIcon_76.png
│ │ │ │ │ ├── AppIcon_83_5@2x.png
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Contents.json
│ │ │ │ └── Logo_Diffuse.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── Logo_Diffuse.png
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Explode.scnp
│ │ │ ├── GameUtils
│ │ │ │ ├── Double+Extensions.swift
│ │ │ │ ├── Float+Extensions.swift
│ │ │ │ ├── GameHelper.swift
│ │ │ │ ├── Generics.swift
│ │ │ │ ├── Int+Extensions.swift
│ │ │ │ ├── SCNAction+Extensions.swift
│ │ │ │ └── UIColor+Extensions.swift
│ │ │ ├── GameViewController.swift
│ │ │ ├── GeometryFighter.scnassets
│ │ │ │ ├── Sounds
│ │ │ │ │ ├── ExplodeBad.wav
│ │ │ │ │ ├── ExplodeGood.wav
│ │ │ │ │ ├── GameOver.wav
│ │ │ │ │ ├── SpawnBad.wav
│ │ │ │ │ └── SpawnGood.wav
│ │ │ │ └── Textures
│ │ │ │ ├── Background_Diffuse.png
│ │ │ │ ├── CircleParticle.png
│ │ │ │ ├── GameOver_Diffuse.png
│ │ │ │ ├── Logo_Diffuse.png
│ │ │ │ └── TapToPlay_Diffuse.png
│ │ │ ├── Info.plist
│ │ │ ├── ShapeType.swift
│ │ │ ├── spark.png
│ │ │ └── Trail.scnp
│ │ ├── GeometryFighterWatch
│ │ │ ├── Assets.xcassets
│ │ │ │ └── AppIcon.appiconset
│ │ │ │ ├── AppIcon_24@2x.png
│ │ │ │ ├── AppIcon_27_5@2x.png
│ │ │ │ ├── AppIcon_29@2x.png
│ │ │ │ ├── AppIcon_29@3x.png
│ │ │ │ ├── AppIcon_40@2x-1.png
│ │ │ │ ├── AppIcon_40@2x.png
│ │ │ │ ├── AppIcon_40.png
│ │ │ │ ├── AppIcon_86@2x.png
│ │ │ │ ├── AppIcon_98@2x.png
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj
│ │ │ │ └── Interface.storyboard
│ │ │ └── Info.plist
│ │ ├── GeometryFighterWatch Extension
│ │ │ ├── Assets.xcassets
│ │ │ │ └── Complication.complicationset
│ │ │ │ ├── Circular.imageset
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Contents.json
│ │ │ │ ├── Modular.imageset
│ │ │ │ │ └── Contents.json
│ │ │ │ └── Utilitarian.imageset
│ │ │ │ └── Contents.json
│ │ │ ├── ExtensionDelegate.swift
│ │ │ ├── Info.plist
│ │ │ └── InterfaceController.swift
│ │ └── GeometryFighter.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ └── starter
│ └── GeometryFighter
│ ├── GeometryFighter
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ │ ├── AppIcon_60@2x.png
│ │ │ │ ├── AppIcon_60@3x.png
│ │ │ │ ├── AppIcon_76@2x.png
│ │ │ │ ├── AppIcon_76.png
│ │ │ │ ├── AppIcon_83_5@2x.png
│ │ │ │ └── Contents.json
│ │ │ ├── Contents.json
│ │ │ └── Logo_Diffuse.imageset
│ │ │ ├── Contents.json
│ │ │ └── Logo_Diffuse.png
│ │ ├── Base.lproj
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── Explode.scnp
│ │ ├── GameUtils
│ │ │ ├── Double+Extensions.swift
│ │ │ ├── Float+Extensions.swift
│ │ │ ├── GameHelper.swift
│ │ │ ├── Generics.swift
│ │ │ ├── Int+Extensions.swift
│ │ │ ├── SCNAction+Extensions.swift
│ │ │ └── UIColor+Extensions.swift
│ │ ├── GameViewController.swift
│ │ ├── GeometryFighter.scnassets
│ │ │ ├── Sounds
│ │ │ │ ├── ExplodeBad.wav
│ │ │ │ ├── ExplodeGood.wav
│ │ │ │ ├── GameOver.wav
│ │ │ │ ├── SpawnBad.wav
│ │ │ │ └── SpawnGood.wav
│ │ │ └── Textures
│ │ │ ├── Background_Diffuse.png
│ │ │ ├── CircleParticle.png
│ │ │ ├── GameOver_Diffuse.png
│ │ │ ├── Logo_Diffuse.png
│ │ │ └── TapToPlay_Diffuse.png
│ │ ├── Info.plist
│ │ ├── ShapeType.swift
│ │ ├── spark.png
│ │ └── Trail.scnp
│ └── GeometryFighter.xcodeproj
│ ├── project.pbxproj
│ └── project.xcworkspace
│ └── contents.xcworkspacedata
├── 19-transitions
│ ├── challenge
│ │ └── Mr.Pig
│ │ ├── Mr.Pig
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── MrPig_AppIcon_120x120.png
│ │ │ │ │ ├── MrPig_AppIcon_152x152.png
│ │ │ │ │ ├── MrPig_AppIcon_167x167.png
│ │ │ │ │ ├── MrPig_AppIcon_180x180.png
│ │ │ │ │ └── MrPig_AppIcon_76x76.png
│ │ │ │ ├── Contents.json
│ │ │ │ └── MrPig_Launch.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── MrPig_Launch.png
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── GameUtils
│ │ │ │ ├── GameHelper.swift
│ │ │ │ ├── GameUtils.swift
│ │ │ │ └── SCNAction+Extensions.swift
│ │ │ ├── Info.plist
│ │ │ ├── MrPig.scnassets
│ │ │ │ ├── Audio
│ │ │ │ │ ├── BankCoin.wav
│ │ │ │ │ ├── Blocked.wav
│ │ │ │ │ ├── CollectCoin.wav
│ │ │ │ │ ├── Crash.wav
│ │ │ │ │ ├── Jump.wav
│ │ │ │ │ ├── Music.mp3
│ │ │ │ │ └── Traffic.mp3
│ │ │ │ ├── Bus.scn
│ │ │ │ ├── Coin.scn
│ │ │ │ ├── GameScene.scn
│ │ │ │ ├── Gradient_Diffuse.png
│ │ │ │ ├── Grass_Diffuse.png
│ │ │ │ ├── House.scn
│ │ │ │ ├── LargeTree.scn
│ │ │ │ ├── MagicaVoxel_Diffuse.png
│ │ │ │ ├── MediumTree.scn
│ │ │ │ ├── Mini.scn
│ │ │ │ ├── MrPigLogo_Diffuse.png
│ │ │ │ ├── MrPig.scn
│ │ │ │ ├── Rays_Diffuse.png
│ │ │ │ ├── Road_Diffuse.png
│ │ │ │ ├── Road.scn
│ │ │ │ ├── SmallTree.scn
│ │ │ │ ├── Smoke.png
│ │ │ │ ├── SplashScene.scn
│ │ │ │ ├── SUV.scn
│ │ │ │ └── TapToPlay_Diffuse.png
│ │ │ └── ViewController.swift
│ │ └── Mr.Pig.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ ├── final
│ │ └── Mr.Pig
│ │ ├── Mr.Pig
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── MrPig_AppIcon_120x120.png
│ │ │ │ │ ├── MrPig_AppIcon_152x152.png
│ │ │ │ │ ├── MrPig_AppIcon_167x167.png
│ │ │ │ │ ├── MrPig_AppIcon_180x180.png
│ │ │ │ │ └── MrPig_AppIcon_76x76.png
│ │ │ │ ├── Contents.json
│ │ │ │ └── MrPig_Launch.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── MrPig_Launch.png
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── GameUtils
│ │ │ │ ├── GameHelper.swift
│ │ │ │ ├── GameUtils.swift
│ │ │ │ └── SCNAction+Extensions.swift
│ │ │ ├── Info.plist
│ │ │ ├── MrPig.scnassets
│ │ │ │ ├── Audio
│ │ │ │ │ ├── BankCoin.wav
│ │ │ │ │ ├── Blocked.wav
│ │ │ │ │ ├── CollectCoin.wav
│ │ │ │ │ ├── Crash.wav
│ │ │ │ │ ├── Jump.wav
│ │ │ │ │ ├── Music.mp3
│ │ │ │ │ └── Traffic.mp3
│ │ │ │ ├── Bus.scn
│ │ │ │ ├── Coin.scn
│ │ │ │ ├── GameScene.scn
│ │ │ │ ├── Gradient_Diffuse.png
│ │ │ │ ├── Grass_Diffuse.png
│ │ │ │ ├── House.scn
│ │ │ │ ├── LargeTree.scn
│ │ │ │ ├── MagicaVoxel_Diffuse.png
│ │ │ │ ├── MediumTree.scn
│ │ │ │ ├── Mini.scn
│ │ │ │ ├── MrPigLogo_Diffuse.png
│ │ │ │ ├── MrPig.scn
│ │ │ │ ├── Rays_Diffuse.png
│ │ │ │ ├── Road_Diffuse.png
│ │ │ │ ├── Road.scn
│ │ │ │ ├── SmallTree.scn
│ │ │ │ ├── Smoke.png
│ │ │ │ ├── SplashScene.scn
│ │ │ │ ├── SUV.scn
│ │ │ │ └── TapToPlay_Diffuse.png
│ │ │ └── ViewController.swift
│ │ └── Mr.Pig.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ └── starter
│ └── Mr.Pig
│ ├── Mr.Pig
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ │ ├── Contents.json
│ │ │ │ ├── MrPig_AppIcon_120x120.png
│ │ │ │ ├── MrPig_AppIcon_152x152.png
│ │ │ │ ├── MrPig_AppIcon_167x167.png
│ │ │ │ ├── MrPig_AppIcon_180x180.png
│ │ │ │ └── MrPig_AppIcon_76x76.png
│ │ │ ├── Contents.json
│ │ │ └── MrPig_Launch.imageset
│ │ │ ├── Contents.json
│ │ │ └── MrPig_Launch.png
│ │ ├── Base.lproj
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── GameUtils
│ │ │ ├── GameHelper.swift
│ │ │ ├── GameUtils.swift
│ │ │ └── SCNAction+Extensions.swift
│ │ ├── Info.plist
│ │ ├── MrPig.scnassets
│ │ │ ├── Audio
│ │ │ │ ├── BankCoin.wav
│ │ │ │ ├── Blocked.wav
│ │ │ │ ├── CollectCoin.wav
│ │ │ │ ├── Crash.wav
│ │ │ │ ├── Jump.wav
│ │ │ │ ├── Music.mp3
│ │ │ │ └── Traffic.mp3
│ │ │ ├── Bus.scn
│ │ │ ├── Coin.scn
│ │ │ ├── Gradient_Diffuse.png
│ │ │ ├── Grass_Diffuse.png
│ │ │ ├── House.scn
│ │ │ ├── LargeTree.scn
│ │ │ ├── MagicaVoxel_Diffuse.png
│ │ │ ├── MediumTree.scn
│ │ │ ├── Mini.scn
│ │ │ ├── MrPigLogo_Diffuse.png
│ │ │ ├── MrPig.scn
│ │ │ ├── Rays_Diffuse.png
│ │ │ ├── Road_Diffuse.png
│ │ │ ├── Road.scn
│ │ │ ├── SmallTree.scn
│ │ │ ├── Smoke.png
│ │ │ ├── SUV.scn
│ │ │ └── TapToPlay_Diffuse.png
│ │ └── ViewController.swift
│ └── Mr.Pig.xcodeproj
│ ├── project.pbxproj
│ └── project.xcworkspace
│ └── contents.xcworkspacedata
├── 20-advanced-scene-creation
│ ├── challenge
│ │ └── Mr.Pig
│ │ ├── Mr.Pig
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── MrPig_AppIcon_120x120.png
│ │ │ │ │ ├── MrPig_AppIcon_152x152.png
│ │ │ │ │ ├── MrPig_AppIcon_167x167.png
│ │ │ │ │ ├── MrPig_AppIcon_180x180.png
│ │ │ │ │ └── MrPig_AppIcon_76x76.png
│ │ │ │ ├── Contents.json
│ │ │ │ └── MrPig_Launch.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── MrPig_Launch.png
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── GameUtils
│ │ │ │ ├── GameHelper.swift
│ │ │ │ ├── GameUtils.swift
│ │ │ │ └── SCNAction+Extensions.swift
│ │ │ ├── Info.plist
│ │ │ ├── MrPig.scnassets
│ │ │ │ ├── Audio
│ │ │ │ │ ├── BankCoin.wav
│ │ │ │ │ ├── Blocked.wav
│ │ │ │ │ ├── CollectCoin.wav
│ │ │ │ │ ├── Crash.wav
│ │ │ │ │ ├── Jump.wav
│ │ │ │ │ ├── Music.mp3
│ │ │ │ │ └── Traffic.mp3
│ │ │ │ ├── Bus.scn
│ │ │ │ ├── Coin.scn
│ │ │ │ ├── GameScene.scn
│ │ │ │ ├── Gradient_Diffuse.png
│ │ │ │ ├── Grass_Diffuse.png
│ │ │ │ ├── House.scn
│ │ │ │ ├── LargeTree.scn
│ │ │ │ ├── MagicaVoxel_Diffuse.png
│ │ │ │ ├── MediumTree.scn
│ │ │ │ ├── Mini.scn
│ │ │ │ ├── MrPigLogo_Diffuse.png
│ │ │ │ ├── MrPig.scn
│ │ │ │ ├── Rays_Diffuse.png
│ │ │ │ ├── Road_Diffuse.png
│ │ │ │ ├── Road.scn
│ │ │ │ ├── SmallTree.scn
│ │ │ │ ├── Smoke.png
│ │ │ │ ├── SplashScene.scn
│ │ │ │ ├── SUV.scn
│ │ │ │ └── TapToPlay_Diffuse.png
│ │ │ └── ViewController.swift
│ │ └── Mr.Pig.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ ├── final
│ │ └── Mr.Pig
│ │ ├── Mr.Pig
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── MrPig_AppIcon_120x120.png
│ │ │ │ │ ├── MrPig_AppIcon_152x152.png
│ │ │ │ │ ├── MrPig_AppIcon_167x167.png
│ │ │ │ │ ├── MrPig_AppIcon_180x180.png
│ │ │ │ │ └── MrPig_AppIcon_76x76.png
│ │ │ │ ├── Contents.json
│ │ │ │ └── MrPig_Launch.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── MrPig_Launch.png
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── GameUtils
│ │ │ │ ├── GameHelper.swift
│ │ │ │ ├── GameUtils.swift
│ │ │ │ └── SCNAction+Extensions.swift
│ │ │ ├── Info.plist
│ │ │ ├── MrPig.scnassets
│ │ │ │ ├── Audio
│ │ │ │ │ ├── BankCoin.wav
│ │ │ │ │ ├── Blocked.wav
│ │ │ │ │ ├── CollectCoin.wav
│ │ │ │ │ ├── Crash.wav
│ │ │ │ │ ├── Jump.wav
│ │ │ │ │ ├── Music.mp3
│ │ │ │ │ └── Traffic.mp3
│ │ │ │ ├── Bus.scn
│ │ │ │ ├── Coin.scn
│ │ │ │ ├── GameScene.scn
│ │ │ │ ├── Gradient_Diffuse.png
│ │ │ │ ├── Grass_Diffuse.png
│ │ │ │ ├── House.scn
│ │ │ │ ├── LargeTree.scn
│ │ │ │ ├── MagicaVoxel_Diffuse.png
│ │ │ │ ├── MediumTree.scn
│ │ │ │ ├── Mini.scn
│ │ │ │ ├── MrPigLogo_Diffuse.png
│ │ │ │ ├── MrPig.scn
│ │ │ │ ├── Rays_Diffuse.png
│ │ │ │ ├── Road_Diffuse.png
│ │ │ │ ├── Road.scn
│ │ │ │ ├── SmallTree.scn
│ │ │ │ ├── Smoke.png
│ │ │ │ ├── SplashScene.scn
│ │ │ │ ├── SUV.scn
│ │ │ │ ├── TapToPlay_Diffuse.png
│ │ │ │ ├── TreeLine.scn
│ │ │ │ └── TreePatch.scn
│ │ │ └── ViewController.swift
│ │ └── Mr.Pig.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ └── starter
│ └── Mr.Pig
│ ├── Mr.Pig
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ │ ├── Contents.json
│ │ │ │ ├── MrPig_AppIcon_120x120.png
│ │ │ │ ├── MrPig_AppIcon_152x152.png
│ │ │ │ ├── MrPig_AppIcon_167x167.png
│ │ │ │ ├── MrPig_AppIcon_180x180.png
│ │ │ │ └── MrPig_AppIcon_76x76.png
│ │ │ ├── Contents.json
│ │ │ └── MrPig_Launch.imageset
│ │ │ ├── Contents.json
│ │ │ └── MrPig_Launch.png
│ │ ├── Base.lproj
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── GameUtils
│ │ │ ├── GameHelper.swift
│ │ │ ├── GameUtils.swift
│ │ │ └── SCNAction+Extensions.swift
│ │ ├── Info.plist
│ │ ├── MrPig.scnassets
│ │ │ ├── Audio
│ │ │ │ ├── BankCoin.wav
│ │ │ │ ├── Blocked.wav
│ │ │ │ ├── CollectCoin.wav
│ │ │ │ ├── Crash.wav
│ │ │ │ ├── Jump.wav
│ │ │ │ ├── Music.mp3
│ │ │ │ └── Traffic.mp3
│ │ │ ├── Bus.scn
│ │ │ ├── Coin.scn
│ │ │ ├── GameScene.scn
│ │ │ ├── Gradient_Diffuse.png
│ │ │ ├── Grass_Diffuse.png
│ │ │ ├── House.scn
│ │ │ ├── LargeTree.scn
│ │ │ ├── MagicaVoxel_Diffuse.png
│ │ │ ├── MediumTree.scn
│ │ │ ├── Mini.scn
│ │ │ ├── MrPigLogo_Diffuse.png
│ │ │ ├── MrPig.scn
│ │ │ ├── Rays_Diffuse.png
│ │ │ ├── Road_Diffuse.png
│ │ │ ├── Road.scn
│ │ │ ├── SmallTree.scn
│ │ │ ├── Smoke.png
│ │ │ ├── SplashScene.scn
│ │ │ ├── SUV.scn
│ │ │ └── TapToPlay_Diffuse.png
│ │ └── ViewController.swift
│ └── Mr.Pig.xcodeproj
│ ├── project.pbxproj
│ └── project.xcworkspace
│ └── contents.xcworkspacedata
├── 21-actions
│ ├── challenge
│ │ └── Mr.Pig
│ │ ├── Mr.Pig
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── MrPig_AppIcon_120x120.png
│ │ │ │ │ ├── MrPig_AppIcon_152x152.png
│ │ │ │ │ ├── MrPig_AppIcon_167x167.png
│ │ │ │ │ ├── MrPig_AppIcon_180x180.png
│ │ │ │ │ └── MrPig_AppIcon_76x76.png
│ │ │ │ ├── Contents.json
│ │ │ │ └── MrPig_Launch.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── MrPig_Launch.png
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── GameUtils
│ │ │ │ ├── GameHelper.swift
│ │ │ │ ├── GameUtils.swift
│ │ │ │ └── SCNAction+Extensions.swift
│ │ │ ├── Info.plist
│ │ │ ├── MrPig.scnassets
│ │ │ │ ├── Audio
│ │ │ │ │ ├── BankCoin.wav
│ │ │ │ │ ├── Blocked.wav
│ │ │ │ │ ├── CollectCoin.wav
│ │ │ │ │ ├── Crash.wav
│ │ │ │ │ ├── Jump.wav
│ │ │ │ │ ├── Music.mp3
│ │ │ │ │ └── Traffic.mp3
│ │ │ │ ├── Bus.scn
│ │ │ │ ├── Coin.scn
│ │ │ │ ├── GameScene.scn
│ │ │ │ ├── Gradient_Diffuse.png
│ │ │ │ ├── Grass_Diffuse.png
│ │ │ │ ├── House.scn
│ │ │ │ ├── LargeTree.scn
│ │ │ │ ├── MagicaVoxel_Diffuse.png
│ │ │ │ ├── MediumTree.scn
│ │ │ │ ├── Mini.scn
│ │ │ │ ├── MrPigLogo_Diffuse.png
│ │ │ │ ├── MrPig.scn
│ │ │ │ ├── Rays_Diffuse.png
│ │ │ │ ├── Road_Diffuse.png
│ │ │ │ ├── Road.scn
│ │ │ │ ├── SmallTree.scn
│ │ │ │ ├── Smoke.png
│ │ │ │ ├── SplashScene.scn
│ │ │ │ ├── SUV.scn
│ │ │ │ ├── TapToPlay_Diffuse.png
│ │ │ │ ├── TreeLine.scn
│ │ │ │ └── TreePatch.scn
│ │ │ └── ViewController.swift
│ │ └── Mr.Pig.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ ├── final
│ │ └── Mr.Pig
│ │ ├── Mr.Pig
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── MrPig_AppIcon_120x120.png
│ │ │ │ │ ├── MrPig_AppIcon_152x152.png
│ │ │ │ │ ├── MrPig_AppIcon_167x167.png
│ │ │ │ │ ├── MrPig_AppIcon_180x180.png
│ │ │ │ │ └── MrPig_AppIcon_76x76.png
│ │ │ │ ├── Contents.json
│ │ │ │ └── MrPig_Launch.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── MrPig_Launch.png
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── GameUtils
│ │ │ │ ├── GameHelper.swift
│ │ │ │ ├── GameUtils.swift
│ │ │ │ └── SCNAction+Extensions.swift
│ │ │ ├── Info.plist
│ │ │ ├── MrPig.scnassets
│ │ │ │ ├── Audio
│ │ │ │ │ ├── BankCoin.wav
│ │ │ │ │ ├── Blocked.wav
│ │ │ │ │ ├── CollectCoin.wav
│ │ │ │ │ ├── Crash.wav
│ │ │ │ │ ├── Jump.wav
│ │ │ │ │ ├── Music.mp3
│ │ │ │ │ └── Traffic.mp3
│ │ │ │ ├── Bus.scn
│ │ │ │ ├── Coin.scn
│ │ │ │ ├── GameScene.scn
│ │ │ │ ├── Gradient_Diffuse.png
│ │ │ │ ├── Grass_Diffuse.png
│ │ │ │ ├── House.scn
│ │ │ │ ├── LargeTree.scn
│ │ │ │ ├── MagicaVoxel_Diffuse.png
│ │ │ │ ├── MediumTree.scn
│ │ │ │ ├── Mini.scn
│ │ │ │ ├── MrPigLogo_Diffuse.png
│ │ │ │ ├── MrPig.scn
│ │ │ │ ├── Rays_Diffuse.png
│ │ │ │ ├── Road_Diffuse.png
│ │ │ │ ├── Road.scn
│ │ │ │ ├── SmallTree.scn
│ │ │ │ ├── Smoke.png
│ │ │ │ ├── SplashScene.scn
│ │ │ │ ├── SUV.scn
│ │ │ │ ├── TapToPlay_Diffuse.png
│ │ │ │ ├── TreeLine.scn
│ │ │ │ └── TreePatch.scn
│ │ │ └── ViewController.swift
│ │ └── Mr.Pig.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ └── starter
│ └── Mr.Pig
│ ├── Mr.Pig
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ │ ├── Contents.json
│ │ │ │ ├── MrPig_AppIcon_120x120.png
│ │ │ │ ├── MrPig_AppIcon_152x152.png
│ │ │ │ ├── MrPig_AppIcon_167x167.png
│ │ │ │ ├── MrPig_AppIcon_180x180.png
│ │ │ │ └── MrPig_AppIcon_76x76.png
│ │ │ ├── Contents.json
│ │ │ └── MrPig_Launch.imageset
│ │ │ ├── Contents.json
│ │ │ └── MrPig_Launch.png
│ │ ├── Base.lproj
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── GameUtils
│ │ │ ├── GameHelper.swift
│ │ │ ├── GameUtils.swift
│ │ │ └── SCNAction+Extensions.swift
│ │ ├── Info.plist
│ │ ├── MrPig.scnassets
│ │ │ ├── Audio
│ │ │ │ ├── BankCoin.wav
│ │ │ │ ├── Blocked.wav
│ │ │ │ ├── CollectCoin.wav
│ │ │ │ ├── Crash.wav
│ │ │ │ ├── Jump.wav
│ │ │ │ ├── Music.mp3
│ │ │ │ └── Traffic.mp3
│ │ │ ├── Bus.scn
│ │ │ ├── Coin.scn
│ │ │ ├── GameScene.scn
│ │ │ ├── Gradient_Diffuse.png
│ │ │ ├── Grass_Diffuse.png
│ │ │ ├── House.scn
│ │ │ ├── LargeTree.scn
│ │ │ ├── MagicaVoxel_Diffuse.png
│ │ │ ├── MediumTree.scn
│ │ │ ├── Mini.scn
│ │ │ ├── MrPigLogo_Diffuse.png
│ │ │ ├── MrPig.scn
│ │ │ ├── Rays_Diffuse.png
│ │ │ ├── Road_Diffuse.png
│ │ │ ├── Road.scn
│ │ │ ├── SmallTree.scn
│ │ │ ├── Smoke.png
│ │ │ ├── SplashScene.scn
│ │ │ ├── SUV.scn
│ │ │ ├── TapToPlay_Diffuse.png
│ │ │ ├── TreeLine.scn
│ │ │ └── TreePatch.scn
│ │ └── ViewController.swift
│ └── Mr.Pig.xcodeproj
│ ├── project.pbxproj
│ └── project.xcworkspace
│ └── contents.xcworkspacedata
├── 22-advanced-collision-detection
│ ├── final
│ │ └── Mr.Pig
│ │ ├── Mr.Pig
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── MrPig_AppIcon_120x120.png
│ │ │ │ │ ├── MrPig_AppIcon_152x152.png
│ │ │ │ │ ├── MrPig_AppIcon_167x167.png
│ │ │ │ │ ├── MrPig_AppIcon_180x180.png
│ │ │ │ │ └── MrPig_AppIcon_76x76.png
│ │ │ │ ├── Contents.json
│ │ │ │ └── MrPig_Launch.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── MrPig_Launch.png
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── GameUtils
│ │ │ │ ├── GameHelper.swift
│ │ │ │ ├── GameUtils.swift
│ │ │ │ └── SCNAction+Extensions.swift
│ │ │ ├── Info.plist
│ │ │ ├── MrPig.scnassets
│ │ │ │ ├── Audio
│ │ │ │ │ ├── BankCoin.wav
│ │ │ │ │ ├── Blocked.wav
│ │ │ │ │ ├── CollectCoin.wav
│ │ │ │ │ ├── Crash.wav
│ │ │ │ │ ├── Jump.wav
│ │ │ │ │ ├── Music.mp3
│ │ │ │ │ └── Traffic.mp3
│ │ │ │ ├── Bus.scn
│ │ │ │ ├── Coin.scn
│ │ │ │ ├── Collision.scn
│ │ │ │ ├── GameScene.scn
│ │ │ │ ├── Gradient_Diffuse.png
│ │ │ │ ├── Grass_Diffuse.png
│ │ │ │ ├── Home.scn
│ │ │ │ ├── House.scn
│ │ │ │ ├── LargeTree.scn
│ │ │ │ ├── MagicaVoxel_Diffuse.png
│ │ │ │ ├── MediumTree.scn
│ │ │ │ ├── Mini.scn
│ │ │ │ ├── MrPigLogo_Diffuse.png
│ │ │ │ ├── MrPig.scn
│ │ │ │ ├── Rays_Diffuse.png
│ │ │ │ ├── Road_Diffuse.png
│ │ │ │ ├── Road.scn
│ │ │ │ ├── SmallTree.scn
│ │ │ │ ├── Smoke.png
│ │ │ │ ├── SplashScene.scn
│ │ │ │ ├── SUV.scn
│ │ │ │ ├── TapToPlay_Diffuse.png
│ │ │ │ ├── TreeLine.scn
│ │ │ │ └── TreePatch.scn
│ │ │ └── ViewController.swift
│ │ └── Mr.Pig.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ └── starter
│ └── Mr.Pig
│ ├── Mr.Pig
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ │ ├── Contents.json
│ │ │ │ ├── MrPig_AppIcon_120x120.png
│ │ │ │ ├── MrPig_AppIcon_152x152.png
│ │ │ │ ├── MrPig_AppIcon_167x167.png
│ │ │ │ ├── MrPig_AppIcon_180x180.png
│ │ │ │ └── MrPig_AppIcon_76x76.png
│ │ │ ├── Contents.json
│ │ │ └── MrPig_Launch.imageset
│ │ │ ├── Contents.json
│ │ │ └── MrPig_Launch.png
│ │ ├── Base.lproj
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── GameUtils
│ │ │ ├── GameHelper.swift
│ │ │ ├── GameUtils.swift
│ │ │ └── SCNAction+Extensions.swift
│ │ ├── Info.plist
│ │ ├── MrPig.scnassets
│ │ │ ├── Audio
│ │ │ │ ├── BankCoin.wav
│ │ │ │ ├── Blocked.wav
│ │ │ │ ├── CollectCoin.wav
│ │ │ │ ├── Crash.wav
│ │ │ │ ├── Jump.wav
│ │ │ │ ├── Music.mp3
│ │ │ │ └── Traffic.mp3
│ │ │ ├── Bus.scn
│ │ │ ├── Coin.scn
│ │ │ ├── GameScene.scn
│ │ │ ├── Gradient_Diffuse.png
│ │ │ ├── Grass_Diffuse.png
│ │ │ ├── House.scn
│ │ │ ├── LargeTree.scn
│ │ │ ├── MagicaVoxel_Diffuse.png
│ │ │ ├── MediumTree.scn
│ │ │ ├── Mini.scn
│ │ │ ├── MrPigLogo_Diffuse.png
│ │ │ ├── MrPig.scn
│ │ │ ├── Rays_Diffuse.png
│ │ │ ├── Road_Diffuse.png
│ │ │ ├── Road.scn
│ │ │ ├── SmallTree.scn
│ │ │ ├── Smoke.png
│ │ │ ├── SplashScene.scn
│ │ │ ├── SUV.scn
│ │ │ ├── TapToPlay_Diffuse.png
│ │ │ ├── TreeLine.scn
│ │ │ └── TreePatch.scn
│ │ └── ViewController.swift
│ └── Mr.Pig.xcodeproj
│ ├── project.pbxproj
│ └── project.xcworkspace
│ └── contents.xcworkspacedata
├── 23-audio
│ ├── challenge
│ │ └── Mr.Pig
│ │ ├── Mr.Pig
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── MrPig_AppIcon_120x120.png
│ │ │ │ │ ├── MrPig_AppIcon_152x152.png
│ │ │ │ │ ├── MrPig_AppIcon_167x167.png
│ │ │ │ │ ├── MrPig_AppIcon_180x180.png
│ │ │ │ │ └── MrPig_AppIcon_76x76.png
│ │ │ │ ├── Contents.json
│ │ │ │ └── MrPig_Launch.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── MrPig_Launch.png
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── GameUtils
│ │ │ │ ├── GameHelper.swift
│ │ │ │ ├── GameUtils.swift
│ │ │ │ └── SCNAction+Extensions.swift
│ │ │ ├── Info.plist
│ │ │ ├── MrPig.scnassets
│ │ │ │ ├── Audio
│ │ │ │ │ ├── BankCoin.wav
│ │ │ │ │ ├── Blocked.wav
│ │ │ │ │ ├── CollectCoin.wav
│ │ │ │ │ ├── Crash.wav
│ │ │ │ │ ├── Jump.wav
│ │ │ │ │ ├── Music.mp3
│ │ │ │ │ └── Traffic.mp3
│ │ │ │ ├── Bus.scn
│ │ │ │ ├── Coin.scn
│ │ │ │ ├── Collision.scn
│ │ │ │ ├── GameScene.scn
│ │ │ │ ├── Gradient_Diffuse.png
│ │ │ │ ├── Grass_Diffuse.png
│ │ │ │ ├── Home.scn
│ │ │ │ ├── House.scn
│ │ │ │ ├── LargeTree.scn
│ │ │ │ ├── MagicaVoxel_Diffuse.png
│ │ │ │ ├── MediumTree.scn
│ │ │ │ ├── Mini.scn
│ │ │ │ ├── MrPigLogo_Diffuse.png
│ │ │ │ ├── MrPig.scn
│ │ │ │ ├── Rays_Diffuse.png
│ │ │ │ ├── Road_Diffuse.png
│ │ │ │ ├── Road.scn
│ │ │ │ ├── SmallTree.scn
│ │ │ │ ├── Smoke.png
│ │ │ │ ├── SplashScene.scn
│ │ │ │ ├── SUV.scn
│ │ │ │ ├── TapToPlay_Diffuse.png
│ │ │ │ ├── TreeLine.scn
│ │ │ │ └── TreePatch.scn
│ │ │ └── ViewController.swift
│ │ └── Mr.Pig.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ ├── final
│ │ └── Mr.Pig
│ │ ├── Mr.Pig
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── MrPig_AppIcon_120x120.png
│ │ │ │ │ ├── MrPig_AppIcon_152x152.png
│ │ │ │ │ ├── MrPig_AppIcon_167x167.png
│ │ │ │ │ ├── MrPig_AppIcon_180x180.png
│ │ │ │ │ └── MrPig_AppIcon_76x76.png
│ │ │ │ ├── Contents.json
│ │ │ │ └── MrPig_Launch.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── MrPig_Launch.png
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── GameUtils
│ │ │ │ ├── GameHelper.swift
│ │ │ │ ├── GameUtils.swift
│ │ │ │ └── SCNAction+Extensions.swift
│ │ │ ├── Info.plist
│ │ │ ├── MrPig.scnassets
│ │ │ │ ├── Audio
│ │ │ │ │ ├── BankCoin.wav
│ │ │ │ │ ├── Blocked.wav
│ │ │ │ │ ├── CollectCoin.wav
│ │ │ │ │ ├── Crash.wav
│ │ │ │ │ ├── Jump.wav
│ │ │ │ │ ├── Music.mp3
│ │ │ │ │ └── Traffic.mp3
│ │ │ │ ├── Bus.scn
│ │ │ │ ├── Coin.scn
│ │ │ │ ├── Collision.scn
│ │ │ │ ├── GameScene.scn
│ │ │ │ ├── Gradient_Diffuse.png
│ │ │ │ ├── Grass_Diffuse.png
│ │ │ │ ├── Home.scn
│ │ │ │ ├── House.scn
│ │ │ │ ├── LargeTree.scn
│ │ │ │ ├── MagicaVoxel_Diffuse.png
│ │ │ │ ├── MediumTree.scn
│ │ │ │ ├── Mini.scn
│ │ │ │ ├── MrPigLogo_Diffuse.png
│ │ │ │ ├── MrPig.scn
│ │ │ │ ├── Rays_Diffuse.png
│ │ │ │ ├── Road_Diffuse.png
│ │ │ │ ├── Road.scn
│ │ │ │ ├── SmallTree.scn
│ │ │ │ ├── Smoke.png
│ │ │ │ ├── SplashScene.scn
│ │ │ │ ├── SUV.scn
│ │ │ │ ├── TapToPlay_Diffuse.png
│ │ │ │ ├── TreeLine.scn
│ │ │ │ └── TreePatch.scn
│ │ │ └── ViewController.swift
│ │ └── Mr.Pig.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ └── starter
│ └── Mr.Pig
│ ├── Mr.Pig
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ │ ├── Contents.json
│ │ │ │ ├── MrPig_AppIcon_120x120.png
│ │ │ │ ├── MrPig_AppIcon_152x152.png
│ │ │ │ ├── MrPig_AppIcon_167x167.png
│ │ │ │ ├── MrPig_AppIcon_180x180.png
│ │ │ │ └── MrPig_AppIcon_76x76.png
│ │ │ ├── Contents.json
│ │ │ └── MrPig_Launch.imageset
│ │ │ ├── Contents.json
│ │ │ └── MrPig_Launch.png
│ │ ├── Base.lproj
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── GameUtils
│ │ │ ├── GameHelper.swift
│ │ │ ├── GameUtils.swift
│ │ │ └── SCNAction+Extensions.swift
│ │ ├── Info.plist
│ │ ├── MrPig.scnassets
│ │ │ ├── Audio
│ │ │ │ ├── BankCoin.wav
│ │ │ │ ├── Blocked.wav
│ │ │ │ ├── CollectCoin.wav
│ │ │ │ ├── Crash.wav
│ │ │ │ ├── Jump.wav
│ │ │ │ ├── Music.mp3
│ │ │ │ └── Traffic.mp3
│ │ │ ├── Bus.scn
│ │ │ ├── Coin.scn
│ │ │ ├── Collision.scn
│ │ │ ├── GameScene.scn
│ │ │ ├── Gradient_Diffuse.png
│ │ │ ├── Grass_Diffuse.png
│ │ │ ├── Home.scn
│ │ │ ├── House.scn
│ │ │ ├── LargeTree.scn
│ │ │ ├── MagicaVoxel_Diffuse.png
│ │ │ ├── MediumTree.scn
│ │ │ ├── Mini.scn
│ │ │ ├── MrPigLogo_Diffuse.png
│ │ │ ├── MrPig.scn
│ │ │ ├── Rays_Diffuse.png
│ │ │ ├── Road_Diffuse.png
│ │ │ ├── Road.scn
│ │ │ ├── SmallTree.scn
│ │ │ ├── Smoke.png
│ │ │ ├── SplashScene.scn
│ │ │ ├── SUV.scn
│ │ │ ├── TapToPlay_Diffuse.png
│ │ │ ├── TreeLine.scn
│ │ │ └── TreePatch.scn
│ │ └── ViewController.swift
│ └── Mr.Pig.xcodeproj
│ ├── project.pbxproj
│ └── project.xcworkspace
│ └── contents.xcworkspacedata
└── 24-3d-art-for-programmers
├── challenge
│ └── Mr.Pig
│ ├── Mr.Pig
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ │ ├── Contents.json
│ │ │ │ ├── MrPig_AppIcon_120x120.png
│ │ │ │ ├── MrPig_AppIcon_152x152.png
│ │ │ │ ├── MrPig_AppIcon_167x167.png
│ │ │ │ ├── MrPig_AppIcon_180x180.png
│ │ │ │ └── MrPig_AppIcon_76x76.png
│ │ │ ├── Contents.json
│ │ │ └── MrPig_Launch.imageset
│ │ │ ├── Contents.json
│ │ │ └── MrPig_Launch.png
│ │ ├── Base.lproj
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── GameUtils
│ │ │ ├── GameHelper.swift
│ │ │ ├── GameUtils.swift
│ │ │ └── SCNAction+Extensions.swift
│ │ ├── Info.plist
│ │ ├── MrPig.scnassets
│ │ │ ├── Audio
│ │ │ │ ├── BankCoin.wav
│ │ │ │ ├── Blocked.wav
│ │ │ │ ├── CollectCoin.wav
│ │ │ │ ├── Crash.wav
│ │ │ │ ├── Jump.wav
│ │ │ │ ├── Music.mp3
│ │ │ │ └── Traffic.mp3
│ │ │ ├── Bus.scn
│ │ │ ├── Coin.scn
│ │ │ ├── Collision.scn
│ │ │ ├── GameScene.scn
│ │ │ ├── Gradient_Diffuse.png
│ │ │ ├── Grass_Diffuse.png
│ │ │ ├── Home.scn
│ │ │ ├── House.scn
│ │ │ ├── LargeTree.scn
│ │ │ ├── MagicaVoxel_Diffuse.png
│ │ │ ├── MediumTree.scn
│ │ │ ├── Mini.scn
│ │ │ ├── MrPigLogo_Diffuse.png
│ │ │ ├── MrPig.scn
│ │ │ ├── MrWolf.png
│ │ │ ├── MrWolf.scn
│ │ │ ├── Rays_Diffuse.png
│ │ │ ├── Road_Diffuse.png
│ │ │ ├── Road.scn
│ │ │ ├── SmallTree.scn
│ │ │ ├── Smoke.png
│ │ │ ├── SplashScene.scn
│ │ │ ├── SUV.scn
│ │ │ ├── TapToPlay_Diffuse.png
│ │ │ ├── TreeLine.scn
│ │ │ └── TreePatch.scn
│ │ └── ViewController.swift
│ └── Mr.Pig.xcodeproj
│ ├── project.pbxproj
│ └── project.xcworkspace
│ └── contents.xcworkspacedata
├── final
│ └── Mr.Pig
│ ├── Mr.Pig
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ │ ├── Contents.json
│ │ │ │ ├── MrPig_AppIcon_120x120.png
│ │ │ │ ├── MrPig_AppIcon_152x152.png
│ │ │ │ ├── MrPig_AppIcon_167x167.png
│ │ │ │ ├── MrPig_AppIcon_180x180.png
│ │ │ │ └── MrPig_AppIcon_76x76.png
│ │ │ ├── Contents.json
│ │ │ └── MrPig_Launch.imageset
│ │ │ ├── Contents.json
│ │ │ └── MrPig_Launch.png
│ │ ├── Base.lproj
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── GameUtils
│ │ │ ├── GameHelper.swift
│ │ │ ├── GameUtils.swift
│ │ │ └── SCNAction+Extensions.swift
│ │ ├── Info.plist
│ │ ├── MrPig.scnassets
│ │ │ ├── Audio
│ │ │ │ ├── BankCoin.wav
│ │ │ │ ├── Blocked.wav
│ │ │ │ ├── CollectCoin.wav
│ │ │ │ ├── Crash.wav
│ │ │ │ ├── Jump.wav
│ │ │ │ ├── Music.mp3
│ │ │ │ └── Traffic.mp3
│ │ │ ├── Bus.scn
│ │ │ ├── Coin.scn
│ │ │ ├── Collision.scn
│ │ │ ├── GameScene.scn
│ │ │ ├── Gradient_Diffuse.png
│ │ │ ├── Grass_Diffuse.png
│ │ │ ├── Home.scn
│ │ │ ├── House.scn
│ │ │ ├── LargeTree.scn
│ │ │ ├── MagicaVoxel_Diffuse.png
│ │ │ ├── MediumTree.scn
│ │ │ ├── Mini.scn
│ │ │ ├── MrPigLogo_Diffuse.png
│ │ │ ├── MrPig.scn
│ │ │ ├── MrWolf.png
│ │ │ ├── MrWolf.scn
│ │ │ ├── Rays_Diffuse.png
│ │ │ ├── Road_Diffuse.png
│ │ │ ├── Road.scn
│ │ │ ├── SmallTree.scn
│ │ │ ├── Smoke.png
│ │ │ ├── SplashScene.scn
│ │ │ ├── SUV.scn
│ │ │ ├── TapToPlay_Diffuse.png
│ │ │ ├── TreeLine.scn
│ │ │ └── TreePatch.scn
│ │ └── ViewController.swift
│ └── Mr.Pig.xcodeproj
│ ├── project.pbxproj
│ └── project.xcworkspace
│ └── contents.xcworkspacedata
└── starter
└── Mr.Pig
├── Mr.Pig
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ │ ├── AppIcon.appiconset
│ │ │ ├── Contents.json
│ │ │ ├── MrPig_AppIcon_120x120.png
│ │ │ ├── MrPig_AppIcon_152x152.png
│ │ │ ├── MrPig_AppIcon_167x167.png
│ │ │ ├── MrPig_AppIcon_180x180.png
│ │ │ └── MrPig_AppIcon_76x76.png
│ │ ├── Contents.json
│ │ └── MrPig_Launch.imageset
│ │ ├── Contents.json
│ │ └── MrPig_Launch.png
│ ├── Base.lproj
│ │ ├── LaunchScreen.storyboard
│ │ └── Main.storyboard
│ ├── GameUtils
│ │ ├── GameHelper.swift
│ │ ├── GameUtils.swift
│ │ └── SCNAction+Extensions.swift
│ ├── Info.plist
│ ├── MrPig.scnassets
│ │ ├── Audio
│ │ │ ├── BankCoin.wav
│ │ │ ├── Blocked.wav
│ │ │ ├── CollectCoin.wav
│ │ │ ├── Crash.wav
│ │ │ ├── Jump.wav
│ │ │ ├── Music.mp3
│ │ │ └── Traffic.mp3
│ │ ├── Bus.scn
│ │ ├── Coin.scn
│ │ ├── Collision.scn
│ │ ├── GameScene.scn
│ │ ├── Gradient_Diffuse.png
│ │ ├── Grass_Diffuse.png
│ │ ├── Home.scn
│ │ ├── House.scn
│ │ ├── LargeTree.scn
│ │ ├── MagicaVoxel_Diffuse.png
│ │ ├── MediumTree.scn
│ │ ├── Mini.scn
│ │ ├── MrPigLogo_Diffuse.png
│ │ ├── MrPig.scn
│ │ ├── Rays_Diffuse.png
│ │ ├── Road_Diffuse.png
│ │ ├── Road.scn
│ │ ├── SmallTree.scn
│ │ ├── Smoke.png
│ │ ├── SplashScene.scn
│ │ ├── SUV.scn
│ │ ├── TapToPlay_Diffuse.png
│ │ ├── TreeLine.scn
│ │ └── TreePatch.scn
│ └── ViewController.swift
└── Mr.Pig.xcodeproj
├── project.pbxproj
└── project.xcworkspace
└── contents.xcworkspacedata
1585 directories, 2287 files
标签:
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论