├── .gitignore
├── ARPowerPanels.playgroundbook
├── Contents
│ ├── Chapters
│ │ └── Document8.playgroundchapter
│ │ │ ├── Manifest.plist
│ │ │ └── Pages
│ │ │ └── Exercise1.playgroundpage
│ │ │ ├── Contents.swift
│ │ │ ├── LiveViewOld.swift
│ │ │ ├── Manifest.plist
│ │ │ └── Sources
│ │ │ └── ARKitViewController.swift
│ ├── Manifest.plist
│ ├── PrivateResources
│ │ ├── Images
│ │ │ ├── ARPowerPanelsIcon.png
│ │ │ ├── LtC2-icon.png
│ │ │ └── rose.jpg
│ │ ├── art.scnassets
│ │ │ ├── camera.scn
│ │ │ ├── fox
│ │ │ │ ├── jump_dust.scn
│ │ │ │ ├── max.scn
│ │ │ │ ├── max_AO.png
│ │ │ │ ├── max_diffuse.png
│ │ │ │ ├── max_diffuseB.png
│ │ │ │ ├── max_diffuseC.png
│ │ │ │ ├── max_diffuseD.png
│ │ │ │ ├── max_idle.scn
│ │ │ │ ├── max_jump.scn
│ │ │ │ ├── max_roughness.png
│ │ │ │ ├── max_specular.png
│ │ │ │ ├── max_spin.scn
│ │ │ │ ├── max_walk.scn
│ │ │ │ └── smoke.png
│ │ │ ├── lowPolyTree.dae
│ │ │ ├── ship.scn
│ │ │ ├── stones_and_treasure.dae
│ │ │ ├── texture.png
│ │ │ └── wolf
│ │ │ │ ├── textures
│ │ │ │ ├── Wolf_Body.jpg
│ │ │ │ ├── Wolf_Eyes_1.jpg
│ │ │ │ ├── Wolf_Eyes_2.jpg
│ │ │ │ └── Wolf_Fur.jpg
│ │ │ │ └── wolf.dae
│ │ ├── checkmarkWhite.png
│ │ ├── closeWhite.png
│ │ ├── imagesAdventure
│ │ │ ├── Arrow.png
│ │ │ ├── Barrel_Clo.png
│ │ │ ├── Barrel_Open.png
│ │ │ ├── Box.png
│ │ │ ├── Bullion.png
│ │ │ ├── Chest_Clos.png
│ │ │ ├── Chest_Open.png
│ │ │ ├── Coin.png
│ │ │ ├── Crown.png
│ │ │ ├── Crystal_1.png
│ │ │ ├── Crystal_2.png
│ │ │ ├── Crystal_3.png
│ │ │ ├── Crystal_4.png
│ │ │ ├── Emeraid.png
│ │ │ ├── Exlir_Of0.png
│ │ │ ├── Exlir_Of_.png
│ │ │ ├── Key.png
│ │ │ ├── Pick.png
│ │ │ ├── Rocks_2.png
│ │ │ ├── Rocks_And.png
│ │ │ ├── Rocks_And0.png
│ │ │ ├── Ruby.png
│ │ │ ├── Shield.png
│ │ │ ├── Skull.png
│ │ │ ├── Stone_1.png
│ │ │ ├── Stone_10.png
│ │ │ ├── Stone_11.png
│ │ │ ├── Stone_12.png
│ │ │ ├── Stone_13.png
│ │ │ ├── Stone_14.png
│ │ │ ├── Stone_15.png
│ │ │ ├── Stone_16.png
│ │ │ ├── Stone_17.png
│ │ │ ├── Stone_18.png
│ │ │ ├── Stone_3.png
│ │ │ ├── Stone_4.png
│ │ │ ├── Stone_5.png
│ │ │ ├── Stone_6.png
│ │ │ ├── Stone_7.png
│ │ │ ├── Stone_8.png
│ │ │ ├── Sword.png
│ │ │ └── Tree.png
│ │ ├── menuAxis.png
│ │ ├── menuFox.jpeg
│ │ ├── menuLowPolyTree.png
│ │ ├── menuShip.png
│ │ ├── menuWolf.png
│ │ ├── shapeBox.png
│ │ ├── shapeCapsule.png
│ │ ├── shapeCone.png
│ │ ├── shapeCylinder.png
│ │ ├── shapePlane.png
│ │ ├── shapePyramid.png
│ │ ├── shapeSphere.png
│ │ ├── shapeTorus.png
│ │ └── shapeTube.png
│ ├── PublicResources
│ │ └── rose.jpg
│ └── Sources
│ │ ├── Extensions
│ │ ├── 2DUtilities
│ │ │ ├── FTD Cells
│ │ │ │ ├── HierachyCell.swift
│ │ │ │ └── LabelCell.swift
│ │ │ ├── FTD Helpers
│ │ │ │ └── HostCell+StateType.swift
│ │ │ ├── FTD Original
│ │ │ │ ├── CellActions.swift
│ │ │ │ ├── CellConfigType.swift
│ │ │ │ ├── CellStyle.swift
│ │ │ │ ├── CollectionView
│ │ │ │ │ ├── CollectionCell.swift
│ │ │ │ │ ├── CollectionItemConfigType.swift
│ │ │ │ │ ├── FunctionalCollectionData.swift
│ │ │ │ │ └── UICollectionView+Reusable.swift
│ │ │ │ ├── HostCell.swift
│ │ │ │ ├── Info.plist
│ │ │ │ ├── Reusable.swift
│ │ │ │ ├── Separator.swift
│ │ │ │ ├── TableItemLayout.swift
│ │ │ │ ├── TableSection.swift
│ │ │ │ ├── TableSectionChangeSet.swift
│ │ │ │ ├── TableSectionHeaderFooter.swift
│ │ │ │ ├── TableView
│ │ │ │ │ ├── FunctionalTableData.swift
│ │ │ │ │ ├── TableCell.swift
│ │ │ │ │ ├── TableItemConfigType.swift
│ │ │ │ │ └── UITableView+Reusable.swift
│ │ │ │ ├── UIView+AutoLayout.swift
│ │ │ │ └── UIView+Extensions.swift
│ │ │ ├── NeatConstraints
│ │ │ │ ├── Constrainable.swift
│ │ │ │ ├── Constraints+Activation+Priority.swift
│ │ │ │ ├── NibView.swift
│ │ │ │ └── UIView+Constraints.swift
│ │ │ ├── PowerPanelExtensions
│ │ │ │ ├── UIColor+Extensions.swift
│ │ │ │ └── UIView+BorderedInputBoxes.swift
│ │ │ └── UICollection+Extensions.swift
│ │ ├── 3DUtilities
│ │ │ ├── 3DUtilities.swift
│ │ │ ├── ARSCNView+HitTest.swift
│ │ │ ├── GlowEffect
│ │ │ │ ├── NodeTechnique.plist
│ │ │ │ └── SCNScene+Glow.swift
│ │ │ └── SCNVector3+Extensions.swift
│ │ └── Font+Extensions.swift
│ │ ├── Info.plist
│ │ ├── Nodes
│ │ └── Models
│ │ │ ├── Assets.swift
│ │ │ ├── NodeCreator.swift
│ │ │ └── NodeCreatorType.swift
│ │ ├── PowerPanels.h
│ │ ├── PowerPanels
│ │ ├── ARPowerPanels.swift
│ │ ├── HierachyPanel
│ │ │ ├── HierachyPanel.swift
│ │ │ └── HierarchyIteractor.swift
│ │ ├── Left Menu
│ │ │ ├── MenuItem.swift
│ │ │ ├── MenuStackView.swift
│ │ │ └── RoundedButton.swift
│ │ ├── ModelCollection
│ │ │ ├── ImageCollectionCell.swift
│ │ │ ├── ImageCollectionView.swift
│ │ │ └── ModelCollectionView.swift
│ │ ├── Panel.swift
│ │ ├── PanelsPresenter.swift
│ │ └── TransformationPanel
│ │ │ ├── NodeNames.swift
│ │ │ ├── PowerPanelCheckmarkInput.swift
│ │ │ ├── PowerPanelTextField.swift
│ │ │ ├── Slider Input Views
│ │ │ ├── DecimalTextField.swift
│ │ │ ├── SliderInputsView.swift
│ │ │ ├── SliderTextView.swift
│ │ │ ├── SliderVector3View.swift
│ │ │ └── SliderVector4View.swift
│ │ │ ├── TransformationPanel.swift
│ │ │ └── TransformationType.swift
│ │ ├── Scene
│ │ └── SceneCreator.swift
│ │ └── View Controllers
│ │ └── GlobalPlayground.swift
├── License.txt
└── version.plist
├── ARPowerPanelsFramework
├── ARPowerPanels.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ └── xcshareddata
│ │ └── xcschemes
│ │ └── ARPowerPanelsDemo.xcscheme
├── ARPowerPanels.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
├── ARPowerPanels
│ ├── Extensions
│ │ ├── 2DUtilities
│ │ │ ├── FTD Cells
│ │ │ │ ├── HierachyCell.swift
│ │ │ │ └── LabelCell.swift
│ │ │ ├── FTD Helpers
│ │ │ │ └── HostCell+StateType.swift
│ │ │ ├── FTD Original
│ │ │ │ ├── CellActions.swift
│ │ │ │ ├── CellConfigType.swift
│ │ │ │ ├── CellStyle.swift
│ │ │ │ ├── CollectionView
│ │ │ │ │ ├── CollectionCell.swift
│ │ │ │ │ ├── CollectionItemConfigType.swift
│ │ │ │ │ ├── FunctionalCollectionData.swift
│ │ │ │ │ └── UICollectionView+Reusable.swift
│ │ │ │ ├── HostCell.swift
│ │ │ │ ├── Info.plist
│ │ │ │ ├── Reusable.swift
│ │ │ │ ├── Separator.swift
│ │ │ │ ├── TableItemLayout.swift
│ │ │ │ ├── TableSection.swift
│ │ │ │ ├── TableSectionChangeSet.swift
│ │ │ │ ├── TableSectionHeaderFooter.swift
│ │ │ │ ├── TableView
│ │ │ │ │ ├── FunctionalTableData.swift
│ │ │ │ │ ├── TableCell.swift
│ │ │ │ │ ├── TableItemConfigType.swift
│ │ │ │ │ └── UITableView+Reusable.swift
│ │ │ │ ├── UIView+AutoLayout.swift
│ │ │ │ └── UIView+Extensions.swift
│ │ │ ├── NeatConstraints
│ │ │ │ ├── Constrainable.swift
│ │ │ │ ├── Constraints+Activation+Priority.swift
│ │ │ │ ├── NibView.swift
│ │ │ │ └── UIView+Constraints.swift
│ │ │ ├── PowerPanelExtensions
│ │ │ │ ├── UIColor+Extensions.swift
│ │ │ │ └── UIView+BorderedInputBoxes.swift
│ │ │ └── UICollection+Extensions.swift
│ │ ├── 3DUtilities
│ │ │ ├── 3DUtilities.swift
│ │ │ ├── ARSCNView+HitTest.swift
│ │ │ ├── GlowEffect
│ │ │ │ ├── NodeTechnique.plist
│ │ │ │ └── SCNScene+Glow.swift
│ │ │ └── SCNVector3+Extensions.swift
│ │ └── Font+Extensions.swift
│ ├── Info.plist
│ ├── Nodes
│ │ └── Models
│ │ │ ├── Assets.swift
│ │ │ ├── NodeCreator.swift
│ │ │ └── NodeCreatorType.swift
│ ├── PowerPanels.h
│ ├── PowerPanels
│ │ ├── ARPowerPanels.swift
│ │ ├── HierachyPanel
│ │ │ ├── HierachyPanel.swift
│ │ │ └── HierarchyIteractor.swift
│ │ ├── Left Menu
│ │ │ ├── MenuItem.swift
│ │ │ ├── MenuStackView.swift
│ │ │ └── RoundedButton.swift
│ │ ├── ModelCollection
│ │ │ ├── ImageCollectionCell.swift
│ │ │ ├── ImageCollectionView.swift
│ │ │ └── ModelCollectionView.swift
│ │ ├── Panel.swift
│ │ ├── PanelsPresenter.swift
│ │ └── TransformationPanel
│ │ │ ├── NodeNames.swift
│ │ │ ├── PowerPanelCheckmarkInput.swift
│ │ │ ├── PowerPanelTextField.swift
│ │ │ ├── Slider Input Views
│ │ │ ├── DecimalTextField.swift
│ │ │ ├── SliderInputsView.swift
│ │ │ ├── SliderTextView.swift
│ │ │ ├── SliderVector3View.swift
│ │ │ └── SliderVector4View.swift
│ │ │ ├── TransformationPanel.swift
│ │ │ └── TransformationType.swift
│ ├── Resources
│ │ ├── ForPlaygroundOnly
│ │ │ ├── imagesAdventure
│ │ │ │ ├── Arrow.png
│ │ │ │ ├── Barrel_Clo.png
│ │ │ │ ├── Barrel_Open.png
│ │ │ │ ├── Box.png
│ │ │ │ ├── Bullion.png
│ │ │ │ ├── Chest_Clos.png
│ │ │ │ ├── Chest_Open.png
│ │ │ │ ├── Coin.png
│ │ │ │ ├── Crown.png
│ │ │ │ ├── Crystal_1.png
│ │ │ │ ├── Crystal_2.png
│ │ │ │ ├── Crystal_3.png
│ │ │ │ ├── Crystal_4.png
│ │ │ │ ├── Emeraid.png
│ │ │ │ ├── Exlir_Of0.png
│ │ │ │ ├── Exlir_Of_.png
│ │ │ │ ├── Key.png
│ │ │ │ ├── Pick.png
│ │ │ │ ├── Rocks_2.png
│ │ │ │ ├── Rocks_And.png
│ │ │ │ ├── Rocks_And0.png
│ │ │ │ ├── Ruby.png
│ │ │ │ ├── Shield.png
│ │ │ │ ├── Skull.png
│ │ │ │ ├── Stone_1.png
│ │ │ │ ├── Stone_10.png
│ │ │ │ ├── Stone_11.png
│ │ │ │ ├── Stone_12.png
│ │ │ │ ├── Stone_13.png
│ │ │ │ ├── Stone_14.png
│ │ │ │ ├── Stone_15.png
│ │ │ │ ├── Stone_16.png
│ │ │ │ ├── Stone_17.png
│ │ │ │ ├── Stone_18.png
│ │ │ │ ├── Stone_3.png
│ │ │ │ ├── Stone_4.png
│ │ │ │ ├── Stone_5.png
│ │ │ │ ├── Stone_6.png
│ │ │ │ ├── Stone_7.png
│ │ │ │ ├── Stone_8.png
│ │ │ │ ├── Sword.png
│ │ │ │ └── Tree.png
│ │ │ ├── imagesMenu
│ │ │ │ ├── checkmarkWhite.png
│ │ │ │ ├── closeWhite.png
│ │ │ │ ├── menuFox.jpeg
│ │ │ │ ├── menuLowPolyTree.png
│ │ │ │ ├── menuShip.png
│ │ │ │ └── menuWolf.png
│ │ │ └── imagesShapes
│ │ │ │ ├── shapeBox.png
│ │ │ │ ├── shapeCapsule.png
│ │ │ │ ├── shapeCone.png
│ │ │ │ ├── shapeCylinder.png
│ │ │ │ ├── shapePlane.png
│ │ │ │ ├── shapePyramid.png
│ │ │ │ ├── shapeSphere.png
│ │ │ │ ├── shapeTorus.png
│ │ │ │ └── shapeTube.png
│ │ └── art.scnassets
│ │ │ ├── camera.scn
│ │ │ ├── fox
│ │ │ ├── jump_dust.scn
│ │ │ ├── max.scn
│ │ │ ├── max_AO.png
│ │ │ ├── max_diffuse.png
│ │ │ ├── max_diffuseB.png
│ │ │ ├── max_diffuseC.png
│ │ │ ├── max_diffuseD.png
│ │ │ ├── max_idle.scn
│ │ │ ├── max_jump.scn
│ │ │ ├── max_roughness.png
│ │ │ ├── max_specular.png
│ │ │ ├── max_spin.scn
│ │ │ ├── max_walk.scn
│ │ │ └── smoke.png
│ │ │ ├── lowPolyTree.dae
│ │ │ ├── ship.scn
│ │ │ ├── stones_and_treasure.dae
│ │ │ ├── texture.png
│ │ │ └── wolf
│ │ │ ├── textures
│ │ │ ├── Wolf_Body.jpg
│ │ │ ├── Wolf_Eyes_1.jpg
│ │ │ ├── Wolf_Eyes_2.jpg
│ │ │ └── Wolf_Fur.jpg
│ │ │ └── wolf.dae
│ ├── Scene
│ │ └── SceneCreator.swift
│ └── View Controllers
│ │ └── GlobalPlayground.swift
├── ARPowerPanelsDemo
│ ├── ARKitViewController.swift
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ │ ├── AppIcon.appiconset
│ │ │ ├── Contents.json
│ │ │ ├── icon-29.png
│ │ │ ├── icon-29@2x.png
│ │ │ ├── icon-29@3x.png
│ │ │ ├── icon-40.png
│ │ │ ├── icon-40@2x.png
│ │ │ ├── icon-40@3x.png
│ │ │ ├── icon-60@2x.png
│ │ │ ├── icon-60@3x.png
│ │ │ ├── icon-76.png
│ │ │ ├── icon-76@2x.png
│ │ │ └── icon-83.5@2x.png
│ │ └── Contents.json
│ ├── Base.lproj
│ │ ├── LaunchScreen.storyboard
│ │ └── Main.storyboard
│ ├── GlowTechnique
│ │ └── NodeRender.metal
│ ├── Info.plist
│ └── SceneKitViewController.swift
├── Podfile
├── Podfile.lock
└── Pods
│ ├── Manifest.lock
│ ├── Pods.xcodeproj
│ └── project.pbxproj
│ ├── SwiftyTables
│ ├── LICENSE
│ ├── README.md
│ └── SwiftyTablesProject
│ │ └── SwiftyTables
│ │ ├── SwiftDeclarativeTables
│ │ ├── FTD Helpers
│ │ │ ├── CarouselCell
│ │ │ │ ├── CarouselCell.swift
│ │ │ │ ├── CarouselItemCell.swift
│ │ │ │ └── CarouselState.swift
│ │ │ ├── HostCell+StateType.swift
│ │ │ ├── NibView.swift
│ │ │ └── UIView+Helpers.swift
│ │ └── FunctionalTableData
│ │ │ ├── CellActions.swift
│ │ │ ├── CellConfigType.swift
│ │ │ ├── CellStyle.swift
│ │ │ ├── CollectionView
│ │ │ ├── CollectionCell.swift
│ │ │ ├── CollectionItemConfigType.swift
│ │ │ ├── FunctionalCollectionData.swift
│ │ │ └── UICollectionView+Reusable.swift
│ │ │ ├── HostCell.swift
│ │ │ ├── ObjCExceptionRethrower.swift
│ │ │ ├── Reusable.swift
│ │ │ ├── Separator.swift
│ │ │ ├── TableItemLayout.swift
│ │ │ ├── TableSection.swift
│ │ │ ├── TableSectionChangeSet.swift
│ │ │ ├── TableSectionHeaderFooter.swift
│ │ │ ├── TableView
│ │ │ ├── FunctionalTableData.swift
│ │ │ ├── TableCell.swift
│ │ │ ├── TableItemConfigType.swift
│ │ │ └── UITableView+Reusable.swift
│ │ │ ├── UIView+AutoLayout.swift
│ │ │ └── UIView+Extensions.swift
│ │ └── SwiftyTables.h
│ └── Target Support Files
│ ├── Pods-ARPowerPanels
│ ├── Info.plist
│ ├── Pods-ARPowerPanels-acknowledgements.markdown
│ ├── Pods-ARPowerPanels-acknowledgements.plist
│ ├── Pods-ARPowerPanels-dummy.m
│ ├── Pods-ARPowerPanels-resources.sh
│ ├── Pods-ARPowerPanels-umbrella.h
│ ├── Pods-ARPowerPanels.debug.xcconfig
│ ├── Pods-ARPowerPanels.modulemap
│ └── Pods-ARPowerPanels.release.xcconfig
│ ├── Pods-ARPowerPanelsDemo
│ ├── Info.plist
│ ├── Pods-ARPowerPanelsDemo-acknowledgements.markdown
│ ├── Pods-ARPowerPanelsDemo-acknowledgements.plist
│ ├── Pods-ARPowerPanelsDemo-dummy.m
│ ├── Pods-ARPowerPanelsDemo-frameworks.sh
│ ├── Pods-ARPowerPanelsDemo-resources.sh
│ ├── Pods-ARPowerPanelsDemo-umbrella.h
│ ├── Pods-ARPowerPanelsDemo.debug.xcconfig
│ ├── Pods-ARPowerPanelsDemo.modulemap
│ └── Pods-ARPowerPanelsDemo.release.xcconfig
│ └── SwiftyTables
│ ├── Info.plist
│ ├── SwiftyTables-dummy.m
│ ├── SwiftyTables-prefix.pch
│ ├── SwiftyTables-umbrella.h
│ ├── SwiftyTables.modulemap
│ └── SwiftyTables.xcconfig
├── README.md
├── Screenshots
├── ARPowerPanels_1_.PNG
├── ARPowerPanels_2_.PNG
├── ARPowerPanels_3_.PNG
├── ARPowerPanels_4_.PNG
├── ARPowerPanels_5_.PNG
└── ARPowerPanels_6_.PNG
└── Tests.playground
├── Contents.swift
└── contents.xcplayground
/.gitignore:
--------------------------------------------------------------------------------
1 | # Xcode
2 | #
3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
4 |
5 | ## Build generated
6 | build/
7 | DerivedData/
8 |
9 | ## Various settings
10 | *.pbxuser
11 | !default.pbxuser
12 | *.mode1v3
13 | !default.mode1v3
14 | *.mode2v3
15 | !default.mode2v3
16 | *.perspectivev3
17 | !default.perspectivev3
18 | xcuserdata/
19 |
20 | ## Other
21 | *.moved-aside
22 | *.xccheckout
23 | *.xcscmblueprint
24 |
25 | ## Obj-C/Swift specific
26 | *.hmap
27 | *.ipa
28 | *.dSYM.zip
29 | *.dSYM
30 |
31 | ## Playgrounds
32 | timeline.xctimeline
33 | playground.xcworkspace
34 |
35 | # Swift Package Manager
36 | #
37 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
38 | # Packages/
39 | # Package.pins
40 | .build/
41 |
42 | # CocoaPods
43 | #
44 | # We recommend against adding the Pods directory to your .gitignore. However
45 | # you should judge for yourself, the pros and cons are mentioned at:
46 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
47 | #
48 | # Pods/
49 |
50 | # Carthage
51 | #
52 | # Add this line if you want to avoid checking in source code from Carthage dependencies.
53 | # Carthage/Checkouts
54 |
55 | Carthage/Build
56 |
57 | # fastlane
58 | #
59 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
60 | # screenshots whenever they are needed.
61 | # For more information about the recommended setup visit:
62 | # https://docs.fastlane.tools/best-practices/source-control/#source-control
63 |
64 | fastlane/report.xml
65 | fastlane/Preview.html
66 | fastlane/screenshots
67 | fastlane/test_output
68 |
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/Chapters/Document8.playgroundchapter/Manifest.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Name
6 | Name
7 | Pages
8 |
9 | Exercise1.playgroundpage
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/Chapters/Document8.playgroundchapter/Pages/Exercise1.playgroundpage/LiveViewOld.swift:
--------------------------------------------------------------------------------
1 | ////
2 | //// LiveView.swift
3 | ////
4 | //// Copyright © 2016,2017 Apple Inc. All rights reserved.
5 | ////
6 | //
7 | //// Indicate that this is the LiveView process.
8 | //Process.configureForAlwaysOnLiveView()
9 | //
10 | //// Load the scene and add any additional elements.
11 | //playgroundPrologue()
12 | //
13 | //// Present the LiveView's `SceneController`.
14 | //// (Another world instance will be created for calculating user commands)
15 | //presentWorld()
16 | //
17 | //// Start running the LiveView.
18 | //// Initially only the idle animation will show as this is
19 | //// presented before any user commands are run.
20 | //startPlayback()
21 |
22 |
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/Chapters/Document8.playgroundchapter/Pages/Exercise1.playgroundpage/Manifest.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Description
6 | Description
7 | LiveViewEdgeToEdge
8 |
9 | LiveViewMode
10 | VisibleByDefault
11 | MaximumSupportedExecutionSpeed
12 | Fastest
13 | Name
14 | Name
15 | PlaygroundLoggingMode
16 | Off
17 | PosterReference
18 | LiveViewPoster.png
19 | Version
20 | 1.0
21 |
22 |
23 |
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/Manifest.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Chapters
6 |
7 | Document8.playgroundchapter
8 |
9 | ContentIdentifier
10 | com.apple.playgrounds.learntocode2.edition3
11 | ContentVersion
12 | 3.0.1
13 | DeploymentTarget
14 | ios11.2
15 | DevelopmentRegion
16 | en
17 | ImageReference
18 | Images/ARPowerPanelsIcon.png
19 | Name
20 | Name
21 | SwiftVersion
22 | 4.0
23 | Version
24 | 4.0
25 |
26 |
27 |
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/Images/ARPowerPanelsIcon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/Images/ARPowerPanelsIcon.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/Images/LtC2-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/Images/LtC2-icon.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/Images/rose.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/Images/rose.jpg
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/art.scnassets/camera.scn:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/art.scnassets/camera.scn
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/art.scnassets/fox/jump_dust.scn:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/art.scnassets/fox/jump_dust.scn
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/art.scnassets/fox/max.scn:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/art.scnassets/fox/max.scn
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/art.scnassets/fox/max_AO.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/art.scnassets/fox/max_AO.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/art.scnassets/fox/max_diffuse.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/art.scnassets/fox/max_diffuse.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/art.scnassets/fox/max_diffuseB.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/art.scnassets/fox/max_diffuseB.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/art.scnassets/fox/max_diffuseC.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/art.scnassets/fox/max_diffuseC.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/art.scnassets/fox/max_diffuseD.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/art.scnassets/fox/max_diffuseD.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/art.scnassets/fox/max_idle.scn:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/art.scnassets/fox/max_idle.scn
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/art.scnassets/fox/max_jump.scn:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/art.scnassets/fox/max_jump.scn
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/art.scnassets/fox/max_roughness.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/art.scnassets/fox/max_roughness.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/art.scnassets/fox/max_specular.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/art.scnassets/fox/max_specular.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/art.scnassets/fox/max_spin.scn:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/art.scnassets/fox/max_spin.scn
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/art.scnassets/fox/max_walk.scn:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/art.scnassets/fox/max_walk.scn
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/art.scnassets/fox/smoke.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/art.scnassets/fox/smoke.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/art.scnassets/ship.scn:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/art.scnassets/ship.scn
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/art.scnassets/texture.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/art.scnassets/texture.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/art.scnassets/wolf/textures/Wolf_Body.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/art.scnassets/wolf/textures/Wolf_Body.jpg
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/art.scnassets/wolf/textures/Wolf_Eyes_1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/art.scnassets/wolf/textures/Wolf_Eyes_1.jpg
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/art.scnassets/wolf/textures/Wolf_Eyes_2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/art.scnassets/wolf/textures/Wolf_Eyes_2.jpg
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/art.scnassets/wolf/textures/Wolf_Fur.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/art.scnassets/wolf/textures/Wolf_Fur.jpg
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/checkmarkWhite.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/checkmarkWhite.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/closeWhite.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/closeWhite.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Arrow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Arrow.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Barrel_Clo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Barrel_Clo.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Barrel_Open.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Barrel_Open.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Box.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Box.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Bullion.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Bullion.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Chest_Clos.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Chest_Clos.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Chest_Open.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Chest_Open.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Coin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Coin.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Crown.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Crown.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Crystal_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Crystal_1.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Crystal_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Crystal_2.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Crystal_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Crystal_3.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Crystal_4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Crystal_4.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Emeraid.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Emeraid.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Exlir_Of0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Exlir_Of0.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Exlir_Of_.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Exlir_Of_.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Key.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Key.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Pick.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Pick.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Rocks_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Rocks_2.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Rocks_And.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Rocks_And.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Rocks_And0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Rocks_And0.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Ruby.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Ruby.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Shield.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Shield.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Skull.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Skull.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Stone_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Stone_1.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Stone_10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Stone_10.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Stone_11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Stone_11.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Stone_12.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Stone_12.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Stone_13.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Stone_13.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Stone_14.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Stone_14.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Stone_15.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Stone_15.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Stone_16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Stone_16.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Stone_17.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Stone_17.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Stone_18.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Stone_18.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Stone_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Stone_3.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Stone_4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Stone_4.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Stone_5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Stone_5.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Stone_6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Stone_6.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Stone_7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Stone_7.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Stone_8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Stone_8.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Sword.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Sword.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Tree.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/imagesAdventure/Tree.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/menuAxis.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/menuAxis.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/menuFox.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/menuFox.jpeg
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/menuLowPolyTree.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/menuLowPolyTree.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/menuShip.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/menuShip.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/menuWolf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/menuWolf.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/shapeBox.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/shapeBox.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/shapeCapsule.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/shapeCapsule.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/shapeCone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/shapeCone.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/shapeCylinder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/shapeCylinder.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/shapePlane.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/shapePlane.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/shapePyramid.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/shapePyramid.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/shapeSphere.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/shapeSphere.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/shapeTorus.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/shapeTorus.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PrivateResources/shapeTube.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PrivateResources/shapeTube.png
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/PublicResources/rose.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanels.playgroundbook/Contents/PublicResources/rose.jpg
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/Sources/Extensions/2DUtilities/FTD Cells/LabelCell.swift:
--------------------------------------------------------------------------------
1 | import UIKit
2 |
3 | public typealias LabelCell = HostCell
4 |
5 | /// A very simple state for a `UILabel` allowing a quick configuration of its text, font, and color values.
6 | public struct LabelState: StateType {
7 | public let text: String
8 | public let font: UIFont
9 | public let color: UIColor
10 |
11 | public init(text: String, font: UIFont = UIFont.systemFont(ofSize: 17), color: UIColor = .black) {
12 | self.text = text
13 | self.font = font
14 | self.color = color
15 | }
16 |
17 | /// Update the view with the contents of the state.
18 | ///
19 | /// - Parameters:
20 | /// - view: `UIView` that responds to this state.
21 | /// - state: data to update the view with. If `nil` the view is being reused by the tableview.
22 | public static func updateView(_ view: UILabel, state: LabelState?) {
23 | guard let state = state else {
24 | view.text = nil
25 | view.font = UIFont.systemFont(ofSize: 17)
26 | view.textColor = .black
27 | return
28 | }
29 |
30 | view.text = state.text
31 | view.font = state.font
32 | view.textColor = state.color
33 | view.numberOfLines = 0
34 | }
35 | }
36 |
37 | extension LabelState: Equatable {
38 | public static func ==(lhs: LabelState, rhs: LabelState) -> Bool {
39 | return lhs.text == rhs.text && lhs.font == rhs.font && lhs.color == rhs.color
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/Sources/Extensions/2DUtilities/FTD Helpers/HostCell+StateType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // StateType.swift
3 | // FunctionalTableDataMyDemo
4 | //
5 | // Created by Paige Sun on 2017-12-19.
6 | //
7 |
8 | import Foundation
9 |
10 | protocol StateType {
11 | associatedtype View
12 | static func updateView(_ view: View, state: Self?)
13 | }
14 |
15 | extension HostCell where State: StateType, State.View == View {
16 | init(key: String, style: CellStyle? = nil, actions: CellActions = CellActions(), state: State) {
17 | self.key = key
18 | self.style = style
19 | self.actions = actions
20 | self.state = state
21 | self.cellUpdater = State.updateView
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/Sources/Extensions/2DUtilities/FTD Original/CollectionView/CollectionCell.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CollectionCell.swift
3 | // FunctionalTableData
4 | //
5 | // Created by Raul Riera on 2017-10-08.
6 | // Copyright © 2017 Raul Riera. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | public class CollectionCell: UICollectionViewCell {
12 | public let view: ViewType
13 | public var prepare: ((_ view: ViewType) -> Void)?
14 |
15 | public override init(frame: CGRect) {
16 | view = ViewType()
17 | super.init(frame: frame)
18 | contentView.addSubviewsForAutolayout(view)
19 | Layout.layoutView(view, inContentView: contentView)
20 | }
21 |
22 | required public init?(coder aDecoder: NSCoder) {
23 | fatalError("init(coder:) has not been implemented")
24 | }
25 |
26 | public override func prepareForReuse() {
27 | super.prepareForReuse()
28 | prepare?(view)
29 | prepare = nil
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/Sources/Extensions/2DUtilities/FTD Original/CollectionView/CollectionItemConfigType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CollectionItemConfigType.swift
3 | // FunctionalTableData
4 | //
5 | // Created by Raul Riera on 2017-09-16.
6 | // Copyright © 2017 Raul Riera. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | public protocol CollectionItemConfigType {
12 | func register(with collectionView: UICollectionView)
13 | func dequeueCell(from collectionView: UICollectionView, at indexPath: IndexPath) -> UICollectionViewCell
14 | }
15 |
16 | extension CollectionItemConfigType {
17 | public func dequeueCell(from collectionView: UICollectionView, at indexPath: IndexPath) -> UICollectionViewCell {
18 | return collectionView.dequeueReusableCell(withReuseIdentifier: UICollectionViewCell.reuseIdentifier, for: indexPath)
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/Sources/Extensions/2DUtilities/FTD Original/CollectionView/UICollectionView+Reusable.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UICollectionView+Reusable.swift
3 | // FunctionalTableData
4 | //
5 | // Created by Raul Riera on 2017-09-16.
6 | // Copyright © 2017 Raul Riera. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | public extension UICollectionView {
12 | final func registerReusableCell(_ cellType: T.Type) {
13 | register(cellType.self, forCellWithReuseIdentifier: T.reuseIdentifier)
14 | }
15 |
16 | final func dequeueReusableCell(_ cellType: T.Type = T.self, indexPath: IndexPath) -> T {
17 | guard let cell = self.dequeueReusableCell(withReuseIdentifier: cellType.reuseIdentifier, for: indexPath) as? T else {
18 | fatalError("Failed to dequeue a cell with identifier \(cellType.reuseIdentifier) matching type \(cellType.self)")
19 | }
20 | return cell
21 | }
22 | }
23 |
24 | extension UICollectionViewCell: Reusable { }
25 |
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/Sources/Extensions/2DUtilities/FTD Original/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | $(CURRENT_PROJECT_VERSION)
21 | NSPrincipalClass
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/Sources/Extensions/2DUtilities/FTD Original/Reusable.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Reusable.swift
3 | // FunctionalTableData
4 | //
5 | // Created by Geoffrey Foster on 2016-09-10.
6 | // Copyright © 2016 Shopify. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | /// A type that identifies a dequeueable object. Used by `FunctionalTableData` to increase performance by reusing objects when it needs to, just like `UITableView` and `UICollectionView`.
12 | public protocol Reusable: class {
13 | /// Unique identifier for the object.
14 | static var reuseIdentifier: String { get }
15 | }
16 |
17 | extension Reusable {
18 | public static var reuseIdentifier: String {
19 | return NSStringFromClass(self)
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/Sources/Extensions/2DUtilities/FTD Original/TableItemLayout.swift:
--------------------------------------------------------------------------------
1 | //
2 | // TableItemLayout.swift
3 | // FunctionalTableData
4 | //
5 | // Created by Raul Riera on 2017-10-08.
6 | // Copyright © 2017 Raul Riera. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | public protocol TableItemLayout {
12 | static func layoutView(_ view: UIView, inContentView contentView: UIView)
13 | }
14 |
15 | // TableItemLayout
16 |
17 | public typealias EdgeBasedTableItemLayout = CombinedLayout
18 | public typealias LayoutMarginsTableItemLayout = CombinedLayout
19 |
20 | public struct ExplicitLayoutMarginsTableItemLayout: TableItemLayout {
21 | public static func layoutView(_ view: UIView, inContentView contentView: UIView) {
22 | contentView.preservesSuperviewLayoutMargins = false
23 | view.constrainToFillView(contentView, respectingLayoutMargins: true)
24 | }
25 | }
26 |
27 | public enum EdgeLayout {
28 | public struct Horizontal: TableItemLayout {
29 | public static func layoutView(_ view: UIView, inContentView contentView: UIView) {
30 | view.constrainToFillViewHorizontally(contentView)
31 | }
32 | }
33 | public struct Vertical: TableItemLayout {
34 | public static func layoutView(_ view: UIView, inContentView contentView: UIView) {
35 | view.constrainToFillViewVertically(contentView)
36 | }
37 | }
38 | }
39 | public enum MarginsLayout {
40 | public struct Horizontal: TableItemLayout {
41 | public static func layoutView(_ view: UIView, inContentView contentView: UIView) {
42 | view.constrainToFillViewHorizontally(contentView, respectingLayoutMargins: true)
43 | }
44 | }
45 | public struct Vertical: TableItemLayout {
46 | public static func layoutView(_ view: UIView, inContentView contentView: UIView) {
47 | view.constrainToFillViewVertically(contentView, respectingLayoutMargins: true)
48 | }
49 | }
50 | }
51 |
52 | public struct CombinedLayout: TableItemLayout {
53 | public static func layoutView(_ view: UIView, inContentView contentView: UIView) {
54 | Horizontal.layoutView(view, inContentView: contentView)
55 | Vertical.layoutView(view, inContentView: contentView)
56 | }
57 | }
58 |
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/Sources/Extensions/2DUtilities/FTD Original/TableSectionHeaderFooter.swift:
--------------------------------------------------------------------------------
1 | //
2 | // TableSectionHeaderFooter.swift
3 | // FunctionalTableData
4 | //
5 | // Created by Geoffrey Foster on 2016-09-10.
6 | // Copyright © 2016 Shopify. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | // MARK: Header specific item config
12 |
13 | @available(*, deprecated: 1.0, message: "Use `TableHeaderFooterConfigType` instead.")
14 | public typealias TableHeaderConfigType = TableHeaderFooterConfigType
15 |
16 | public protocol TableHeaderFooterConfigType: TableItemConfigType {
17 | func dequeueHeaderFooter(from tableView: UITableView) -> UITableViewHeaderFooterView?
18 | var height: CGFloat { get }
19 | }
20 |
21 | public protocol TableHeaderFooterStateType {
22 | var insets: UIEdgeInsets { get }
23 | var height: CGFloat { get }
24 | var topSeparatorHidden: Bool { get }
25 | var bottomSeparatorHidden: Bool { get }
26 | }
27 |
28 | public struct TableSectionHeaderFooter: TableHeaderFooterConfigType {
29 | public typealias ViewUpdater = (_ header: TableHeaderFooter, _ state: S) -> Void
30 | public let state: S?
31 | let updateView: ViewUpdater?
32 |
33 | public init(state: S? = nil, updater: ViewUpdater? = nil) {
34 | self.state = state
35 | self.updateView = updater
36 | }
37 |
38 | public func register(with tableView: UITableView) {
39 | tableView.registerReusableHeaderFooterView(TableHeaderFooter.self)
40 | }
41 |
42 | public func dequeueHeaderFooter(from tableView: UITableView) -> UITableViewHeaderFooterView? {
43 | let header = tableView.dequeueReusableHeaderFooterView(TableHeaderFooter.self)
44 | if let updater = updateView, let state = state {
45 | updater(header, state)
46 | }
47 | return header
48 | }
49 |
50 | public var height: CGFloat {
51 | return state?.height ?? 0
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/Sources/Extensions/2DUtilities/FTD Original/TableView/TableItemConfigType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // TableItemConfigType.swift
3 | // FunctionalTableData
4 | //
5 | // Created by Raul Riera on 2017-10-08.
6 | // Copyright © 2017 Raul Riera. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | public protocol TableItemConfigType {
12 | func register(with tableView: UITableView)
13 | func dequeueCell(from tableView: UITableView, at indexPath: IndexPath) -> UITableViewCell
14 | }
15 |
16 | extension TableItemConfigType {
17 | public func dequeueCell(from tableView: UITableView, at indexPath: IndexPath) -> UITableViewCell {
18 | return tableView.dequeueReusableCell(withIdentifier: UITableViewCell.reuseIdentifier, for: indexPath)
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/Sources/Extensions/2DUtilities/FTD Original/TableView/UITableView+Reusable.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UITableView+Reusable.swift
3 | // FunctionalTableData
4 | //
5 | // Created by Raul Riera on 2017-10-08.
6 | // Copyright © 2017 Raul Riera. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | public extension UITableView {
12 | // MARK: Headers
13 |
14 | final func registerReusableHeaderFooterView(_ headerType: T.Type) {
15 | register(headerType.self, forHeaderFooterViewReuseIdentifier: T.reuseIdentifier)
16 | }
17 |
18 | final func dequeueReusableHeaderFooterView(_ headerType: T.Type = T.self) -> T {
19 | guard let header = self.dequeueReusableHeaderFooterView(withIdentifier: headerType.reuseIdentifier) as? T else {
20 | fatalError("Failed to dequeue a header/footer with identifier \(headerType.reuseIdentifier) matching type \(headerType.self)")
21 | }
22 | return header
23 | }
24 |
25 | // MARK: Cells
26 |
27 | final func registerReusableCell(_ cellType: T.Type) {
28 | register(cellType.self, forCellReuseIdentifier: T.reuseIdentifier)
29 | }
30 |
31 | final func dequeueReusableCell(_ cellType: T.Type = T.self, indexPath: IndexPath?) -> T {
32 | if let indexPath = indexPath {
33 | guard let cell = self.dequeueReusableCell(withIdentifier: cellType.reuseIdentifier, for: indexPath) as? T else {
34 | fatalError("Failed to dequeue a cell with identifier \(cellType.reuseIdentifier) matching type \(cellType.self)")
35 | }
36 | return cell
37 | } else {
38 | guard let cell = self.dequeueReusableCell(withIdentifier: cellType.reuseIdentifier) as? T else {
39 | fatalError("Failed to dequeue a cell with identifier \(cellType.reuseIdentifier) matching type \(cellType.self)")
40 | }
41 | return cell
42 | }
43 | }
44 | }
45 |
46 | extension UITableViewCell: Reusable { }
47 | extension UITableViewHeaderFooterView: Reusable { }
48 |
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/Sources/Extensions/2DUtilities/FTD Original/UIView+Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UIView+Extensions.swift
3 | // FunctionalTableData
4 | //
5 | // Created by Raul Riera on 2017-07-31.
6 | // Copyright © 2017 Shopify. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | extension UIView {
12 | func typedSuperview() -> T? {
13 | var parent = superview
14 |
15 | while parent != nil {
16 | if let view = parent as? T {
17 | return view
18 | } else {
19 | parent = parent?.superview
20 | }
21 | }
22 |
23 | return nil
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/Sources/Extensions/2DUtilities/NeatConstraints/Constrainable.swift:
--------------------------------------------------------------------------------
1 | //
2 | // MIT License
3 | //
4 | // Copyright (c) 2018 Paige Sun
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 |
24 | import UIKit
25 |
26 | extension UIView: Constrainable {
27 |
28 | @discardableResult
29 | func prepareForAutolayout() -> Self {
30 | translatesAutoresizingMaskIntoConstraints = false
31 | return self
32 | }
33 | }
34 |
35 | extension UILayoutGuide: Constrainable {
36 |
37 | @discardableResult
38 | func prepareForAutolayout() -> Self { return self }
39 | }
40 |
41 | protocol Constrainable {
42 |
43 | var topAnchor: NSLayoutYAxisAnchor { get }
44 | var bottomAnchor: NSLayoutYAxisAnchor { get }
45 | var leftAnchor: NSLayoutXAxisAnchor { get }
46 | var rightAnchor: NSLayoutXAxisAnchor { get }
47 | var leadingAnchor: NSLayoutXAxisAnchor { get }
48 | var trailingAnchor: NSLayoutXAxisAnchor { get }
49 |
50 | var centerXAnchor: NSLayoutXAxisAnchor { get }
51 | var centerYAnchor: NSLayoutYAxisAnchor { get }
52 |
53 | var widthAnchor: NSLayoutDimension { get }
54 | var heightAnchor: NSLayoutDimension { get }
55 |
56 | @discardableResult
57 | func prepareForAutolayout() -> Self
58 | }
59 |
60 |
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/Sources/Extensions/2DUtilities/NeatConstraints/Constraints+Activation+Priority.swift:
--------------------------------------------------------------------------------
1 | //
2 | // MIT License
3 | //
4 | // Copyright (c) 2018 Paige Sun
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 |
24 | import UIKit
25 |
26 | extension Sequence where Element == NSLayoutConstraint {
27 |
28 | func activate() {
29 | if let constraints = self as? [NSLayoutConstraint] {
30 | NSLayoutConstraint.activate(constraints)
31 | }
32 | }
33 |
34 | func deActivate() {
35 | if let constraints = self as? [NSLayoutConstraint] {
36 | NSLayoutConstraint.deactivate(constraints)
37 | }
38 | }
39 | }
40 |
41 | extension NSLayoutConstraint {
42 |
43 | func with(_ p: UILayoutPriority) -> Self {
44 | priority = p
45 | return self
46 | }
47 |
48 | func set(active: Bool) -> Self {
49 | isActive = active
50 | return self
51 | }
52 | }
53 |
54 | extension UIView {
55 |
56 | func setHugging(_ priority: UILayoutPriority, for axis: UILayoutConstraintAxis) {
57 | setContentHuggingPriority(priority, for: axis)
58 | }
59 |
60 | func setCompressionResistance(_ priority: UILayoutPriority, for axis: UILayoutConstraintAxis) {
61 | setContentCompressionResistancePriority(priority, for: axis)
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/Sources/Extensions/2DUtilities/NeatConstraints/NibView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // MIT License
3 | //
4 | // Copyright (c) 2018 Paige Sun
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 |
24 | import UIKit
25 |
26 | protocol NibView {}
27 |
28 | extension NibView where Self: UIView {
29 | static func instanceFromNib() -> Self? {
30 | let nibName = String(describing: self)
31 | let bundle = Bundle(for: ModelCollectionView.self)
32 | return bundle.loadNibNamed(nibName, owner: self, options: nil)?.first as? Self
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/Sources/Extensions/2DUtilities/PowerPanelExtensions/UIColor+Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UIColor+Extensions.swift
3 | // ARPlanets
4 | //
5 | // Created by TSD040 on 2018-03-24.
6 | // Copyright © 2018 Pei Sun. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | extension UIColor {
12 | static var xAxisColor: UIColor {
13 | return #colorLiteral(red: 0.9098039269, green: 0.2054645958, blue: 0.4377822972, alpha: 1)
14 | }
15 |
16 | static var yAxisColor: UIColor {
17 | return #colorLiteral(red: 0.506713325, green: 0.8235294223, blue: 0.195811117, alpha: 1)
18 | }
19 |
20 | static var zAxisColor: UIColor {
21 | return #colorLiteral(red: 0.09368573094, green: 0.5884961087, blue: 0.9686274529, alpha: 1)
22 | }
23 |
24 | static var wAxisColor: UIColor {
25 | return #colorLiteral(red: 0.9568627477, green: 0.8079159167, blue: 0.2590701966, alpha: 1)
26 | }
27 |
28 | static var uiControlColor: UIColor {
29 | return #colorLiteral(red: 0.3789054537, green: 1, blue: 0.9100258617, alpha: 1)
30 | }
31 |
32 | static var panelBackgroundColor: UIColor {
33 | return #colorLiteral(red: 0, green: 0.1417405471, blue: 0.2871974469, alpha: 0.4654668328)
34 | }
35 | }
36 |
37 | public extension UIColor {
38 | public static func randomColor() -> UIColor {
39 | let hue = CGFloat(arc4random() % 100) / 100
40 | let saturation = CGFloat(arc4random() % 100) / 100
41 | let brightness = CGFloat(arc4random() % 100) / 100
42 |
43 | return UIColor(hue: hue, saturation: saturation, brightness: brightness, alpha: 1.0)
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/Sources/Extensions/2DUtilities/PowerPanelExtensions/UIView+BorderedInputBoxes.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UIView+BorderedInputBoxes.swift
3 | // ARPowerPanels
4 | //
5 | // Created by TSD040 on 2018-03-31.
6 | // Copyright © 2018 Pei Sun. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | extension UIView {
12 | static var cornerRadius: CGFloat = 20.0
13 |
14 | func addCornerRadius() {
15 | self.layer.cornerRadius = UIView.cornerRadius
16 | self.layer.masksToBounds = true
17 | }
18 |
19 | func setupPowerPanelTextField(_ textField: UITextField, tintColor: UIColor) {
20 | setupPowerPanelBorder(tintColor: tintColor)
21 |
22 | textField.tintColor = tintColor
23 | textField.font = UIFont.inputSlider
24 | addSubview(textField)
25 | textField.constrainEdges(to: self, insets: UIEdgeInsets(top: 6, left: 6, bottom: 6, right: 6))
26 | }
27 |
28 | func setupPowerPanelBorder(tintColor: UIColor) {
29 | backgroundColor = .white
30 | layer.borderColor = tintColor.cgColor
31 | layer.borderWidth = 2
32 | layer.cornerRadius = 8
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/Sources/Extensions/2DUtilities/UICollection+Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UICollection+Extensions.swift
3 | // ARPlanets
4 | //
5 | // Created by TSD040 on 2018-03-25.
6 | // Copyright © 2018 Pei Sun. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | protocol DequeueableCollectionViewCell {
12 | associatedtype CellType
13 | static func register(with collectionView: UICollectionView)
14 | static func dequeueCell(from collectionView: UICollectionView, at indexPath: IndexPath) -> CellType
15 | }
16 |
17 | extension DequeueableCollectionViewCell where Self: UICollectionViewCell {
18 | static func register(with collectionView: UICollectionView) {
19 | collectionView.register(Self.self, forCellWithReuseIdentifier: Self.reuseId())
20 | }
21 |
22 | static func dequeueCell(from collectionView: UICollectionView, at indexPath: IndexPath) -> Self {
23 | return collectionView.dequeueReusableCell(withReuseIdentifier: Self.reuseId(), for: indexPath) as! Self
24 | }
25 |
26 | private static func reuseId() -> String {
27 | return String(describing: self)
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/Sources/Extensions/3DUtilities/GlowEffect/SCNScene+Glow.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SCNScene+Glow.swift
3 | // ARPlanets
4 | //
5 | // Created by TSD040 on 2018-03-30.
6 | // Copyright © 2018 Pei Sun. All rights reserved.
7 | //
8 |
9 | import SceneKit
10 |
11 | extension SCNNode {
12 | func setGlow(_ shouldGlow: Bool) {
13 | enumerateHierarchy({ (node, _) in
14 | node.categoryBitMask = shouldGlow ? 2 : 1
15 | })
16 | }
17 | }
18 |
19 | extension SCNView {
20 | public func setupGlowTechnique() {
21 | let bundle = Bundle(for: ModelCollectionView.self)
22 | if let path = bundle.path(forResource: "NodeTechnique", ofType: "plist") {
23 | if let dict = NSDictionary(contentsOfFile: path) {
24 | let dict2 = dict as! [String : AnyObject]
25 | let technique = SCNTechnique(dictionary:dict2)
26 | self.technique = technique
27 | }
28 | }
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/Sources/Extensions/Font+Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Font+Extensions.swift
3 | // ARPlanets
4 | //
5 | // Created by Paige Sun on 2018-03-23.
6 | // Copyright © 2018 Paige Sun. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | extension UIFont {
12 | static var inputSlider = UIFont.boldSystemFont(ofSize: 14)
13 | static var inputSliderHeader = UIFont.boldSystemFont(ofSize: 16)
14 | static var inputSliderAxisLabel = UIFont.boldSystemFont(ofSize: 18)
15 | static var gameModelLabel = UIFont.boldSystemFont(ofSize: 16)
16 | }
17 |
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/Sources/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | $(CURRENT_PROJECT_VERSION)
21 | NSPrincipalClass
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/Sources/PowerPanels.h:
--------------------------------------------------------------------------------
1 | //
2 | // ARPowerPanels.h
3 | // ARPowerPanels
4 | //
5 | // Created by TSD040 on 2018-04-01.
6 | // Copyright © 2018 Paige Sun. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | //! Project version number for ARPowerPanels.
12 | FOUNDATION_EXPORT double PowerPanelsVersionNumber;
13 |
14 | //! Project version string for ARPowerPanels.
15 | FOUNDATION_EXPORT const unsigned char PowerPanelsVersionString[];
16 |
17 | // In this header, you should import all the public headers of your framework using statements like #import
18 |
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/Sources/PowerPanels/Left Menu/MenuItem.swift:
--------------------------------------------------------------------------------
1 | //
2 | // MenuItem.swift
3 | // ARPlanets
4 | //
5 | // Created by TSD040 on 2018-03-27.
6 | // Copyright © 2018 Pei Sun. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | struct MenuItem {
12 | let stackItem: MenuStackItem // For the MenuStack on the left with menu buttons
13 | let panelItem: PanelItem
14 |
15 | init(name: String, panelItem: PanelItem) {
16 | self.stackItem = MenuStackItem(name: name)
17 | self.panelItem = panelItem
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/Sources/PowerPanels/Left Menu/MenuStackView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // MenuStack.swift
3 | // RoundedButtonMenus
4 | //
5 | // Created by TSD040 on 2018-03-26.
6 | // Copyright © 2018 Paige Sun. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class MenuStackItem {
12 | let name: String
13 | var isSelected: Bool = false
14 |
15 | init(name: String) {
16 | self.name = name
17 | }
18 | }
19 |
20 | protocol MenuStackDelegate: class {
21 | func menuStack(_ menuStack: MenuStack, didSelectAtIndex index: Int)
22 | }
23 |
24 | class MenuStack: UIScrollView {
25 |
26 | weak var menuStackDelegate: MenuStackDelegate?
27 |
28 | private let stackView = UIStackView()
29 |
30 | init(axis: UILayoutConstraintAxis) {
31 | super.init(frame: CGRect.zero)
32 | showsHorizontalScrollIndicator = false
33 | showsVerticalScrollIndicator = false
34 | stackView.spacing = 15
35 | stackView.axis = axis
36 | self.addSubview(stackView)
37 | stackView.constrainEdges(to: self)
38 | }
39 |
40 | required init?(coder aDecoder: NSCoder) {
41 | fatalError("init(coder:) has not been implemented")
42 | }
43 |
44 | func configure(menuItems: [MenuStackItem]) {
45 | for arrangeSubview in stackView.arrangedSubviews {
46 | arrangeSubview.removeFromSuperview()
47 | }
48 |
49 | for (index, menuItem) in menuItems.enumerated() {
50 | let button = RoundedButton()
51 | button.tag = index
52 | button.setTitle(menuItem.name)
53 | button.isSelected = menuItem.isSelected
54 | button.delegate = self
55 | stackView.addArrangedSubview(button)
56 | }
57 | }
58 | }
59 |
60 | extension MenuStack: RoundedButtonDelegate {
61 | func roundedButton(didTap button: RoundedButton) {
62 | menuStackDelegate?.menuStack(self, didSelectAtIndex: button.tag)
63 | }
64 | }
65 |
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/Sources/PowerPanels/ModelCollection/ImageCollectionCell.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ImageCollectionCell.swift
3 | // ARPowerPanels
4 | //
5 | // Created by TSD040 on 2018-04-01.
6 | // Copyright © 2018 Pei Sun. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class ImageCollectionViewCell: UICollectionViewCell {
12 |
13 | let imageView = UIImageView()
14 |
15 | override init(frame: CGRect) {
16 | super.init(frame: frame)
17 | addCornerRadius()
18 |
19 | addSubview(imageView)
20 | imageView.contentMode = .scaleAspectFill
21 | imageView.constrainEdgesHorizontally(to: self)
22 | imageView.constrainTop(to: self)
23 | imageView.constrainBottom(to: self, priority: .defaultHigh)
24 | }
25 |
26 | required init?(coder aDecoder: NSCoder) {
27 | fatalError("init(coder:) has not been implemented")
28 | }
29 |
30 | func config(image: UIImage?) {
31 | imageView.image = image
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/Sources/PowerPanels/ModelCollection/ModelCollectionView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ModelCollectionView.swift
3 | // ARPowerPanels
4 | //
5 | // Created by TSD040 on 2018-04-01.
6 | // Copyright © 2018 Pei Sun. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | protocol ModelCollectionViewDelegate: class {
12 | func modelCollectionView(_ modelCollectionView: ModelCollectionView, didSelectModel nodeMaker: NodeCreatorType)
13 | }
14 |
15 | class ModelCollectionView: UIView {
16 |
17 | weak var delegate: ModelCollectionViewDelegate?
18 |
19 | private let imageCollectionView: ImageCollectionView
20 |
21 | private let nodeMakers: [NodeCreatorType]
22 |
23 | init(frame: CGRect, nodeMakers: [NodeCreatorType]) {
24 | self.nodeMakers = nodeMakers
25 |
26 | let images = nodeMakers.map { $0.menuImage }
27 | imageCollectionView = ImageCollectionView(images: images, frame: frame)
28 |
29 | super.init(frame: frame)
30 |
31 | let closeButton = UIButton()
32 | let closeButtonImage = ImageAssets.closeWhite.image()
33 | closeButton.setImage(closeButtonImage, for: .normal)
34 | addSubview(closeButton)
35 | closeButton.addTarget(self, action: #selector(closeButtonPressed), for: .touchUpInside)
36 | closeButton.constrainTop(to: self)
37 | closeButton.constrainLeft(to: self)
38 | closeButton.constrainSize(CGSize(width: 40, height: 40))
39 |
40 | imageCollectionView.imageCollectionDelegate = self
41 |
42 | addSubview(imageCollectionView)
43 | imageCollectionView.constrainTopToBottom(of: closeButton)
44 | imageCollectionView.constrainEdgesHorizontally(to: self)
45 | imageCollectionView.constrainBottom(to: self, priority: .defaultLow)
46 | }
47 |
48 | required init?(coder aDecoder: NSCoder) {
49 | fatalError("init(coder:) has not been implemented")
50 | }
51 |
52 | @objc private func closeButtonPressed() {
53 | removeFromSuperview()
54 | }
55 | }
56 |
57 | extension ModelCollectionView: ImageCollectionViewDelegate {
58 | func imageCollection(didSelectItemAt index: Int) {
59 | delegate?.modelCollectionView(self, didSelectModel: nodeMakers[index])
60 | removeFromSuperview()
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/Sources/PowerPanels/Panel.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Panel.swift
3 | // ARPlanets
4 | //
5 | // Created by TSD040 on 2018-03-27.
6 | // Copyright © 2018 Pei Sun. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class Panel {
12 | /// A container for the viewToPresent
13 | let view = UIView()
14 |
15 | /// A priority determined by the user.
16 | /// When presenting a panel with a heigher height priority than the other panel, the height constraint is animated.
17 | /// Otherwise, don't animate the height.
18 | var heightPriority: UILayoutPriority!
19 |
20 | /// The left constraint on the view, so the panel can be animated.
21 | var leftConstraint: NSLayoutConstraint!
22 | var heightConstraint: NSLayoutConstraint
23 | weak var middleConstraint: NSLayoutConstraint?
24 |
25 | init(width: CGFloat) {
26 | view.constrainWidth(width)
27 |
28 | // Constrain the height of all presented containers to be a square, with low priority
29 | // Low priority because we want it to be a square if a height cannot be calculated
30 | heightConstraint = view.constrainHeight(width, relation: .equalOrGreater, priority: .defaultLow)
31 |
32 | setupContainer()
33 | }
34 |
35 | /// Constrain a view to the presentingView
36 | ///
37 | /// - Parameters:
38 | /// - viewToPresent: A UIView with an optional height constraint.
39 | /// - heightPriority: Priority of the height constraint. If a
40 | /// - presentingView: The view containing all the panels (i.e. a viewController.view
41 | func constrainToPresenter(viewToPresent: UIView, heightPriority: UILayoutPriority, presentingView: UIView) {
42 | self.heightPriority = heightPriority
43 |
44 | presentingView.addSubview(view)
45 | leftConstraint = view.constrainLeftToRight(of: presentingView)
46 |
47 | view.addSubview(viewToPresent)
48 | // viewToPresent.constrainEdgesHorizontally(to: view, leftInsets: 20, rightInsets: 20)
49 | // viewToPresent.constrainTop(to: view, offset: 10)
50 | // viewToPresent.constrainBottom(to: view, offset: -20, relation: .equalOrGreater, priority: .init(999))
51 |
52 | let insets = UIEdgeInsets(top: 10, left: 20, bottom: 20, right: 20)
53 | viewToPresent.constrainEdges(to: view, insets: insets)
54 | }
55 |
56 | private func setupContainer() {
57 | view.addCornerRadius()
58 | view.backgroundColor = UIColor.white // A flash of color when a new panel is presented
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/Sources/PowerPanels/TransformationPanel/NodeNames.swift:
--------------------------------------------------------------------------------
1 | //
2 | // NodeNames.swift
3 | // ARPowerPanels
4 | //
5 | // Created by TSD040 on 2018-04-09.
6 | // Copyright © 2018 Paige Sun. All rights reserved.
7 | //
8 |
9 | // Default names I give nodes, so that they can be added and removed later.
10 | enum NodeNames: String {
11 | case boundingBox = "Bounding Box"
12 |
13 | case arWorldOrigin = "AR World Origin 🌎"
14 | case sceneViewWorldOrigin = "SceneView World Origin 🌎"
15 | case worldOrigin = "World Origin"
16 |
17 | case arModeCamera = "AR Camera"
18 | case gameModeCamera = "Game Mode Camera"
19 |
20 | case axis = "Axis"
21 | case localVector = "Parent to Child Vector"
22 | }
23 |
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/Sources/PowerPanels/TransformationPanel/PowerPanelCheckmarkInput.swift:
--------------------------------------------------------------------------------
1 | //
2 | // PowerPanelCheckmarkInput.swift
3 | // ARPowerPanels
4 | //
5 | // Created by TSD040 on 2018-03-31.
6 | // Copyright © 2018 Pei Sun. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | protocol PowerPanelCheckmarkInputDelegate: class {
12 | func powerPanelCheckmarkInput(_ checkMarkInput: PowerPanelCheckmarkInput, isCheckedDidChange isChecked: Bool)
13 | }
14 |
15 | class PowerPanelCheckmarkInput: UIStackView {
16 |
17 | var isChecked: Bool {
18 | get {
19 | return button.isSelected
20 | }
21 | set {
22 | button.isSelected = newValue
23 | button.backgroundColor = newValue ? .uiControlColor : .white
24 | }
25 | }
26 |
27 | weak var delegate: PowerPanelCheckmarkInputDelegate?
28 |
29 | private let button = UIButton()
30 |
31 | init(text: String) {
32 | super.init(frame: CGRect.zero)
33 |
34 | self.axis = .horizontal
35 |
36 | let label = UILabel()
37 | label.text = text
38 | label.font = UIFont.inputSliderHeader
39 | label.textColor = .white
40 | addArrangedSubview(label)
41 |
42 | let buttonParent = UIView()
43 | buttonParent.constrainAspectRatio(to: CGSize(width: 1, height: 1))
44 | addArrangedSubview(buttonParent)
45 |
46 | button.isSelected = isChecked
47 | let checkMarkWhiteImage = ImageAssets.checkmarkWhite.image()
48 | button.setImage(checkMarkWhiteImage, for: .selected)
49 | button.setImage(checkMarkWhiteImage, for: .highlighted)
50 | button.setupPowerPanelBorder(tintColor: .uiControlColor)
51 | buttonParent.addSubview(button)
52 | button.constrainEdges(to: buttonParent, insets: UIEdgeInsets(top: 4, left: 4, bottom: 4, right: 4))
53 |
54 | isChecked = false
55 |
56 | button.addTarget(self, action: #selector(buttonPressed), for: .touchUpInside)
57 | }
58 |
59 | required init(coder: NSCoder) {
60 | fatalError("init(coder:) has not been implemented")
61 | }
62 |
63 | @objc private func buttonPressed() {
64 | isChecked = !isChecked
65 | button.isSelected = isChecked
66 | delegate?.powerPanelCheckmarkInput(self, isCheckedDidChange: isChecked)
67 | }
68 | }
69 |
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/Sources/PowerPanels/TransformationPanel/PowerPanelTextField.swift:
--------------------------------------------------------------------------------
1 | //
2 | // PowerPanelTextField.swift
3 | // ARPlanets
4 | //
5 | // Created by TSD040 on 2018-03-30.
6 | // Copyright © 2018 Pei Sun. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | protocol PowerPanelTextFieldDelegate: class {
12 | func powerPanelTextField(didChangeText text: String?)
13 | }
14 |
15 | class PowerPanelTextField: UIView {
16 | var text: String? {
17 | get {
18 | return textField.text
19 | }
20 | set {
21 | textField.text = newValue
22 | }
23 | }
24 |
25 | weak var delegate: PowerPanelTextFieldDelegate?
26 |
27 | private let textField = UITextField()
28 |
29 | init() {
30 | super.init(frame: CGRect.zero)
31 | setupPowerPanelTextField(textField, tintColor: .uiControlColor)
32 | textField.delegate = self
33 | }
34 |
35 | required init?(coder aDecoder: NSCoder) {
36 | fatalError("init(coder:) has not been implemented")
37 | }
38 | }
39 |
40 | extension PowerPanelTextField: UITextFieldDelegate {
41 | func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
42 | let editedString = (text! as NSString).replacingCharacters(in: range, with: string)
43 | delegate?.powerPanelTextField(didChangeText: editedString)
44 | return true
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/Sources/PowerPanels/TransformationPanel/Slider Input Views/SliderVector3View.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SliderVector3View.swift
3 | // ARPlanets
4 | //
5 | // Created by Paige Sun on 2018-03-19.
6 | // Copyright © 2018 Paige Sun. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import SceneKit
11 |
12 | protocol SliderVector3ViewDelegate: class {
13 | func sliderVector3View(_ sliderVector3View: SliderVector3View, didChangeValues vector: SCNVector3)
14 | }
15 |
16 | // A SliderInputsView with 3 values, x, y, and z.
17 | class SliderVector3View: SliderInputsView {
18 |
19 | var vector = SCNVector3() {
20 | didSet {
21 | setValue(vector.x, atIndex: 0)
22 | setValue(vector.y, atIndex: 1)
23 | setValue(vector.z, atIndex: 2)
24 | }
25 | }
26 |
27 | weak var delegate: SliderVector3ViewDelegate? = nil
28 |
29 | init(minValue: Float = -Float.greatestFiniteMagnitude,
30 | maxValue: Float = Float.greatestFiniteMagnitude) {
31 | super.init(axisLabels: ["X:", " Y:", " Z:"], minValue: minValue, maxValue: maxValue)
32 | viewDelegate = self
33 | }
34 |
35 | required init?(coder aDecoder: NSCoder) {
36 | fatalError("init(coder:) has not been implemented")
37 | }
38 | }
39 |
40 | extension SliderVector3View: SliderInputsViewDelegate {
41 | func sliderInputView(didChange value: Float, at index: Int) {
42 | switch index {
43 | case 0:
44 | vector.x = value
45 | case 1:
46 | vector.y = value
47 | default:
48 | vector.z = value
49 | }
50 | delegate?.sliderVector3View(self, didChangeValues: vector)
51 | }
52 | }
53 |
54 |
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/Sources/PowerPanels/TransformationPanel/Slider Input Views/SliderVector4View.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SliderVector4View.swift
3 | // ARPlanets
4 | //
5 | // Created by Paige Sun on 2018-03-23.
6 | // Copyright © 2018 Paige Sun. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import SceneKit
11 |
12 | protocol SliderVector4ViewDelegate: class {
13 | func sliderVector4View(_ sliderVector4View: SliderVector4View, didChangeValues vector: SCNVector4)
14 | }
15 |
16 | // A SliderInputsView with 4 values, x, y, z, and w.
17 | class SliderVector4View: SliderInputsView {
18 |
19 | var vector = SCNVector4() {
20 | didSet {
21 | setValue(vector.x, atIndex: 0)
22 | setValue(vector.y, atIndex: 1)
23 | setValue(vector.z, atIndex: 2)
24 | setValue(vector.w, atIndex: 3)
25 | }
26 | }
27 |
28 | weak var delegate: SliderVector4ViewDelegate? = nil
29 |
30 | init(minValue: Float = -Float.greatestFiniteMagnitude,
31 | maxValue: Float = Float.greatestFiniteMagnitude) {
32 | super.init(axisLabels: ["X:", " Y:", " Z:", " W:"], minValue: minValue, maxValue: maxValue)
33 | viewDelegate = self
34 | }
35 |
36 | required init?(coder aDecoder: NSCoder) {
37 | fatalError("init(coder:) has not been implemented")
38 | }
39 | }
40 |
41 | extension SliderVector4View: SliderInputsViewDelegate {
42 | func sliderInputView(didChange value: Float, at index: Int) {
43 | switch index {
44 | case 0:
45 | vector.x = value
46 | case 1:
47 | vector.y = value
48 | case 2:
49 | vector.z = value
50 | default:
51 | vector.w = value
52 | }
53 | delegate?.sliderVector4View(self, didChangeValues: vector)
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/Contents/Sources/View Controllers/GlobalPlayground.swift:
--------------------------------------------------------------------------------
1 | //
2 | // GlobalPlayground.swift
3 | // ARPowerPanels
4 | //
5 | // Created by TSD040 on 2018-04-01.
6 | // Copyright © 2018 Pei Sun. All rights reserved.
7 | //
8 |
9 | // Global Methods used in the playground
10 |
11 | import UIKit
12 | import ARKit
13 |
14 | func detectedPlane(plane: ARPlaneAnchor) {
15 | //#-copy-source(id1)
16 | //#-editable-code Remember to call the playSound(_:) function here!
17 |
18 | //#-end-editable-code
19 | //#-end-copy-source
20 |
21 | //#-hidden-code
22 |
23 | //#-end-hidden-code
24 | }
25 |
--------------------------------------------------------------------------------
/ARPowerPanels.playgroundbook/version.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | BuildVersion
6 | 9
7 | ProductBuildVersion
8 | 2A128
9 |
10 |
11 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Extensions/2DUtilities/FTD Cells/LabelCell.swift:
--------------------------------------------------------------------------------
1 | import UIKit
2 | import SwiftyTables
3 |
4 | public typealias LabelCell = HostCell
5 |
6 | /// A very simple state for a `UILabel` allowing a quick configuration of its text, font, and color values.
7 | public struct LabelState: StateType {
8 | public let text: String
9 | public let font: UIFont
10 | public let color: UIColor
11 |
12 | public init(text: String, font: UIFont = UIFont.systemFont(ofSize: 17), color: UIColor = .black) {
13 | self.text = text
14 | self.font = font
15 | self.color = color
16 | }
17 |
18 | /// Update the view with the contents of the state.
19 | ///
20 | /// - Parameters:
21 | /// - view: `UIView` that responds to this state.
22 | /// - state: data to update the view with. If `nil` the view is being reused by the tableview.
23 | public static func updateView(_ view: UILabel, state: LabelState?) {
24 | guard let state = state else {
25 | view.text = nil
26 | view.font = UIFont.systemFont(ofSize: 17)
27 | view.textColor = .black
28 | return
29 | }
30 |
31 | view.text = state.text
32 | view.font = state.font
33 | view.textColor = state.color
34 | view.numberOfLines = 0
35 | }
36 | }
37 |
38 | extension LabelState: Equatable {
39 | public static func ==(lhs: LabelState, rhs: LabelState) -> Bool {
40 | return lhs.text == rhs.text && lhs.font == rhs.font && lhs.color == rhs.color
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Extensions/2DUtilities/FTD Helpers/HostCell+StateType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // StateType.swift
3 | // FunctionalTableDataMyDemo
4 | //
5 | // Created by Paige Sun on 2017-12-19.
6 | //
7 |
8 | import Foundation
9 | import SwiftyTables
10 |
11 | protocol StateType {
12 | associatedtype View
13 | static func updateView(_ view: View, state: Self?)
14 | }
15 |
16 | extension HostCell where State: StateType, State.View == View {
17 | init(key: String, style: CellStyle? = nil, actions: CellActions = CellActions(), state: State) {
18 | self.key = key
19 | self.style = style
20 | self.actions = actions
21 | self.state = state
22 | self.cellUpdater = State.updateView
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Extensions/2DUtilities/FTD Original/CollectionView/CollectionCell.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CollectionCell.swift
3 | // FunctionalTableData
4 | //
5 | // Created by Raul Riera on 2017-10-08.
6 | // Copyright © 2017 Raul Riera. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | public class CollectionCell: UICollectionViewCell {
12 | public let view: ViewType
13 | public var prepare: ((_ view: ViewType) -> Void)?
14 |
15 | public override init(frame: CGRect) {
16 | view = ViewType()
17 | super.init(frame: frame)
18 | contentView.addSubviewsForAutolayout(view)
19 | Layout.layoutView(view, inContentView: contentView)
20 | }
21 |
22 | required public init?(coder aDecoder: NSCoder) {
23 | fatalError("init(coder:) has not been implemented")
24 | }
25 |
26 | public override func prepareForReuse() {
27 | super.prepareForReuse()
28 | prepare?(view)
29 | prepare = nil
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Extensions/2DUtilities/FTD Original/CollectionView/CollectionItemConfigType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CollectionItemConfigType.swift
3 | // FunctionalTableData
4 | //
5 | // Created by Raul Riera on 2017-09-16.
6 | // Copyright © 2017 Raul Riera. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | public protocol CollectionItemConfigType {
12 | func register(with collectionView: UICollectionView)
13 | func dequeueCell(from collectionView: UICollectionView, at indexPath: IndexPath) -> UICollectionViewCell
14 | }
15 |
16 | extension CollectionItemConfigType {
17 | public func dequeueCell(from collectionView: UICollectionView, at indexPath: IndexPath) -> UICollectionViewCell {
18 | return collectionView.dequeueReusableCell(withReuseIdentifier: UICollectionViewCell.reuseIdentifier, for: indexPath)
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Extensions/2DUtilities/FTD Original/CollectionView/UICollectionView+Reusable.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UICollectionView+Reusable.swift
3 | // FunctionalTableData
4 | //
5 | // Created by Raul Riera on 2017-09-16.
6 | // Copyright © 2017 Raul Riera. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | public extension UICollectionView {
12 | final func registerReusableCell(_ cellType: T.Type) {
13 | register(cellType.self, forCellWithReuseIdentifier: T.reuseIdentifier)
14 | }
15 |
16 | final func dequeueReusableCell(_ cellType: T.Type = T.self, indexPath: IndexPath) -> T {
17 | guard let cell = self.dequeueReusableCell(withReuseIdentifier: cellType.reuseIdentifier, for: indexPath) as? T else {
18 | fatalError("Failed to dequeue a cell with identifier \(cellType.reuseIdentifier) matching type \(cellType.self)")
19 | }
20 | return cell
21 | }
22 | }
23 |
24 | extension UICollectionViewCell: Reusable { }
25 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Extensions/2DUtilities/FTD Original/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | $(CURRENT_PROJECT_VERSION)
21 | NSPrincipalClass
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Extensions/2DUtilities/FTD Original/Reusable.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Reusable.swift
3 | // FunctionalTableData
4 | //
5 | // Created by Geoffrey Foster on 2016-09-10.
6 | // Copyright © 2016 Shopify. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | /// A type that identifies a dequeueable object. Used by `FunctionalTableData` to increase performance by reusing objects when it needs to, just like `UITableView` and `UICollectionView`.
12 | public protocol Reusable: class {
13 | /// Unique identifier for the object.
14 | static var reuseIdentifier: String { get }
15 | }
16 |
17 | extension Reusable {
18 | public static var reuseIdentifier: String {
19 | return NSStringFromClass(self)
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Extensions/2DUtilities/FTD Original/TableItemLayout.swift:
--------------------------------------------------------------------------------
1 | //
2 | // TableItemLayout.swift
3 | // FunctionalTableData
4 | //
5 | // Created by Raul Riera on 2017-10-08.
6 | // Copyright © 2017 Raul Riera. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | public protocol TableItemLayout {
12 | static func layoutView(_ view: UIView, inContentView contentView: UIView)
13 | }
14 |
15 | // TableItemLayout
16 |
17 | public typealias EdgeBasedTableItemLayout = CombinedLayout
18 | public typealias LayoutMarginsTableItemLayout = CombinedLayout
19 |
20 | public struct ExplicitLayoutMarginsTableItemLayout: TableItemLayout {
21 | public static func layoutView(_ view: UIView, inContentView contentView: UIView) {
22 | contentView.preservesSuperviewLayoutMargins = false
23 | view.constrainToFillView(contentView, respectingLayoutMargins: true)
24 | }
25 | }
26 |
27 | public enum EdgeLayout {
28 | public struct Horizontal: TableItemLayout {
29 | public static func layoutView(_ view: UIView, inContentView contentView: UIView) {
30 | view.constrainToFillViewHorizontally(contentView)
31 | }
32 | }
33 | public struct Vertical: TableItemLayout {
34 | public static func layoutView(_ view: UIView, inContentView contentView: UIView) {
35 | view.constrainToFillViewVertically(contentView)
36 | }
37 | }
38 | }
39 | public enum MarginsLayout {
40 | public struct Horizontal: TableItemLayout {
41 | public static func layoutView(_ view: UIView, inContentView contentView: UIView) {
42 | view.constrainToFillViewHorizontally(contentView, respectingLayoutMargins: true)
43 | }
44 | }
45 | public struct Vertical: TableItemLayout {
46 | public static func layoutView(_ view: UIView, inContentView contentView: UIView) {
47 | view.constrainToFillViewVertically(contentView, respectingLayoutMargins: true)
48 | }
49 | }
50 | }
51 |
52 | public struct CombinedLayout: TableItemLayout {
53 | public static func layoutView(_ view: UIView, inContentView contentView: UIView) {
54 | Horizontal.layoutView(view, inContentView: contentView)
55 | Vertical.layoutView(view, inContentView: contentView)
56 | }
57 | }
58 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Extensions/2DUtilities/FTD Original/TableSectionHeaderFooter.swift:
--------------------------------------------------------------------------------
1 | //
2 | // TableSectionHeaderFooter.swift
3 | // FunctionalTableData
4 | //
5 | // Created by Geoffrey Foster on 2016-09-10.
6 | // Copyright © 2016 Shopify. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | // MARK: Header specific item config
12 |
13 | @available(*, deprecated: 1.0, message: "Use `TableHeaderFooterConfigType` instead.")
14 | public typealias TableHeaderConfigType = TableHeaderFooterConfigType
15 |
16 | public protocol TableHeaderFooterConfigType: TableItemConfigType {
17 | func dequeueHeaderFooter(from tableView: UITableView) -> UITableViewHeaderFooterView?
18 | var height: CGFloat { get }
19 | }
20 |
21 | public protocol TableHeaderFooterStateType {
22 | var insets: UIEdgeInsets { get }
23 | var height: CGFloat { get }
24 | var topSeparatorHidden: Bool { get }
25 | var bottomSeparatorHidden: Bool { get }
26 | }
27 |
28 | public struct TableSectionHeaderFooter: TableHeaderFooterConfigType {
29 | public typealias ViewUpdater = (_ header: TableHeaderFooter, _ state: S) -> Void
30 | public let state: S?
31 | let updateView: ViewUpdater?
32 |
33 | public init(state: S? = nil, updater: ViewUpdater? = nil) {
34 | self.state = state
35 | self.updateView = updater
36 | }
37 |
38 | public func register(with tableView: UITableView) {
39 | tableView.registerReusableHeaderFooterView(TableHeaderFooter.self)
40 | }
41 |
42 | public func dequeueHeaderFooter(from tableView: UITableView) -> UITableViewHeaderFooterView? {
43 | let header = tableView.dequeueReusableHeaderFooterView(TableHeaderFooter.self)
44 | if let updater = updateView, let state = state {
45 | updater(header, state)
46 | }
47 | return header
48 | }
49 |
50 | public var height: CGFloat {
51 | return state?.height ?? 0
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Extensions/2DUtilities/FTD Original/TableView/TableItemConfigType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // TableItemConfigType.swift
3 | // FunctionalTableData
4 | //
5 | // Created by Raul Riera on 2017-10-08.
6 | // Copyright © 2017 Raul Riera. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | public protocol TableItemConfigType {
12 | func register(with tableView: UITableView)
13 | func dequeueCell(from tableView: UITableView, at indexPath: IndexPath) -> UITableViewCell
14 | }
15 |
16 | extension TableItemConfigType {
17 | public func dequeueCell(from tableView: UITableView, at indexPath: IndexPath) -> UITableViewCell {
18 | return tableView.dequeueReusableCell(withIdentifier: UITableViewCell.reuseIdentifier, for: indexPath)
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Extensions/2DUtilities/FTD Original/TableView/UITableView+Reusable.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UITableView+Reusable.swift
3 | // FunctionalTableData
4 | //
5 | // Created by Raul Riera on 2017-10-08.
6 | // Copyright © 2017 Raul Riera. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | public extension UITableView {
12 | // MARK: Headers
13 |
14 | final func registerReusableHeaderFooterView(_ headerType: T.Type) {
15 | register(headerType.self, forHeaderFooterViewReuseIdentifier: T.reuseIdentifier)
16 | }
17 |
18 | final func dequeueReusableHeaderFooterView(_ headerType: T.Type = T.self) -> T {
19 | guard let header = self.dequeueReusableHeaderFooterView(withIdentifier: headerType.reuseIdentifier) as? T else {
20 | fatalError("Failed to dequeue a header/footer with identifier \(headerType.reuseIdentifier) matching type \(headerType.self)")
21 | }
22 | return header
23 | }
24 |
25 | // MARK: Cells
26 |
27 | final func registerReusableCell(_ cellType: T.Type) {
28 | register(cellType.self, forCellReuseIdentifier: T.reuseIdentifier)
29 | }
30 |
31 | final func dequeueReusableCell(_ cellType: T.Type = T.self, indexPath: IndexPath?) -> T {
32 | if let indexPath = indexPath {
33 | guard let cell = self.dequeueReusableCell(withIdentifier: cellType.reuseIdentifier, for: indexPath) as? T else {
34 | fatalError("Failed to dequeue a cell with identifier \(cellType.reuseIdentifier) matching type \(cellType.self)")
35 | }
36 | return cell
37 | } else {
38 | guard let cell = self.dequeueReusableCell(withIdentifier: cellType.reuseIdentifier) as? T else {
39 | fatalError("Failed to dequeue a cell with identifier \(cellType.reuseIdentifier) matching type \(cellType.self)")
40 | }
41 | return cell
42 | }
43 | }
44 | }
45 |
46 | extension UITableViewCell: Reusable { }
47 | extension UITableViewHeaderFooterView: Reusable { }
48 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Extensions/2DUtilities/FTD Original/UIView+Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UIView+Extensions.swift
3 | // FunctionalTableData
4 | //
5 | // Created by Raul Riera on 2017-07-31.
6 | // Copyright © 2017 Shopify. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | extension UIView {
12 | func typedSuperview() -> T? {
13 | var parent = superview
14 |
15 | while parent != nil {
16 | if let view = parent as? T {
17 | return view
18 | } else {
19 | parent = parent?.superview
20 | }
21 | }
22 |
23 | return nil
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Extensions/2DUtilities/NeatConstraints/Constrainable.swift:
--------------------------------------------------------------------------------
1 | //
2 | // MIT License
3 | //
4 | // Copyright (c) 2018 Paige Sun
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 |
24 | import UIKit
25 |
26 | extension UIView: Constrainable {
27 |
28 | @discardableResult
29 | func prepareForAutolayout() -> Self {
30 | translatesAutoresizingMaskIntoConstraints = false
31 | return self
32 | }
33 | }
34 |
35 | extension UILayoutGuide: Constrainable {
36 |
37 | @discardableResult
38 | func prepareForAutolayout() -> Self { return self }
39 | }
40 |
41 | protocol Constrainable {
42 |
43 | var topAnchor: NSLayoutYAxisAnchor { get }
44 | var bottomAnchor: NSLayoutYAxisAnchor { get }
45 | var leftAnchor: NSLayoutXAxisAnchor { get }
46 | var rightAnchor: NSLayoutXAxisAnchor { get }
47 | var leadingAnchor: NSLayoutXAxisAnchor { get }
48 | var trailingAnchor: NSLayoutXAxisAnchor { get }
49 |
50 | var centerXAnchor: NSLayoutXAxisAnchor { get }
51 | var centerYAnchor: NSLayoutYAxisAnchor { get }
52 |
53 | var widthAnchor: NSLayoutDimension { get }
54 | var heightAnchor: NSLayoutDimension { get }
55 |
56 | @discardableResult
57 | func prepareForAutolayout() -> Self
58 | }
59 |
60 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Extensions/2DUtilities/NeatConstraints/Constraints+Activation+Priority.swift:
--------------------------------------------------------------------------------
1 | //
2 | // MIT License
3 | //
4 | // Copyright (c) 2018 Paige Sun
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 |
24 | import UIKit
25 |
26 | extension Sequence where Element == NSLayoutConstraint {
27 |
28 | func activate() {
29 | if let constraints = self as? [NSLayoutConstraint] {
30 | NSLayoutConstraint.activate(constraints)
31 | }
32 | }
33 |
34 | func deActivate() {
35 | if let constraints = self as? [NSLayoutConstraint] {
36 | NSLayoutConstraint.deactivate(constraints)
37 | }
38 | }
39 | }
40 |
41 | extension NSLayoutConstraint {
42 |
43 | func with(_ p: UILayoutPriority) -> Self {
44 | priority = p
45 | return self
46 | }
47 |
48 | func set(active: Bool) -> Self {
49 | isActive = active
50 | return self
51 | }
52 | }
53 |
54 | extension UIView {
55 |
56 | func setHugging(_ priority: UILayoutPriority, for axis: NSLayoutConstraint.Axis) {
57 | setContentHuggingPriority(priority, for: axis)
58 | }
59 |
60 | func setCompressionResistance(_ priority: UILayoutPriority, for axis: NSLayoutConstraint.Axis) {
61 | setContentCompressionResistancePriority(priority, for: axis)
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Extensions/2DUtilities/NeatConstraints/NibView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // MIT License
3 | //
4 | // Copyright (c) 2018 Paige Sun
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 |
24 | import UIKit
25 |
26 | protocol NibView {}
27 |
28 | extension NibView where Self: UIView {
29 | static func instanceFromNib() -> Self? {
30 | let nibName = String(describing: self)
31 | let bundle = Bundle(for: ModelCollectionView.self)
32 | return bundle.loadNibNamed(nibName, owner: self, options: nil)?.first as? Self
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Extensions/2DUtilities/PowerPanelExtensions/UIColor+Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UIColor+Extensions.swift
3 | // ARPlanets
4 | //
5 | // Created by TSD040 on 2018-03-24.
6 | // Copyright © 2018 Pei Sun. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | extension UIColor {
12 | static var xAxisColor: UIColor {
13 | return #colorLiteral(red: 0.9098039269, green: 0.2054645958, blue: 0.4377822972, alpha: 1)
14 | }
15 |
16 | static var yAxisColor: UIColor {
17 | return #colorLiteral(red: 0.506713325, green: 0.8235294223, blue: 0.195811117, alpha: 1)
18 | }
19 |
20 | static var zAxisColor: UIColor {
21 | return #colorLiteral(red: 0.09368573094, green: 0.5884961087, blue: 0.9686274529, alpha: 1)
22 | }
23 |
24 | static var wAxisColor: UIColor {
25 | return #colorLiteral(red: 0.9568627477, green: 0.8079159167, blue: 0.2590701966, alpha: 1)
26 | }
27 |
28 | static var uiControlColor: UIColor {
29 | return #colorLiteral(red: 0.3789054537, green: 1, blue: 0.9100258617, alpha: 1)
30 | }
31 |
32 | static var panelBackgroundColor: UIColor {
33 | return #colorLiteral(red: 0, green: 0.1417405471, blue: 0.2871974469, alpha: 0.4654668328)
34 | }
35 | }
36 |
37 | public extension UIColor {
38 | public static func randomColor() -> UIColor {
39 | let hue = CGFloat(arc4random() % 100) / 100
40 | let saturation = CGFloat(arc4random() % 100) / 100
41 | let brightness = CGFloat(arc4random() % 100) / 100
42 |
43 | return UIColor(hue: hue, saturation: saturation, brightness: brightness, alpha: 1.0)
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Extensions/2DUtilities/PowerPanelExtensions/UIView+BorderedInputBoxes.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UIView+BorderedInputBoxes.swift
3 | // ARPowerPanels
4 | //
5 | // Created by TSD040 on 2018-03-31.
6 | // Copyright © 2018 Pei Sun. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | extension UIView {
12 | static var cornerRadius: CGFloat = 20.0
13 |
14 | func addCornerRadius() {
15 | self.layer.cornerRadius = UIView.cornerRadius
16 | self.layer.masksToBounds = true
17 | }
18 |
19 | func setupPowerPanelTextField(_ textField: UITextField, tintColor: UIColor) {
20 | setupPowerPanelBorder(tintColor: tintColor)
21 |
22 | textField.tintColor = tintColor
23 | textField.font = UIFont.inputSlider
24 | addSubview(textField)
25 | textField.constrainEdges(to: self, insets: UIEdgeInsets(top: 6, left: 6, bottom: 6, right: 6))
26 | }
27 |
28 | func setupPowerPanelBorder(tintColor: UIColor) {
29 | backgroundColor = .white
30 | layer.borderColor = tintColor.cgColor
31 | layer.borderWidth = 2
32 | layer.cornerRadius = 8
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Extensions/2DUtilities/UICollection+Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UICollection+Extensions.swift
3 | // ARPlanets
4 | //
5 | // Created by TSD040 on 2018-03-25.
6 | // Copyright © 2018 Pei Sun. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | protocol DequeueableCollectionViewCell {
12 | associatedtype CellType
13 | static func register(with collectionView: UICollectionView)
14 | static func dequeueCell(from collectionView: UICollectionView, at indexPath: IndexPath) -> CellType
15 | }
16 |
17 | extension DequeueableCollectionViewCell where Self: UICollectionViewCell {
18 | static func register(with collectionView: UICollectionView) {
19 | collectionView.register(Self.self, forCellWithReuseIdentifier: Self.reuseId())
20 | }
21 |
22 | static func dequeueCell(from collectionView: UICollectionView, at indexPath: IndexPath) -> Self {
23 | return collectionView.dequeueReusableCell(withReuseIdentifier: Self.reuseId(), for: indexPath) as! Self
24 | }
25 |
26 | private static func reuseId() -> String {
27 | return String(describing: self)
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Extensions/3DUtilities/GlowEffect/SCNScene+Glow.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SCNScene+Glow.swift
3 | // ARPlanets
4 | //
5 | // Created by TSD040 on 2018-03-30.
6 | // Copyright © 2018 Pei Sun. All rights reserved.
7 | //
8 |
9 | import SceneKit
10 |
11 | struct GlowNodes {
12 | static let glowMaterial: SCNMaterial = {
13 | let mat = SCNMaterial()
14 | mat.emission.contents = UIColor.red.withAlphaComponent(0.3)
15 | mat.name = "Glow Material"
16 | return mat
17 | }()
18 | }
19 |
20 | extension SCNNode {
21 | func setGlow(_ shouldGlow: Bool) {
22 | func setGlowMaterial(on node: SCNNode) -> Bool {
23 | if shouldGlow {
24 | if let allMaterials = node.geometry?.materials {
25 | if !allMaterials.contains(GlowNodes.glowMaterial) {
26 | node.geometry?.materials = [GlowNodes.glowMaterial] + allMaterials
27 | return true
28 | }
29 | }
30 | } else {
31 | if let glowindex = node.geometry?.materials.index(of: GlowNodes.glowMaterial) {
32 | node.geometry?.materials.remove(at: glowindex)
33 | return true
34 | }
35 | }
36 | return false
37 | }
38 |
39 | if name == TransformationType.boundingBox.displayName {
40 | return
41 | }
42 |
43 | if !setGlowMaterial(on: self) {
44 | for child in childNodes {
45 | child.setGlow(shouldGlow)
46 | }
47 | }
48 |
49 | // For metal shader
50 | // categoryBitMask = shouldGlow ? 2 : 1
51 | // enumerateHierarchy({ (node, _) in
52 | // node.categoryBitMask = shouldGlow ? 2 : 1
53 | // })
54 | }
55 | }
56 |
57 | // Initialize Metal Shader
58 | //extension SCNView {
59 | // public func setupGlowTechnique() {
60 | // let bundle = Bundle(for: ModelCollectionView.self)
61 | // if let path = bundle.path(forResource: "NodeTechnique", ofType: "plist") {
62 | // if let dict = NSDictionary(contentsOfFile: path) {
63 | // let dict2 = dict as! [String : AnyObject]
64 | // let technique = SCNTechnique(dictionary:dict2)
65 | // self.technique = technique
66 | // }
67 | // }
68 | // }
69 | //}
70 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Extensions/Font+Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Font+Extensions.swift
3 | // ARPlanets
4 | //
5 | // Created by Paige Sun on 2018-03-23.
6 | // Copyright © 2018 Paige Sun. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | extension UIFont {
12 | static var inputSlider = UIFont.boldSystemFont(ofSize: 14)
13 | static var inputSliderHeader = UIFont.boldSystemFont(ofSize: 16)
14 | static var inputSliderAxisLabel = UIFont.boldSystemFont(ofSize: 18)
15 | static var gameModelLabel = UIFont.boldSystemFont(ofSize: 16)
16 | }
17 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | $(CURRENT_PROJECT_VERSION)
21 | NSPrincipalClass
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/PowerPanels.h:
--------------------------------------------------------------------------------
1 | //
2 | // ARPowerPanels.h
3 | // ARPowerPanels
4 | //
5 | // Created by TSD040 on 2018-04-01.
6 | // Copyright © 2018 Paige Sun. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | //! Project version number for ARPowerPanels.
12 | FOUNDATION_EXPORT double PowerPanelsVersionNumber;
13 |
14 | //! Project version string for ARPowerPanels.
15 | FOUNDATION_EXPORT const unsigned char PowerPanelsVersionString[];
16 |
17 | // In this header, you should import all the public headers of your framework using statements like #import
18 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/PowerPanels/Left Menu/MenuItem.swift:
--------------------------------------------------------------------------------
1 | //
2 | // MenuItem.swift
3 | // ARPlanets
4 | //
5 | // Created by TSD040 on 2018-03-27.
6 | // Copyright © 2018 Pei Sun. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | struct MenuItem {
12 | let stackItem: MenuStackItem // For the MenuStack on the left with menu buttons
13 | let panelItem: PanelItem
14 |
15 | init(name: String, panelItem: PanelItem) {
16 | self.stackItem = MenuStackItem(name: name)
17 | self.panelItem = panelItem
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/PowerPanels/Left Menu/MenuStackView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // MenuStack.swift
3 | // RoundedButtonMenus
4 | //
5 | // Created by TSD040 on 2018-03-26.
6 | // Copyright © 2018 Paige Sun. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class MenuStackItem {
12 | let name: String
13 | var isSelected: Bool = false
14 |
15 | init(name: String) {
16 | self.name = name
17 | }
18 | }
19 |
20 | protocol MenuStackDelegate: class {
21 | func menuStack(_ menuStack: MenuStack, didSelectAtIndex index: Int)
22 | }
23 |
24 | class MenuStack: UIScrollView {
25 |
26 | weak var menuStackDelegate: MenuStackDelegate?
27 |
28 | private let stackView = UIStackView()
29 |
30 | init(axis: NSLayoutConstraint.Axis) {
31 | super.init(frame: CGRect.zero)
32 | showsHorizontalScrollIndicator = false
33 | showsVerticalScrollIndicator = false
34 | stackView.spacing = 15
35 | stackView.axis = axis
36 | self.addSubview(stackView)
37 | stackView.constrainEdges(to: self)
38 | }
39 |
40 | required init?(coder aDecoder: NSCoder) {
41 | fatalError("init(coder:) has not been implemented")
42 | }
43 |
44 | func configure(menuItems: [MenuStackItem]) {
45 | for arrangeSubview in stackView.arrangedSubviews {
46 | arrangeSubview.removeFromSuperview()
47 | }
48 |
49 | for (index, menuItem) in menuItems.enumerated() {
50 | let button = RoundedButton()
51 | button.tag = index
52 | button.setTitle(menuItem.name)
53 | button.isSelected = menuItem.isSelected
54 | button.delegate = self
55 | stackView.addArrangedSubview(button)
56 | }
57 | }
58 | }
59 |
60 | extension MenuStack: RoundedButtonDelegate {
61 | func roundedButton(didTap button: RoundedButton) {
62 | menuStackDelegate?.menuStack(self, didSelectAtIndex: button.tag)
63 | }
64 | }
65 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/PowerPanels/ModelCollection/ImageCollectionCell.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ImageCollectionCell.swift
3 | // ARPowerPanels
4 | //
5 | // Created by TSD040 on 2018-04-01.
6 | // Copyright © 2018 Pei Sun. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class ImageCollectionViewCell: UICollectionViewCell {
12 |
13 | let imageView = UIImageView()
14 |
15 | override init(frame: CGRect) {
16 | super.init(frame: frame)
17 | addCornerRadius()
18 |
19 | addSubview(imageView)
20 | imageView.contentMode = .scaleAspectFill
21 | imageView.constrainEdgesHorizontally(to: self)
22 | imageView.constrainTop(to: self)
23 | imageView.constrainBottom(to: self, priority: .defaultHigh)
24 | }
25 |
26 | required init?(coder aDecoder: NSCoder) {
27 | fatalError("init(coder:) has not been implemented")
28 | }
29 |
30 | func config(image: UIImage?) {
31 | imageView.image = image
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/PowerPanels/ModelCollection/ModelCollectionView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ModelCollectionView.swift
3 | // ARPowerPanels
4 | //
5 | // Created by TSD040 on 2018-04-01.
6 | // Copyright © 2018 Pei Sun. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | protocol ModelCollectionViewDelegate: class {
12 | func modelCollectionView(_ modelCollectionView: ModelCollectionView, didSelectModel nodeMaker: NodeCreatorType)
13 | }
14 |
15 | class ModelCollectionView: UIView {
16 |
17 | weak var delegate: ModelCollectionViewDelegate?
18 |
19 | private let imageCollectionView: ImageCollectionView
20 |
21 | private let nodeMakers: [NodeCreatorType]
22 |
23 | init(frame: CGRect, nodeMakers: [NodeCreatorType]) {
24 | self.nodeMakers = nodeMakers
25 |
26 | let images = nodeMakers.map { $0.menuImage }
27 | imageCollectionView = ImageCollectionView(images: images, frame: frame)
28 |
29 | super.init(frame: frame)
30 |
31 | let closeButton = UIButton()
32 | let closeButtonImage = ImageAssets.closeWhite.image()
33 | closeButton.setImage(closeButtonImage, for: .normal)
34 | addSubview(closeButton)
35 | closeButton.addTarget(self, action: #selector(closeButtonPressed), for: .touchUpInside)
36 | closeButton.constrainTop(to: self)
37 | closeButton.constrainLeft(to: self)
38 | closeButton.constrainSize(CGSize(width: 40, height: 40))
39 |
40 | imageCollectionView.imageCollectionDelegate = self
41 |
42 | addSubview(imageCollectionView)
43 | imageCollectionView.constrainTopToBottom(of: closeButton)
44 | imageCollectionView.constrainEdgesHorizontally(to: self)
45 | imageCollectionView.constrainBottom(to: self, priority: .defaultLow)
46 | }
47 |
48 | required init?(coder aDecoder: NSCoder) {
49 | fatalError("init(coder:) has not been implemented")
50 | }
51 |
52 | @objc private func closeButtonPressed() {
53 | removeFromSuperview()
54 | }
55 | }
56 |
57 | extension ModelCollectionView: ImageCollectionViewDelegate {
58 | func imageCollection(didSelectItemAt index: Int) {
59 | delegate?.modelCollectionView(self, didSelectModel: nodeMakers[index])
60 | removeFromSuperview()
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/PowerPanels/Panel.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Panel.swift
3 | // ARPlanets
4 | //
5 | // Created by TSD040 on 2018-03-27.
6 | // Copyright © 2018 Pei Sun. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class Panel {
12 | /// A container for the viewToPresent
13 | let view = UIView()
14 |
15 | /// A priority determined by the user.
16 | /// When presenting a panel with a heigher height priority than the other panel, the height constraint is animated.
17 | /// Otherwise, don't animate the height.
18 | var heightPriority: UILayoutPriority!
19 |
20 | /// The left constraint on the view, so the panel can be animated.
21 | var leftConstraint: NSLayoutConstraint!
22 | var heightConstraint: NSLayoutConstraint
23 | weak var middleConstraint: NSLayoutConstraint?
24 |
25 | init(width: CGFloat) {
26 | view.constrainWidth(width)
27 |
28 | // Constrain the height of all presented containers to be a square, with low priority
29 | // Low priority because we want it to be a square if a height cannot be calculated
30 | heightConstraint = view.constrainHeight(width, relation: .equalOrGreater, priority: .defaultLow)
31 |
32 | setupContainer()
33 | }
34 |
35 | /// Constrain a view to the presentingView
36 | ///
37 | /// - Parameters:
38 | /// - viewToPresent: A UIView with an optional height constraint.
39 | /// - heightPriority: Priority of the height constraint. If a
40 | /// - presentingView: The view containing all the panels (i.e. a viewController.view
41 | func constrainToPresenter(viewToPresent: UIView, heightPriority: UILayoutPriority, presentingView: UIView) {
42 | self.heightPriority = heightPriority
43 |
44 | presentingView.addSubview(view)
45 | leftConstraint = view.constrainLeftToRight(of: presentingView)
46 |
47 | view.addSubview(viewToPresent)
48 | // viewToPresent.constrainEdgesHorizontally(to: view, leftInsets: 20, rightInsets: 20)
49 | // viewToPresent.constrainTop(to: view, offset: 10)
50 | // viewToPresent.constrainBottom(to: view, offset: -20, relation: .equalOrGreater, priority: .init(999))
51 |
52 | let insets = UIEdgeInsets(top: 10, left: 20, bottom: 20, right: 20)
53 | viewToPresent.constrainEdges(to: view, insets: insets)
54 | }
55 |
56 | private func setupContainer() {
57 | view.addCornerRadius()
58 | view.backgroundColor = UIColor.white // A flash of color when a new panel is presented
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/PowerPanels/TransformationPanel/NodeNames.swift:
--------------------------------------------------------------------------------
1 | //
2 | // NodeNames.swift
3 | // ARPowerPanels
4 | //
5 | // Created by TSD040 on 2018-04-09.
6 | // Copyright © 2018 Paige Sun. All rights reserved.
7 | //
8 |
9 | // Default names I give nodes, so that they can be added and removed later.
10 | enum NodeNames: String {
11 | case boundingBox = "Bounding Box"
12 |
13 | case sceneViewWorldOrigin = "SceneView World Origin 🌎"
14 | case worldOrigin = "World Origin"
15 |
16 | case arModeCamera = "AR Camera"
17 | case gameModeCamera = "Game Mode Camera"
18 |
19 | case axis = "Axis"
20 | case localVector = "Parent to Child Vector"
21 | }
22 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/PowerPanels/TransformationPanel/PowerPanelCheckmarkInput.swift:
--------------------------------------------------------------------------------
1 | //
2 | // PowerPanelCheckmarkInput.swift
3 | // ARPowerPanels
4 | //
5 | // Created by TSD040 on 2018-03-31.
6 | // Copyright © 2018 Pei Sun. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | protocol PowerPanelCheckmarkInputDelegate: class {
12 | func powerPanelCheckmarkInput(_ checkMarkInput: PowerPanelCheckmarkInput, isCheckedDidChange isChecked: Bool)
13 | }
14 |
15 | class PowerPanelCheckmarkInput: UIStackView {
16 |
17 | var isChecked: Bool {
18 | get {
19 | return button.isSelected
20 | }
21 | set {
22 | button.isSelected = newValue
23 | button.backgroundColor = newValue ? .uiControlColor : .white
24 | }
25 | }
26 |
27 | weak var delegate: PowerPanelCheckmarkInputDelegate?
28 |
29 | private let button = UIButton()
30 |
31 | init(text: String) {
32 | super.init(frame: CGRect.zero)
33 |
34 | self.axis = .horizontal
35 |
36 | let label = UILabel()
37 | label.text = text
38 | label.font = UIFont.inputSliderHeader
39 | label.textColor = .white
40 | addArrangedSubview(label)
41 |
42 | let buttonParent = UIView()
43 | buttonParent.constrainAspectRatio(to: CGSize(width: 1, height: 1))
44 | addArrangedSubview(buttonParent)
45 |
46 | button.isSelected = isChecked
47 | let checkMarkWhiteImage = ImageAssets.checkmarkWhite.image()
48 | button.setImage(checkMarkWhiteImage, for: .selected)
49 | button.setImage(checkMarkWhiteImage, for: .highlighted)
50 | button.setupPowerPanelBorder(tintColor: .uiControlColor)
51 | buttonParent.addSubview(button)
52 | button.constrainEdges(to: buttonParent, insets: UIEdgeInsets(top: 4, left: 4, bottom: 4, right: 4))
53 |
54 | isChecked = false
55 |
56 | button.addTarget(self, action: #selector(buttonPressed), for: .touchUpInside)
57 | }
58 |
59 | required init(coder: NSCoder) {
60 | fatalError("init(coder:) has not been implemented")
61 | }
62 |
63 | @objc private func buttonPressed() {
64 | isChecked = !isChecked
65 | button.isSelected = isChecked
66 | delegate?.powerPanelCheckmarkInput(self, isCheckedDidChange: isChecked)
67 | }
68 | }
69 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/PowerPanels/TransformationPanel/PowerPanelTextField.swift:
--------------------------------------------------------------------------------
1 | //
2 | // PowerPanelTextField.swift
3 | // ARPlanets
4 | //
5 | // Created by TSD040 on 2018-03-30.
6 | // Copyright © 2018 Pei Sun. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | protocol PowerPanelTextFieldDelegate: class {
12 | func powerPanelTextField(didChangeText text: String?)
13 | }
14 |
15 | class PowerPanelTextField: UIView {
16 | var text: String? {
17 | get {
18 | return textField.text
19 | }
20 | set {
21 | textField.text = newValue
22 | }
23 | }
24 |
25 | weak var delegate: PowerPanelTextFieldDelegate?
26 |
27 | private let textField = UITextField()
28 |
29 | init() {
30 | super.init(frame: CGRect.zero)
31 | setupPowerPanelTextField(textField, tintColor: .uiControlColor)
32 | textField.delegate = self
33 | }
34 |
35 | required init?(coder aDecoder: NSCoder) {
36 | fatalError("init(coder:) has not been implemented")
37 | }
38 | }
39 |
40 | extension PowerPanelTextField: UITextFieldDelegate {
41 | func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
42 | let editedString = (text! as NSString).replacingCharacters(in: range, with: string)
43 | delegate?.powerPanelTextField(didChangeText: editedString)
44 | return true
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/PowerPanels/TransformationPanel/Slider Input Views/SliderVector3View.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SliderVector3View.swift
3 | // ARPlanets
4 | //
5 | // Created by Paige Sun on 2018-03-19.
6 | // Copyright © 2018 Paige Sun. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import SceneKit
11 |
12 | protocol SliderVector3ViewDelegate: class {
13 | func sliderVector3View(_ sliderVector3View: SliderVector3View, didChangeValues vector: SCNVector3)
14 | }
15 |
16 | // A SliderInputsView with 3 values, x, y, and z.
17 | class SliderVector3View: SliderInputsView {
18 |
19 | var vector = SCNVector3() {
20 | didSet {
21 | setValue(vector.x, atIndex: 0)
22 | setValue(vector.y, atIndex: 1)
23 | setValue(vector.z, atIndex: 2)
24 | }
25 | }
26 |
27 | weak var delegate: SliderVector3ViewDelegate? = nil
28 |
29 | init(minValue: Float = -Float.greatestFiniteMagnitude,
30 | maxValue: Float = Float.greatestFiniteMagnitude) {
31 | super.init(axisLabels: ["X:", " Y:", " Z:"], minValue: minValue, maxValue: maxValue)
32 | viewDelegate = self
33 | }
34 |
35 | required init?(coder aDecoder: NSCoder) {
36 | fatalError("init(coder:) has not been implemented")
37 | }
38 | }
39 |
40 | extension SliderVector3View: SliderInputsViewDelegate {
41 | func sliderInputView(didChange value: Float, at index: Int) {
42 | switch index {
43 | case 0:
44 | vector.x = value
45 | case 1:
46 | vector.y = value
47 | default:
48 | vector.z = value
49 | }
50 | delegate?.sliderVector3View(self, didChangeValues: vector)
51 | }
52 | }
53 |
54 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/PowerPanels/TransformationPanel/Slider Input Views/SliderVector4View.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SliderVector4View.swift
3 | // ARPlanets
4 | //
5 | // Created by Paige Sun on 2018-03-23.
6 | // Copyright © 2018 Paige Sun. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import SceneKit
11 |
12 | protocol SliderVector4ViewDelegate: class {
13 | func sliderVector4View(_ sliderVector4View: SliderVector4View, didChangeValues vector: SCNVector4)
14 | }
15 |
16 | // A SliderInputsView with 4 values, x, y, z, and w.
17 | class SliderVector4View: SliderInputsView {
18 |
19 | var vector = SCNVector4() {
20 | didSet {
21 | setValue(vector.x, atIndex: 0)
22 | setValue(vector.y, atIndex: 1)
23 | setValue(vector.z, atIndex: 2)
24 | setValue(vector.w, atIndex: 3)
25 | }
26 | }
27 |
28 | weak var delegate: SliderVector4ViewDelegate? = nil
29 |
30 | init(minValue: Float = -Float.greatestFiniteMagnitude,
31 | maxValue: Float = Float.greatestFiniteMagnitude) {
32 | super.init(axisLabels: ["X:", " Y:", " Z:", " W:"], minValue: minValue, maxValue: maxValue)
33 | viewDelegate = self
34 | }
35 |
36 | required init?(coder aDecoder: NSCoder) {
37 | fatalError("init(coder:) has not been implemented")
38 | }
39 | }
40 |
41 | extension SliderVector4View: SliderInputsViewDelegate {
42 | func sliderInputView(didChange value: Float, at index: Int) {
43 | switch index {
44 | case 0:
45 | vector.x = value
46 | case 1:
47 | vector.y = value
48 | case 2:
49 | vector.z = value
50 | default:
51 | vector.w = value
52 | }
53 | delegate?.sliderVector4View(self, didChangeValues: vector)
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Arrow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Arrow.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Barrel_Clo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Barrel_Clo.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Barrel_Open.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Barrel_Open.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Box.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Box.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Bullion.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Bullion.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Chest_Clos.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Chest_Clos.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Chest_Open.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Chest_Open.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Coin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Coin.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Crown.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Crown.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Crystal_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Crystal_1.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Crystal_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Crystal_2.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Crystal_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Crystal_3.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Crystal_4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Crystal_4.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Emeraid.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Emeraid.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Exlir_Of0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Exlir_Of0.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Exlir_Of_.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Exlir_Of_.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Key.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Key.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Pick.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Pick.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Rocks_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Rocks_2.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Rocks_And.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Rocks_And.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Rocks_And0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Rocks_And0.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Ruby.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Ruby.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Shield.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Shield.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Skull.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Skull.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Stone_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Stone_1.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Stone_10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Stone_10.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Stone_11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Stone_11.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Stone_12.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Stone_12.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Stone_13.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Stone_13.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Stone_14.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Stone_14.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Stone_15.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Stone_15.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Stone_16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Stone_16.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Stone_17.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Stone_17.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Stone_18.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Stone_18.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Stone_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Stone_3.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Stone_4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Stone_4.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Stone_5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Stone_5.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Stone_6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Stone_6.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Stone_7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Stone_7.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Stone_8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Stone_8.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Sword.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Sword.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Tree.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesAdventure/Tree.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesMenu/checkmarkWhite.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesMenu/checkmarkWhite.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesMenu/closeWhite.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesMenu/closeWhite.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesMenu/menuFox.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesMenu/menuFox.jpeg
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesMenu/menuLowPolyTree.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesMenu/menuLowPolyTree.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesMenu/menuShip.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesMenu/menuShip.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesMenu/menuWolf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesMenu/menuWolf.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesShapes/shapeBox.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesShapes/shapeBox.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesShapes/shapeCapsule.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesShapes/shapeCapsule.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesShapes/shapeCone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesShapes/shapeCone.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesShapes/shapeCylinder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesShapes/shapeCylinder.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesShapes/shapePlane.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesShapes/shapePlane.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesShapes/shapePyramid.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesShapes/shapePyramid.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesShapes/shapeSphere.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesShapes/shapeSphere.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesShapes/shapeTorus.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesShapes/shapeTorus.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesShapes/shapeTube.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/ForPlaygroundOnly/imagesShapes/shapeTube.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/art.scnassets/camera.scn:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/art.scnassets/camera.scn
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/art.scnassets/fox/jump_dust.scn:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/art.scnassets/fox/jump_dust.scn
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/art.scnassets/fox/max.scn:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/art.scnassets/fox/max.scn
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/art.scnassets/fox/max_AO.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/art.scnassets/fox/max_AO.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/art.scnassets/fox/max_diffuse.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/art.scnassets/fox/max_diffuse.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/art.scnassets/fox/max_diffuseB.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/art.scnassets/fox/max_diffuseB.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/art.scnassets/fox/max_diffuseC.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/art.scnassets/fox/max_diffuseC.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/art.scnassets/fox/max_diffuseD.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/art.scnassets/fox/max_diffuseD.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/art.scnassets/fox/max_idle.scn:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/art.scnassets/fox/max_idle.scn
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/art.scnassets/fox/max_jump.scn:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/art.scnassets/fox/max_jump.scn
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/art.scnassets/fox/max_roughness.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/art.scnassets/fox/max_roughness.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/art.scnassets/fox/max_specular.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/art.scnassets/fox/max_specular.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/art.scnassets/fox/max_spin.scn:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/art.scnassets/fox/max_spin.scn
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/art.scnassets/fox/max_walk.scn:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/art.scnassets/fox/max_walk.scn
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/art.scnassets/fox/smoke.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/art.scnassets/fox/smoke.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/art.scnassets/ship.scn:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/art.scnassets/ship.scn
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/art.scnassets/texture.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/art.scnassets/texture.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/art.scnassets/wolf/textures/Wolf_Body.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/art.scnassets/wolf/textures/Wolf_Body.jpg
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/art.scnassets/wolf/textures/Wolf_Eyes_1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/art.scnassets/wolf/textures/Wolf_Eyes_1.jpg
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/art.scnassets/wolf/textures/Wolf_Eyes_2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/art.scnassets/wolf/textures/Wolf_Eyes_2.jpg
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/Resources/art.scnassets/wolf/textures/Wolf_Fur.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanels/Resources/art.scnassets/wolf/textures/Wolf_Fur.jpg
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanels/View Controllers/GlobalPlayground.swift:
--------------------------------------------------------------------------------
1 | //
2 | // GlobalPlayground.swift
3 | // ARPowerPanels
4 | //
5 | // Created by TSD040 on 2018-04-01.
6 | // Copyright © 2018 Pei Sun. All rights reserved.
7 | //
8 |
9 | // Global Methods used in the playground
10 |
11 | import UIKit
12 | import ARKit
13 |
14 | func detectedPlane(plane: ARPlaneAnchor) {
15 | //#-copy-source(id1)
16 | //#-editable-code Remember to call the playSound(_:) function here!
17 |
18 | //#-end-editable-code
19 | //#-end-copy-source
20 |
21 | //#-hidden-code
22 |
23 | //#-end-hidden-code
24 | }
25 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanelsDemo/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "size" : "20x20",
5 | "idiom" : "iphone",
6 | "filename" : "icon-40.png",
7 | "scale" : "2x"
8 | },
9 | {
10 | "idiom" : "iphone",
11 | "size" : "20x20",
12 | "scale" : "3x"
13 | },
14 | {
15 | "size" : "29x29",
16 | "idiom" : "iphone",
17 | "filename" : "icon-29.png",
18 | "scale" : "1x"
19 | },
20 | {
21 | "size" : "29x29",
22 | "idiom" : "iphone",
23 | "filename" : "icon-29@2x.png",
24 | "scale" : "2x"
25 | },
26 | {
27 | "size" : "29x29",
28 | "idiom" : "iphone",
29 | "filename" : "icon-29@3x.png",
30 | "scale" : "3x"
31 | },
32 | {
33 | "size" : "40x40",
34 | "idiom" : "iphone",
35 | "filename" : "icon-40@2x.png",
36 | "scale" : "2x"
37 | },
38 | {
39 | "size" : "40x40",
40 | "idiom" : "iphone",
41 | "filename" : "icon-40@3x.png",
42 | "scale" : "3x"
43 | },
44 | {
45 | "size" : "60x60",
46 | "idiom" : "iphone",
47 | "filename" : "icon-60@2x.png",
48 | "scale" : "2x"
49 | },
50 | {
51 | "size" : "60x60",
52 | "idiom" : "iphone",
53 | "filename" : "icon-60@3x.png",
54 | "scale" : "3x"
55 | },
56 | {
57 | "idiom" : "ipad",
58 | "size" : "20x20",
59 | "scale" : "1x"
60 | },
61 | {
62 | "idiom" : "ipad",
63 | "size" : "20x20",
64 | "scale" : "2x"
65 | },
66 | {
67 | "idiom" : "ipad",
68 | "size" : "29x29",
69 | "scale" : "1x"
70 | },
71 | {
72 | "idiom" : "ipad",
73 | "size" : "29x29",
74 | "scale" : "2x"
75 | },
76 | {
77 | "idiom" : "ipad",
78 | "size" : "40x40",
79 | "scale" : "1x"
80 | },
81 | {
82 | "idiom" : "ipad",
83 | "size" : "40x40",
84 | "scale" : "2x"
85 | },
86 | {
87 | "size" : "76x76",
88 | "idiom" : "ipad",
89 | "filename" : "icon-76.png",
90 | "scale" : "1x"
91 | },
92 | {
93 | "size" : "76x76",
94 | "idiom" : "ipad",
95 | "filename" : "icon-76@2x.png",
96 | "scale" : "2x"
97 | },
98 | {
99 | "size" : "83.5x83.5",
100 | "idiom" : "ipad",
101 | "filename" : "icon-83.5@2x.png",
102 | "scale" : "2x"
103 | },
104 | {
105 | "idiom" : "ios-marketing",
106 | "size" : "1024x1024",
107 | "scale" : "1x"
108 | }
109 | ],
110 | "info" : {
111 | "version" : 1,
112 | "author" : "xcode"
113 | }
114 | }
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanelsDemo/Assets.xcassets/AppIcon.appiconset/icon-29.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanelsDemo/Assets.xcassets/AppIcon.appiconset/icon-29.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanelsDemo/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanelsDemo/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanelsDemo/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanelsDemo/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanelsDemo/Assets.xcassets/AppIcon.appiconset/icon-40.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanelsDemo/Assets.xcassets/AppIcon.appiconset/icon-40.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanelsDemo/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanelsDemo/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanelsDemo/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanelsDemo/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanelsDemo/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanelsDemo/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanelsDemo/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanelsDemo/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanelsDemo/Assets.xcassets/AppIcon.appiconset/icon-76.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanelsDemo/Assets.xcassets/AppIcon.appiconset/icon-76.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanelsDemo/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanelsDemo/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanelsDemo/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/ARPowerPanelsFramework/ARPowerPanelsDemo/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanelsDemo/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanelsDemo/Base.lproj/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanelsDemo/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanelsDemo/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleDisplayName
8 | ARPowerPanels
9 | CFBundleExecutable
10 | $(EXECUTABLE_NAME)
11 | CFBundleIdentifier
12 | $(PRODUCT_BUNDLE_IDENTIFIER)
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | $(PRODUCT_NAME)
17 | CFBundlePackageType
18 | APPL
19 | CFBundleShortVersionString
20 | 1.0
21 | CFBundleVersion
22 | 1
23 | LSRequiresIPhoneOS
24 |
25 | NSCameraUsageDescription
26 | This application will use the camera for Augmented Reality.
27 | UILaunchStoryboardName
28 | LaunchScreen
29 | UIRequiredDeviceCapabilities
30 |
31 | armv7
32 | arkit
33 |
34 | UIRequiresFullScreen
35 |
36 | UIStatusBarHidden
37 |
38 | UISupportedInterfaceOrientations
39 |
40 | UIInterfaceOrientationPortrait
41 | UIInterfaceOrientationLandscapeLeft
42 | UIInterfaceOrientationLandscapeRight
43 |
44 | UISupportedInterfaceOrientations~ipad
45 |
46 | UIInterfaceOrientationLandscapeRight
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/ARPowerPanelsDemo/SceneKitViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SceneKitViewController.swift
3 | // ARPlanets
4 | //
5 | // Created by Paige Sun on 2018-03-18.
6 | // Copyright © 2018 Paige Sun. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import SceneKit
11 | import ARPowerPanels
12 |
13 | class SceneKitViewController: UIViewController {
14 |
15 | var powerPanels: ARPowerPanels
16 |
17 | let scene = SCNScene()
18 |
19 | init() {
20 | powerPanels = ARPowerPanels(scene: scene, panelTypes: [.info, .easyMoves, .sceneGraph])
21 | super.init(nibName: nil, bundle: nil)
22 | }
23 |
24 | required init?(coder aDecoder: NSCoder) {
25 | fatalError("init(coder:) has not been implemented")
26 | }
27 |
28 | override func viewDidLoad() {
29 | super.viewDidLoad()
30 | powerPanels.selectNode(scene.rootNode)
31 | view.addSubview(powerPanels)
32 | powerPanels.constrainEdges(to: view)
33 | }
34 |
35 | override func viewDidAppear(_ animated: Bool) {
36 | super.viewDidAppear(animated)
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/Podfile:
--------------------------------------------------------------------------------
1 | # Uncomment the next line to define a global platform for your project
2 | # platform :ios, '9.0'
3 |
4 | target 'ARPowerPanels' do
5 | # Comment the next line if you're not using Swift and don't want to use dynamic frameworks
6 | use_frameworks!
7 |
8 | # Pods for ARPowerPanels
9 | pod 'SwiftyTables'
10 |
11 | end
12 |
13 | target 'ARPowerPanelsDemo' do
14 | # Comment the next line if you're not using Swift and don't want to use dynamic frameworks
15 | use_frameworks!
16 |
17 | # Pods for ARPowerPanelsDemo
18 |
19 | end
20 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/Podfile.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - SwiftyTables (1.0.0)
3 |
4 | DEPENDENCIES:
5 | - SwiftyTables
6 |
7 | SPEC REPOS:
8 | https://github.com/cocoapods/specs.git:
9 | - SwiftyTables
10 |
11 | SPEC CHECKSUMS:
12 | SwiftyTables: 4e4a70172b26e5383fc859b9d751b7ce59219b57
13 |
14 | PODFILE CHECKSUM: f7507d6f9e67ae288eb535ccf02965b950754de5
15 |
16 | COCOAPODS: 1.5.3
17 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/Pods/Manifest.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - SwiftyTables (1.0.0)
3 |
4 | DEPENDENCIES:
5 | - SwiftyTables
6 |
7 | SPEC REPOS:
8 | https://github.com/cocoapods/specs.git:
9 | - SwiftyTables
10 |
11 | SPEC CHECKSUMS:
12 | SwiftyTables: 4e4a70172b26e5383fc859b9d751b7ce59219b57
13 |
14 | PODFILE CHECKSUM: f7507d6f9e67ae288eb535ccf02965b950754de5
15 |
16 | COCOAPODS: 1.5.3
17 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/Pods/SwiftyTables/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2018 Paige Sun
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/Pods/SwiftyTables/SwiftyTablesProject/SwiftyTables/SwiftDeclarativeTables/FTD Helpers/CarouselCell/CarouselItemCell.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CarouselItemCell.swift
3 | // FunctionalTableDataMyDemo
4 | //
5 | // Created by Pei Sun on 2018-01-09.
6 | // Copyright © 2018 TribalScale. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | public protocol CarouselItemCell where Self: UICollectionViewCell {
12 | associatedtype ItemModel: Equatable
13 | static func sizeForItem(model: ItemModel, in collectionView: UICollectionView) -> CGSize
14 | static func scrollDirection() -> UICollectionViewScrollDirection
15 | func configure(model: ItemModel)
16 | }
17 |
18 | public extension CarouselItemCell {
19 | static func reuseId() -> String {
20 | return String(describing: self)
21 | }
22 | }
23 |
24 | /**
25 | Classes conforming to CarouselItemCells can optionally conform to CarouselItemNibView
26 | if there is a cooresponding Nib with the same name
27 | */
28 | public protocol CarouselItemNibView {}
29 |
30 | public extension CarouselItemNibView {
31 | public static func nibWithClassName() -> UINib {
32 | return UINib(nibName: String(describing: self), bundle: nil)
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/Pods/SwiftyTables/SwiftyTablesProject/SwiftyTables/SwiftDeclarativeTables/FTD Helpers/HostCell+StateType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // StateType.swift
3 | // FunctionalTableDataMyDemo
4 | //
5 | // Created by Paige Sun on 2017-12-19.
6 | //
7 |
8 | import Foundation
9 |
10 | public protocol StateType {
11 | associatedtype View
12 | static func updateView(_ view: View, state: Self?)
13 | }
14 |
15 | public extension HostCell where State: StateType, State.View == View {
16 | public init(key: String, style: CellStyle? = nil, actions: CellActions = CellActions(), state: State) {
17 | self.key = key
18 | self.style = style
19 | self.actions = actions
20 | self.state = state
21 | self.cellUpdater = State.updateView
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/Pods/SwiftyTables/SwiftyTablesProject/SwiftyTables/SwiftDeclarativeTables/FTD Helpers/NibView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // NibView.swift
3 | // FunctionalTableDataMyDemo
4 | //
5 | // Created by Paige Sun on 2017-12-19.
6 | //
7 |
8 | import Foundation
9 |
10 | public protocol NibView: class {}
11 |
12 | public extension NibView {
13 | public static func instanceFromNib() -> Self? {
14 | let nibName = String(describing: self)
15 | guard Bundle.main.path(forResource: nibName, ofType: "nib") != nil else {
16 | fatalError("No nib named \(nibName).xib exist.")
17 | }
18 |
19 | return Bundle.main.loadNibNamed(nibName, owner: self, options: nil)?.first as? Self
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/Pods/SwiftyTables/SwiftyTablesProject/SwiftyTables/SwiftDeclarativeTables/FTD Helpers/UIView+Helpers.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UIView+Extension.swift
3 | // SimpleTable
4 | //
5 | // Created by Paige Sun on 2017-11-28.
6 | // Copyright © 2017 Paige Sun. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | extension UIView {
12 | func pinToSuperView() {
13 | guard let superview = self.superview else {
14 | return
15 | }
16 |
17 | self.translatesAutoresizingMaskIntoConstraints = false
18 |
19 | // if #available(iOS 11.0, *) {
20 | // NSLayoutConstraint.activate([
21 | // self.topAnchor.constraint(equalTo: superview.safeAreaLayoutGuide.topAnchor),
22 | // self.bottomAnchor.constraint(equalTo: superview.safeAreaLayoutGuide.bottomAnchor),
23 | // self.leftAnchor.constraint(equalTo: superview.leftAnchor),
24 | // self.rightAnchor.constraint(equalTo: superview.rightAnchor)
25 | // ])
26 | // } else {
27 | NSLayoutConstraint.activate([
28 | self.topAnchor.constraint(equalTo: superview.topAnchor),
29 | self.bottomAnchor.constraint(equalTo: superview.bottomAnchor),
30 | self.leftAnchor.constraint(equalTo: superview.leftAnchor),
31 | self.rightAnchor.constraint(equalTo: superview.rightAnchor)
32 | ])
33 | // }
34 | }
35 | }
36 |
37 | extension NSLayoutDimension {
38 | func activateConstraint(equalToConstant: CGFloat, priority: Float) -> NSLayoutConstraint {
39 | let constraint = self.constraint(equalToConstant: equalToConstant)
40 | constraint.priority = UILayoutPriority(rawValue: priority)
41 | constraint.isActive = true
42 | return constraint
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/Pods/SwiftyTables/SwiftyTablesProject/SwiftyTables/SwiftDeclarativeTables/FunctionalTableData/CollectionView/CollectionCell.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CollectionCell.swift
3 | // FunctionalTableData
4 | //
5 | // Created by Raul Riera on 2017-10-08.
6 | // Copyright © 2017 Raul Riera. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | public class CollectionCell: UICollectionViewCell {
12 | public let view: ViewType
13 | public var prepare: ((_ view: ViewType) -> Void)?
14 |
15 | public override init(frame: CGRect) {
16 | if let nibView = ViewType.self as? NibView.Type, let instance = nibView.instanceFromNib() {
17 | view = instance as! ViewType
18 | } else {
19 | view = ViewType()
20 | }
21 | super.init(frame: frame)
22 | contentView.addSubviewsForAutolayout(view)
23 | Layout.layoutView(view, inContentView: contentView)
24 | }
25 |
26 | required public init?(coder aDecoder: NSCoder) {
27 | fatalError("init(coder:) has not been implemented")
28 | }
29 |
30 | public override func prepareForReuse() {
31 | super.prepareForReuse()
32 | prepare?(view)
33 | prepare = nil
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/Pods/SwiftyTables/SwiftyTablesProject/SwiftyTables/SwiftDeclarativeTables/FunctionalTableData/CollectionView/CollectionItemConfigType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CollectionItemConfigType.swift
3 | // FunctionalTableData
4 | //
5 | // Created by Raul Riera on 2017-09-16.
6 | // Copyright © 2017 Raul Riera. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | public protocol CollectionItemConfigType {
12 | func register(with collectionView: UICollectionView)
13 | func dequeueCell(from collectionView: UICollectionView, at indexPath: IndexPath) -> UICollectionViewCell
14 | }
15 |
16 | extension CollectionItemConfigType {
17 | public func dequeueCell(from collectionView: UICollectionView, at indexPath: IndexPath) -> UICollectionViewCell {
18 | return collectionView.dequeueReusableCell(withReuseIdentifier: UICollectionViewCell.reuseIdentifier, for: indexPath)
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/Pods/SwiftyTables/SwiftyTablesProject/SwiftyTables/SwiftDeclarativeTables/FunctionalTableData/CollectionView/UICollectionView+Reusable.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UICollectionView+Reusable.swift
3 | // FunctionalTableData
4 | //
5 | // Created by Raul Riera on 2017-09-16.
6 | // Copyright © 2017 Raul Riera. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | public extension UICollectionView {
12 | final func registerReusableCell(_ cellType: T.Type) {
13 | register(cellType.self, forCellWithReuseIdentifier: T.reuseIdentifier)
14 | }
15 |
16 | final func dequeueReusableCell(_ cellType: T.Type = T.self, indexPath: IndexPath) -> T {
17 | guard let cell = self.dequeueReusableCell(withReuseIdentifier: cellType.reuseIdentifier, for: indexPath) as? T else {
18 | fatalError("Failed to dequeue a cell with identifier \(cellType.reuseIdentifier) matching type \(cellType.self)")
19 | }
20 | return cell
21 | }
22 | }
23 |
24 | extension UICollectionViewCell: Reusable { }
25 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/Pods/SwiftyTables/SwiftyTablesProject/SwiftyTables/SwiftDeclarativeTables/FunctionalTableData/ObjCExceptionRethrower.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ObjCExceptionRethrower.swift
3 | // FunctionalTableData
4 | //
5 | // Created by Geoffrey Foster on 2016-07-28.
6 | // Copyright © 2016 Shopify. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | extension NSException {
12 | public static func catchAndRethrow(_ block: () -> Void, failure: (_ exception: NSException) -> Void) {
13 | catchAndRethrowException(block, failure)
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/Pods/SwiftyTables/SwiftyTablesProject/SwiftyTables/SwiftDeclarativeTables/FunctionalTableData/Reusable.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Reusable.swift
3 | // FunctionalTableData
4 | //
5 | // Created by Geoffrey Foster on 2016-09-10.
6 | // Copyright © 2016 Shopify. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | /// A type that identifies a dequeueable object. Used by `FunctionalTableData` to increase performance by reusing objects when it needs to, just like `UITableView` and `UICollectionView`.
12 | public protocol Reusable: class {
13 | /// Unique identifier for the object.
14 | static var reuseIdentifier: String { get }
15 | }
16 |
17 | extension Reusable {
18 | public static var reuseIdentifier: String {
19 | return NSStringFromClass(self)
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/Pods/SwiftyTables/SwiftyTablesProject/SwiftyTables/SwiftDeclarativeTables/FunctionalTableData/TableItemLayout.swift:
--------------------------------------------------------------------------------
1 | //
2 | // TableItemLayout.swift
3 | // FunctionalTableData
4 | //
5 | // Created by Raul Riera on 2017-10-08.
6 | // Copyright © 2017 Raul Riera. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | public protocol TableItemLayout {
12 | static func layoutView(_ view: UIView, inContentView contentView: UIView)
13 | }
14 |
15 | // TableItemLayout
16 |
17 | public typealias EdgeBasedTableItemLayout = CombinedLayout
18 | public typealias LayoutMarginsTableItemLayout = CombinedLayout
19 |
20 | public struct ExplicitLayoutMarginsTableItemLayout: TableItemLayout {
21 | public static func layoutView(_ view: UIView, inContentView contentView: UIView) {
22 | contentView.preservesSuperviewLayoutMargins = false
23 | view.constrainToFillView(contentView, respectingLayoutMargins: true)
24 | }
25 | }
26 |
27 | public enum EdgeLayout {
28 | public struct Horizontal: TableItemLayout {
29 | public static func layoutView(_ view: UIView, inContentView contentView: UIView) {
30 | view.constrainToFillViewHorizontally(contentView)
31 | }
32 | }
33 | public struct Vertical: TableItemLayout {
34 | public static func layoutView(_ view: UIView, inContentView contentView: UIView) {
35 | view.constrainToFillViewVertically(contentView)
36 | }
37 | }
38 | }
39 | public enum MarginsLayout {
40 | public struct Horizontal: TableItemLayout {
41 | public static func layoutView(_ view: UIView, inContentView contentView: UIView) {
42 | view.constrainToFillViewHorizontally(contentView, respectingLayoutMargins: true)
43 | }
44 | }
45 | public struct Vertical: TableItemLayout {
46 | public static func layoutView(_ view: UIView, inContentView contentView: UIView) {
47 | view.constrainToFillViewVertically(contentView, respectingLayoutMargins: true)
48 | }
49 | }
50 | }
51 |
52 | public struct CombinedLayout: TableItemLayout {
53 | public static func layoutView(_ view: UIView, inContentView contentView: UIView) {
54 | Horizontal.layoutView(view, inContentView: contentView)
55 | Vertical.layoutView(view, inContentView: contentView)
56 | }
57 | }
58 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/Pods/SwiftyTables/SwiftyTablesProject/SwiftyTables/SwiftDeclarativeTables/FunctionalTableData/TableSectionHeaderFooter.swift:
--------------------------------------------------------------------------------
1 | //
2 | // TableSectionHeaderFooter.swift
3 | // FunctionalTableData
4 | //
5 | // Created by Geoffrey Foster on 2016-09-10.
6 | // Copyright © 2016 Shopify. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | // MARK: Header specific item config
12 |
13 | @available(*, deprecated: 1.0, message: "Use `TableHeaderFooterConfigType` instead.")
14 | public typealias TableHeaderConfigType = TableHeaderFooterConfigType
15 |
16 | public protocol TableHeaderFooterConfigType: TableItemConfigType {
17 | func dequeueHeaderFooter(from tableView: UITableView) -> UITableViewHeaderFooterView?
18 | var height: CGFloat { get }
19 | }
20 |
21 | public protocol TableHeaderFooterStateType {
22 | var insets: UIEdgeInsets { get }
23 | var height: CGFloat { get }
24 | var topSeparatorHidden: Bool { get }
25 | var bottomSeparatorHidden: Bool { get }
26 | }
27 |
28 | public struct TableSectionHeaderFooter: TableHeaderFooterConfigType {
29 | public typealias ViewUpdater = (_ header: TableHeaderFooter, _ state: S) -> Void
30 | public let state: S?
31 | let updateView: ViewUpdater?
32 |
33 | public init(state: S? = nil, updater: ViewUpdater? = nil) {
34 | self.state = state
35 | self.updateView = updater
36 | }
37 |
38 | public func register(with tableView: UITableView) {
39 | tableView.registerReusableHeaderFooterView(TableHeaderFooter.self)
40 | }
41 |
42 | public func dequeueHeaderFooter(from tableView: UITableView) -> UITableViewHeaderFooterView? {
43 | let header = tableView.dequeueReusableHeaderFooterView(TableHeaderFooter.self)
44 | if let updater = updateView, let state = state {
45 | updater(header, state)
46 | }
47 | return header
48 | }
49 |
50 | public var height: CGFloat {
51 | return state?.height ?? 0
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/Pods/SwiftyTables/SwiftyTablesProject/SwiftyTables/SwiftDeclarativeTables/FunctionalTableData/TableView/TableItemConfigType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // TableItemConfigType.swift
3 | // FunctionalTableData
4 | //
5 | // Created by Raul Riera on 2017-10-08.
6 | // Copyright © 2017 Raul Riera. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | public protocol TableItemConfigType {
12 | func register(with tableView: UITableView)
13 | func dequeueCell(from tableView: UITableView, at indexPath: IndexPath) -> UITableViewCell
14 | }
15 |
16 | extension TableItemConfigType {
17 | public func dequeueCell(from tableView: UITableView, at indexPath: IndexPath) -> UITableViewCell {
18 | return tableView.dequeueReusableCell(withIdentifier: UITableViewCell.reuseIdentifier, for: indexPath)
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/Pods/SwiftyTables/SwiftyTablesProject/SwiftyTables/SwiftDeclarativeTables/FunctionalTableData/TableView/UITableView+Reusable.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UITableView+Reusable.swift
3 | // FunctionalTableData
4 | //
5 | // Created by Raul Riera on 2017-10-08.
6 | // Copyright © 2017 Raul Riera. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | public extension UITableView {
12 | // MARK: Headers
13 |
14 | final func registerReusableHeaderFooterView(_ headerType: T.Type) {
15 | register(headerType.self, forHeaderFooterViewReuseIdentifier: T.reuseIdentifier)
16 | }
17 |
18 | final func dequeueReusableHeaderFooterView(_ headerType: T.Type = T.self) -> T {
19 | guard let header = self.dequeueReusableHeaderFooterView(withIdentifier: headerType.reuseIdentifier) as? T else {
20 | fatalError("Failed to dequeue a header/footer with identifier \(headerType.reuseIdentifier) matching type \(headerType.self)")
21 | }
22 | return header
23 | }
24 |
25 | // MARK: Cells
26 |
27 | final func registerReusableCell(_ cellType: T.Type) {
28 | register(cellType.self, forCellReuseIdentifier: T.reuseIdentifier)
29 | }
30 |
31 | final func dequeueReusableCell(_ cellType: T.Type = T.self, indexPath: IndexPath?) -> T {
32 | if let indexPath = indexPath {
33 | guard let cell = self.dequeueReusableCell(withIdentifier: cellType.reuseIdentifier, for: indexPath) as? T else {
34 | fatalError("Failed to dequeue a cell with identifier \(cellType.reuseIdentifier) matching type \(cellType.self)")
35 | }
36 | return cell
37 | } else {
38 | guard let cell = self.dequeueReusableCell(withIdentifier: cellType.reuseIdentifier) as? T else {
39 | fatalError("Failed to dequeue a cell with identifier \(cellType.reuseIdentifier) matching type \(cellType.self)")
40 | }
41 | return cell
42 | }
43 | }
44 | }
45 |
46 | extension UITableViewCell: Reusable { }
47 | extension UITableViewHeaderFooterView: Reusable { }
48 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/Pods/SwiftyTables/SwiftyTablesProject/SwiftyTables/SwiftDeclarativeTables/FunctionalTableData/UIView+Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UIView+Extensions.swift
3 | // FunctionalTableData
4 | //
5 | // Created by Raul Riera on 2017-07-31.
6 | // Copyright © 2017 Shopify. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | extension UIView {
12 | func typedSuperview() -> T? {
13 | var parent = superview
14 |
15 | while parent != nil {
16 | if let view = parent as? T {
17 | return view
18 | } else {
19 | parent = parent?.superview
20 | }
21 | }
22 |
23 | return nil
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/Pods/SwiftyTables/SwiftyTablesProject/SwiftyTables/SwiftyTables.h:
--------------------------------------------------------------------------------
1 | //
2 | // SwiftyTables.h
3 | // SwiftyTables
4 | //
5 | // Created by TSD064 on 2018-05-01.
6 | // Copyright © 2018 Paige Sun. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | //! Project version number for SwiftyTables.
12 | FOUNDATION_EXPORT double SwiftyTablesVersionNumber;
13 |
14 | //! Project version string for SwiftyTables.
15 | FOUNDATION_EXPORT const unsigned char SwiftyTablesVersionString[];
16 |
17 |
18 | // In this header, you should import all the public headers of your framework using statements like #import
19 | NS_ASSUME_NONNULL_BEGIN
20 |
21 | __attribute__((visibility("hidden")))
22 | static inline void catchAndRethrowException(__attribute__((noescape)) void (^ __nonnull inBlock)(void), __attribute__((noescape)) void (^ __nonnull rethrow)(NSException *)) {
23 | @try {
24 | inBlock();
25 | } @catch (NSException *exception) {
26 | rethrow(exception);
27 | @throw;
28 | }
29 | }
30 |
31 | NS_ASSUME_NONNULL_END
32 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/Pods/Target Support Files/Pods-ARPowerPanels/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | ${EXECUTABLE_NAME}
9 | CFBundleIdentifier
10 | ${PRODUCT_BUNDLE_IDENTIFIER}
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | ${PRODUCT_NAME}
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${CURRENT_PROJECT_VERSION}
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/Pods/Target Support Files/Pods-ARPowerPanels/Pods-ARPowerPanels-acknowledgements.markdown:
--------------------------------------------------------------------------------
1 | # Acknowledgements
2 | This application makes use of the following third party libraries:
3 |
4 | ## SwiftyTables
5 |
6 | MIT License
7 |
8 | Copyright (c) 2018 Paige Sun
9 |
10 | Permission is hereby granted, free of charge, to any person obtaining a copy
11 | of this software and associated documentation files (the "Software"), to deal
12 | in the Software without restriction, including without limitation the rights
13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14 | copies of the Software, and to permit persons to whom the Software is
15 | furnished to do so, subject to the following conditions:
16 |
17 | The above copyright notice and this permission notice shall be included in all
18 | copies or substantial portions of the Software.
19 |
20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26 | SOFTWARE.
27 |
28 | Generated by CocoaPods - https://cocoapods.org
29 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/Pods/Target Support Files/Pods-ARPowerPanels/Pods-ARPowerPanels-acknowledgements.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreferenceSpecifiers
6 |
7 |
8 | FooterText
9 | This application makes use of the following third party libraries:
10 | Title
11 | Acknowledgements
12 | Type
13 | PSGroupSpecifier
14 |
15 |
16 | FooterText
17 | MIT License
18 |
19 | Copyright (c) 2018 Paige Sun
20 |
21 | Permission is hereby granted, free of charge, to any person obtaining a copy
22 | of this software and associated documentation files (the "Software"), to deal
23 | in the Software without restriction, including without limitation the rights
24 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
25 | copies of the Software, and to permit persons to whom the Software is
26 | furnished to do so, subject to the following conditions:
27 |
28 | The above copyright notice and this permission notice shall be included in all
29 | copies or substantial portions of the Software.
30 |
31 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
32 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
33 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
34 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
35 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
36 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
37 | SOFTWARE.
38 |
39 | License
40 | MIT
41 | Title
42 | SwiftyTables
43 | Type
44 | PSGroupSpecifier
45 |
46 |
47 | FooterText
48 | Generated by CocoaPods - https://cocoapods.org
49 | Title
50 |
51 | Type
52 | PSGroupSpecifier
53 |
54 |
55 | StringsTable
56 | Acknowledgements
57 | Title
58 | Acknowledgements
59 |
60 |
61 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/Pods/Target Support Files/Pods-ARPowerPanels/Pods-ARPowerPanels-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_Pods_ARPowerPanels : NSObject
3 | @end
4 | @implementation PodsDummy_Pods_ARPowerPanels
5 | @end
6 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/Pods/Target Support Files/Pods-ARPowerPanels/Pods-ARPowerPanels-umbrella.h:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #else
4 | #ifndef FOUNDATION_EXPORT
5 | #if defined(__cplusplus)
6 | #define FOUNDATION_EXPORT extern "C"
7 | #else
8 | #define FOUNDATION_EXPORT extern
9 | #endif
10 | #endif
11 | #endif
12 |
13 |
14 | FOUNDATION_EXPORT double Pods_ARPowerPanelsVersionNumber;
15 | FOUNDATION_EXPORT const unsigned char Pods_ARPowerPanelsVersionString[];
16 |
17 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/Pods/Target Support Files/Pods-ARPowerPanels/Pods-ARPowerPanels.debug.xcconfig:
--------------------------------------------------------------------------------
1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyTables"
2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
3 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' '@executable_path/../../Frameworks'
4 | OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyTables/SwiftyTables.framework/Headers"
5 | OTHER_LDFLAGS = $(inherited) -framework "SwiftyTables"
6 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS"
7 | PODS_BUILD_DIR = ${BUILD_DIR}
8 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
9 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
10 | PODS_ROOT = ${SRCROOT}/Pods
11 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/Pods/Target Support Files/Pods-ARPowerPanels/Pods-ARPowerPanels.modulemap:
--------------------------------------------------------------------------------
1 | framework module Pods_ARPowerPanels {
2 | umbrella header "Pods-ARPowerPanels-umbrella.h"
3 |
4 | export *
5 | module * { export * }
6 | }
7 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/Pods/Target Support Files/Pods-ARPowerPanels/Pods-ARPowerPanels.release.xcconfig:
--------------------------------------------------------------------------------
1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyTables"
2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
3 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' '@executable_path/../../Frameworks'
4 | OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyTables/SwiftyTables.framework/Headers"
5 | OTHER_LDFLAGS = $(inherited) -framework "SwiftyTables"
6 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS"
7 | PODS_BUILD_DIR = ${BUILD_DIR}
8 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
9 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
10 | PODS_ROOT = ${SRCROOT}/Pods
11 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/Pods/Target Support Files/Pods-ARPowerPanelsDemo/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | ${EXECUTABLE_NAME}
9 | CFBundleIdentifier
10 | ${PRODUCT_BUNDLE_IDENTIFIER}
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | ${PRODUCT_NAME}
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${CURRENT_PROJECT_VERSION}
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/Pods/Target Support Files/Pods-ARPowerPanelsDemo/Pods-ARPowerPanelsDemo-acknowledgements.markdown:
--------------------------------------------------------------------------------
1 | # Acknowledgements
2 | This application makes use of the following third party libraries:
3 |
4 | ## SwiftyTables
5 |
6 | MIT License
7 |
8 | Copyright (c) 2018 Paige Sun
9 |
10 | Permission is hereby granted, free of charge, to any person obtaining a copy
11 | of this software and associated documentation files (the "Software"), to deal
12 | in the Software without restriction, including without limitation the rights
13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14 | copies of the Software, and to permit persons to whom the Software is
15 | furnished to do so, subject to the following conditions:
16 |
17 | The above copyright notice and this permission notice shall be included in all
18 | copies or substantial portions of the Software.
19 |
20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26 | SOFTWARE.
27 |
28 | Generated by CocoaPods - https://cocoapods.org
29 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/Pods/Target Support Files/Pods-ARPowerPanelsDemo/Pods-ARPowerPanelsDemo-acknowledgements.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreferenceSpecifiers
6 |
7 |
8 | FooterText
9 | This application makes use of the following third party libraries:
10 | Title
11 | Acknowledgements
12 | Type
13 | PSGroupSpecifier
14 |
15 |
16 | FooterText
17 | MIT License
18 |
19 | Copyright (c) 2018 Paige Sun
20 |
21 | Permission is hereby granted, free of charge, to any person obtaining a copy
22 | of this software and associated documentation files (the "Software"), to deal
23 | in the Software without restriction, including without limitation the rights
24 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
25 | copies of the Software, and to permit persons to whom the Software is
26 | furnished to do so, subject to the following conditions:
27 |
28 | The above copyright notice and this permission notice shall be included in all
29 | copies or substantial portions of the Software.
30 |
31 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
32 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
33 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
34 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
35 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
36 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
37 | SOFTWARE.
38 |
39 | License
40 | MIT
41 | Title
42 | SwiftyTables
43 | Type
44 | PSGroupSpecifier
45 |
46 |
47 | FooterText
48 | Generated by CocoaPods - https://cocoapods.org
49 | Title
50 |
51 | Type
52 | PSGroupSpecifier
53 |
54 |
55 | StringsTable
56 | Acknowledgements
57 | Title
58 | Acknowledgements
59 |
60 |
61 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/Pods/Target Support Files/Pods-ARPowerPanelsDemo/Pods-ARPowerPanelsDemo-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_Pods_ARPowerPanelsDemo : NSObject
3 | @end
4 | @implementation PodsDummy_Pods_ARPowerPanelsDemo
5 | @end
6 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/Pods/Target Support Files/Pods-ARPowerPanelsDemo/Pods-ARPowerPanelsDemo-umbrella.h:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #else
4 | #ifndef FOUNDATION_EXPORT
5 | #if defined(__cplusplus)
6 | #define FOUNDATION_EXPORT extern "C"
7 | #else
8 | #define FOUNDATION_EXPORT extern
9 | #endif
10 | #endif
11 | #endif
12 |
13 |
14 | FOUNDATION_EXPORT double Pods_ARPowerPanelsDemoVersionNumber;
15 | FOUNDATION_EXPORT const unsigned char Pods_ARPowerPanelsDemoVersionString[];
16 |
17 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/Pods/Target Support Files/Pods-ARPowerPanelsDemo/Pods-ARPowerPanelsDemo.debug.xcconfig:
--------------------------------------------------------------------------------
1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyTables"
3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
4 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
5 | OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyTables/SwiftyTables.framework/Headers"
6 | OTHER_LDFLAGS = $(inherited) -framework "SwiftyTables"
7 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS"
8 | PODS_BUILD_DIR = ${BUILD_DIR}
9 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
10 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
11 | PODS_ROOT = ${SRCROOT}/Pods
12 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/Pods/Target Support Files/Pods-ARPowerPanelsDemo/Pods-ARPowerPanelsDemo.modulemap:
--------------------------------------------------------------------------------
1 | framework module Pods_ARPowerPanelsDemo {
2 | umbrella header "Pods-ARPowerPanelsDemo-umbrella.h"
3 |
4 | export *
5 | module * { export * }
6 | }
7 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/Pods/Target Support Files/Pods-ARPowerPanelsDemo/Pods-ARPowerPanelsDemo.release.xcconfig:
--------------------------------------------------------------------------------
1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyTables"
3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
4 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
5 | OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyTables/SwiftyTables.framework/Headers"
6 | OTHER_LDFLAGS = $(inherited) -framework "SwiftyTables"
7 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS"
8 | PODS_BUILD_DIR = ${BUILD_DIR}
9 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
10 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
11 | PODS_ROOT = ${SRCROOT}/Pods
12 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/Pods/Target Support Files/SwiftyTables/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | ${EXECUTABLE_NAME}
9 | CFBundleIdentifier
10 | ${PRODUCT_BUNDLE_IDENTIFIER}
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | ${PRODUCT_NAME}
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${CURRENT_PROJECT_VERSION}
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/Pods/Target Support Files/SwiftyTables/SwiftyTables-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_SwiftyTables : NSObject
3 | @end
4 | @implementation PodsDummy_SwiftyTables
5 | @end
6 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/Pods/Target Support Files/SwiftyTables/SwiftyTables-prefix.pch:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #else
4 | #ifndef FOUNDATION_EXPORT
5 | #if defined(__cplusplus)
6 | #define FOUNDATION_EXPORT extern "C"
7 | #else
8 | #define FOUNDATION_EXPORT extern
9 | #endif
10 | #endif
11 | #endif
12 |
13 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/Pods/Target Support Files/SwiftyTables/SwiftyTables-umbrella.h:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #else
4 | #ifndef FOUNDATION_EXPORT
5 | #if defined(__cplusplus)
6 | #define FOUNDATION_EXPORT extern "C"
7 | #else
8 | #define FOUNDATION_EXPORT extern
9 | #endif
10 | #endif
11 | #endif
12 |
13 | #import "SwiftyTables.h"
14 |
15 | FOUNDATION_EXPORT double SwiftyTablesVersionNumber;
16 | FOUNDATION_EXPORT const unsigned char SwiftyTablesVersionString[];
17 |
18 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/Pods/Target Support Files/SwiftyTables/SwiftyTables.modulemap:
--------------------------------------------------------------------------------
1 | framework module SwiftyTables {
2 | umbrella header "SwiftyTables-umbrella.h"
3 |
4 | export *
5 | module * { export * }
6 | }
7 |
--------------------------------------------------------------------------------
/ARPowerPanelsFramework/Pods/Target Support Files/SwiftyTables/SwiftyTables.xcconfig:
--------------------------------------------------------------------------------
1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SwiftyTables
2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
3 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS"
4 | PODS_BUILD_DIR = ${BUILD_DIR}
5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
6 | PODS_ROOT = ${SRCROOT}
7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/SwiftyTables
8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
9 | SKIP_INSTALL = YES
10 |
--------------------------------------------------------------------------------
/Screenshots/ARPowerPanels_1_.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/Screenshots/ARPowerPanels_1_.PNG
--------------------------------------------------------------------------------
/Screenshots/ARPowerPanels_2_.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/Screenshots/ARPowerPanels_2_.PNG
--------------------------------------------------------------------------------
/Screenshots/ARPowerPanels_3_.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/Screenshots/ARPowerPanels_3_.PNG
--------------------------------------------------------------------------------
/Screenshots/ARPowerPanels_4_.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/Screenshots/ARPowerPanels_4_.PNG
--------------------------------------------------------------------------------
/Screenshots/ARPowerPanels_5_.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/Screenshots/ARPowerPanels_5_.PNG
--------------------------------------------------------------------------------
/Screenshots/ARPowerPanels_6_.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/p-sun/ARPowerPanels/5cf46603e34a9818ebcd8c3fec79967ae8a8fe8a/Screenshots/ARPowerPanels_6_.PNG
--------------------------------------------------------------------------------
/Tests.playground/contents.xcplayground:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------