From 0844fbc0106eb0a02335c27bbd9be9dfcbb8aa31 Mon Sep 17 00:00:00 2001 From: Eryn Wells Date: Tue, 9 Oct 2018 09:28:31 -0700 Subject: [PATCH] Attempting to make iOS work --- Metaballs-iOS/Base.lproj/Main.storyboard | 11 ++-- Metaballs-iOS/ViewController.swift | 78 +++++++++++++++++++++++- Metaballs.xcodeproj/project.pbxproj | 28 ++++++++- 3 files changed, 110 insertions(+), 7 deletions(-) diff --git a/Metaballs-iOS/Base.lproj/Main.storyboard b/Metaballs-iOS/Base.lproj/Main.storyboard index f1bcf38..a5a0be8 100644 --- a/Metaballs-iOS/Base.lproj/Main.storyboard +++ b/Metaballs-iOS/Base.lproj/Main.storyboard @@ -1,7 +1,10 @@ - + + + + - + @@ -9,8 +12,8 @@ - - + + diff --git a/Metaballs-iOS/ViewController.swift b/Metaballs-iOS/ViewController.swift index 6a198f0..1a0451f 100644 --- a/Metaballs-iOS/ViewController.swift +++ b/Metaballs-iOS/ViewController.swift @@ -9,12 +9,88 @@ import UIKit class ViewController: UIViewController { + private static func defaultParameters() -> Parameters { + var p = Parameters() + let defaults = UserDefaults.standard + let style = defaults.colorStyle ?? .gradient2Horizontal + p.colorStyle = style + let color0 = defaults.color0 ?? Float4(0.50, 0.79, 1, 1) + p.color0 = color0 + let color1 = defaults.color1 ?? Float4(0.88, 0.50, 1, 1) + p.color1 = color1 + return p + } + + internal var field: Field { + didSet { + field.size = Size(size: metalView.drawableSize) + } + } + + private var renderer: Renderer! + + internal var metalView: MTKView { + return self.view as! MTKView + } + + override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) { + let params = ViewController.defaultParameters() + field = Field(parameters: params) + super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) + } + + required init?(coder: NSCoder) { + let params = ViewController.defaultParameters() + field = Field(parameters: params) + super.init(coder: coder) + } override func viewDidLoad() { super.viewDidLoad() - // Do any additional setup after loading the view, typically from a nib. + + do { + renderer = try Renderer(delegate: self) + } catch let e { + print("\(e)") + view = newErrorView() + return + } + + metalView.delegate = renderer } + override func viewWillAppear() { + super.viewWillAppear() + renderer.mtkView(metalView, drawableSizeWillChange: metalView.drawableSize) + for _ in 1...10 { + addBallWithRandomRadius() + } + } + // MARK: - Private + + private func newErrorView() -> NSView { + let view = NSView() + view.layer?.backgroundColor = NSColor.red.cgColor + return view + } + + private func addBallWithRandomRadius() { + let base = UInt32(view.bounds.width * 0.05) + let variance = UInt32(base * 2) + let r = Float(base + arc4random_uniform(variance)) + field.add(ballWithRadius: r) + } + + // MARK: - RendererDelegate + + var renderSize: Size { + get { + return field.size + } + set { + field.size = newValue + } + } } diff --git a/Metaballs.xcodeproj/project.pbxproj b/Metaballs.xcodeproj/project.pbxproj index 24fa2af..8cac69b 100644 --- a/Metaballs.xcodeproj/project.pbxproj +++ b/Metaballs.xcodeproj/project.pbxproj @@ -36,6 +36,16 @@ C0FF7CAB216AFD840081B781 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C0FF7CA9216AFD840081B781 /* Main.storyboard */; }; C0FF7CAD216AFD890081B781 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C0FF7CAC216AFD890081B781 /* Assets.xcassets */; }; C0FF7CB0216AFD890081B781 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C0FF7CAE216AFD890081B781 /* LaunchScreen.storyboard */; }; + C0FF7CB5216B002E0081B781 /* Metaballs.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0BBE3A31F2E81C700E68524 /* Metaballs.swift */; }; + C0FF7CB6216B002E0081B781 /* Geometry.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0CE7BFF1F362C3F001516B6 /* Geometry.swift */; }; + C0FF7CB7216B002E0081B781 /* Memory.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0DF1D781F3789DC0038B0A0 /* Memory.swift */; }; + C0FF7CB8216B002E0081B781 /* Math.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0FF7C9C216A6DE00081B781 /* Math.swift */; }; + C0FF7CB9216B002E0081B781 /* Renderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0BBE3AB1F2E941200E68524 /* Renderer.swift */; }; + C0FF7CBA216B002E0081B781 /* Shaders.metal in Sources */ = {isa = PBXBuildFile; fileRef = C0BBE3A91F2E91D900E68524 /* Shaders.metal */; }; + C0FF7CBB216B002E0081B781 /* Preferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0B906D41F45432700B5F89B /* Preferences.swift */; }; + C0FF7CBC216B002E0081B781 /* PreferencesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C091616F1F3F5AE6009C4263 /* PreferencesViewController.swift */; }; + C0FF7CBF216B00570081B781 /* MetalKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C0FF7CBD216B00570081B781 /* MetalKit.framework */; }; + C0FF7CC0216B00570081B781 /* Metal.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C0FF7CBE216B00570081B781 /* Metal.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -93,6 +103,8 @@ C0FF7CAC216AFD890081B781 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; C0FF7CAF216AFD890081B781 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; C0FF7CB1216AFD890081B781 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + C0FF7CBD216B00570081B781 /* MetalKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MetalKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.0.sdk/System/Library/Frameworks/MetalKit.framework; sourceTree = DEVELOPER_DIR; }; + C0FF7CBE216B00570081B781 /* Metal.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Metal.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.0.sdk/System/Library/Frameworks/Metal.framework; sourceTree = DEVELOPER_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -123,6 +135,8 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + C0FF7CBF216B00570081B781 /* MetalKit.framework in Frameworks */, + C0FF7CC0216B00570081B781 /* Metal.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -213,6 +227,8 @@ C0BBE3A61F2E893A00E68524 /* Frameworks */ = { isa = PBXGroup; children = ( + C0FF7CBE216B00570081B781 /* Metal.framework */, + C0FF7CBD216B00570081B781 /* MetalKit.framework */, C0ABCC401F50A560004A0290 /* ScreenSaver.framework */, C0BBE3A71F2E893A00E68524 /* MetalKit.framework */, ); @@ -455,8 +471,16 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + C0FF7CBA216B002E0081B781 /* Shaders.metal in Sources */, + C0FF7CB5216B002E0081B781 /* Metaballs.swift in Sources */, + C0FF7CB6216B002E0081B781 /* Geometry.swift in Sources */, + C0FF7CB9216B002E0081B781 /* Renderer.swift in Sources */, C0FF7CA8216AFD840081B781 /* ViewController.swift in Sources */, + C0FF7CBC216B002E0081B781 /* PreferencesViewController.swift in Sources */, + C0FF7CB7216B002E0081B781 /* Memory.swift in Sources */, C0FF7CA6216AFD840081B781 /* AppDelegate.swift in Sources */, + C0FF7CB8216B002E0081B781 /* Math.swift in Sources */, + C0FF7CBB216B002E0081B781 /* Preferences.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -651,7 +675,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COMBINE_HIDPI_IMAGES = YES; DEVELOPMENT_TEAM = 78372RE6B4; - INFOPLIST_FILE = Metaballs/Info.plist; + INFOPLIST_FILE = "Metaballs-macOS/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = me.erynwells.Metaballs; PRODUCT_NAME = Metaballs; @@ -666,7 +690,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COMBINE_HIDPI_IMAGES = YES; DEVELOPMENT_TEAM = 78372RE6B4; - INFOPLIST_FILE = Metaballs/Info.plist; + INFOPLIST_FILE = "Metaballs-macOS/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = me.erynwells.Metaballs; PRODUCT_NAME = Metaballs;