Skip to content

Commit

Permalink
Made AR interface more user-friendly - replaced "Modify Property" wit…
Browse files Browse the repository at this point in the history
…h a more explanatory label, user can now resize interface

Rremoved the ambiguity between "List" and "ListElement" - replaced all instances of "List" with "ListElement" for types that inherit from "InterfaceParagraphListElement"
  • Loading branch information
philipturner committed Aug 31, 2021
1 parent 4962448 commit 02ba546
Show file tree
Hide file tree
Showing 14 changed files with 228 additions and 91 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1240"
LastUpgradeVersion = "1250"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1240"
LastUpgradeVersion = "1250"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,15 +88,15 @@ extension InterfaceRenderer {



protocol InterfaceParagraphList: CaseIterable {
protocol InterfaceParagraphListElement: CaseIterable {
var parameters: InterfaceParagraph.Parameters { get }
}

protocol InterfaceParagraphContainer {
associatedtype CachedParagraph: InterfaceParagraphList
associatedtype CachedParagraph: InterfaceParagraphListElement
}

extension InterfaceParagraphList {
extension InterfaceParagraphListElement {
typealias Parameters = InterfaceParagraph.Parameters
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,16 @@ extension InterfaceRenderer {
typealias CharacterGroup = (boundingRects: [simd_float4], glyphIndices: [UInt16])
typealias ParagraphReturn = (characterGroups: [CharacterGroup?], suggestedHeight: Float)

static func scaleParagraph(_ input: inout ParagraphReturn, scale: Float) {
input.suggestedHeight *= scale

for i in 0..<input.characterGroups.count {
if let originalBoundingRects = input.characterGroups[i]?.boundingRects {
input.characterGroups[i]!.boundingRects = originalBoundingRects.map{ $0 * scale }
}
}
}

static func createParagraph(stringSegments: [StringSegment], width: Float, pixelSize: Float) -> ParagraphReturn {
guard stringSegments.count > 0 else {
return (characterGroups: [nil, nil, nil], suggestedHeight: 0)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,16 @@ struct RenderingSettings {
var doingMixedRealityRendering: Bool
var renderingViewSeparator: Bool
var usingModifiedPerspective: Bool = false

var doingTwoSidedPendulums: Bool
var interfaceScale: Float

init(_ storedSettings: UserSettings.StoredSettings) {
doingMixedRealityRendering = storedSettings.doingMixedRealityRendering
renderingViewSeparator = storedSettings.renderingViewSeparator

doingTwoSidedPendulums = storedSettings.doingTwoSidedPendulums
interfaceScale = storedSettings.interfaceScale
}
}

Expand All @@ -25,6 +29,10 @@ struct RenderingSettingsView: View {

var body: some View {
VStack(alignment: .center) {
NavigationLink(destination: AppearanceSettingsView()) {
Text("Customize Appearance")
}

if UIDevice.current.userInterfaceIdiom == .phone {
Toggle(isOn: $coordinator.renderingSettings.doingMixedRealityRendering) {
Text("Headset Mode")
Expand All @@ -50,11 +58,36 @@ struct RenderingSettingsView: View {
Text("How to Use Flying Mode")
}
}

Toggle(isOn: $coordinator.renderingSettings.doingTwoSidedPendulums) {
Text("Two-Sided Pendulums")
}
}
.fixedSize(horizontal: false, vertical: true)
}

private struct AppearanceSettingsView: View {
@EnvironmentObject var coordinator: Coordinator

var body: some View {
VStack(alignment: .center) {
Toggle(isOn: $coordinator.renderingSettings.doingTwoSidedPendulums) {
Text("Two-Sided Pendulums")
}

VStack {
Text("Control Interface Size")
}
.frame(maxWidth: UIScreen.main.bounds.width, alignment: .center)

HStack {
Slider(value: $coordinator.renderingSettings.interfaceScale, in: 0.20...2.00)

Text("\(Int(coordinator.renderingSettings.interfaceScale * 100))%")
}


}
.padding(20)
.fixedSize(horizontal: false, vertical: true)

Spacer()
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,30 +18,34 @@ extension PendulumInterface {
let yAxis = orientation.act([0, 1, 0])
let zAxis = orientation.act([0, 0, 1])

let buttonStart = position - zAxis * 0.025
let buttonEnd = position + zAxis * 0.025
let fullScale = 0.05 * PendulumInterface.sizeScale
let halfScale = 0.025 * PendulumInterface.sizeScale

let buttonStart = fma(-halfScale, zAxis, position)
let buttonEnd = fma( halfScale, zAxis, position)

buttonObject = CentralObject(roundShapeType: .cylinder,
modelSpaceBottom: buttonStart,
modelSpaceTop: buttonEnd,
diameter: 0.15,
diameter: 0.15 * PendulumInterface.sizeScale,

color: [0.3, 0.3, 0.3])!
buttonObject.updateTransforms()



let symbolCenter = buttonEnd + zAxis * 0.025
let symbolCenter = fma(halfScale, zAxis, buttonEnd)
let directionCylinderDiameter = 0.02 * PendulumInterface.sizeScale

for i in 0..<2 {
let delta = i == 0 ? xAxis : yAxis
let objectStart = symbolCenter - 0.05 * delta
let objectEnd = symbolCenter + 0.05 * delta
let objectStart = fma(-fullScale, delta, symbolCenter)
let objectEnd = fma( fullScale, delta, symbolCenter)

symbolObjects.append(CentralObject(roundShapeType: .cylinder,
modelSpaceBottom: objectStart,
modelSpaceTop: objectEnd,
diameter: 0.02,
diameter: directionCylinderDiameter,

color: [0.5, 0.5, 0.5])!)
}
Expand All @@ -50,13 +54,13 @@ extension PendulumInterface {
var delta = (i & 1) == 0 ? xAxis : yAxis
if i >= 2 { delta = -delta }

let objectStart = symbolCenter + 0.05 * delta
let objectEnd = objectStart + 0.025 * delta
let objectStart = fma(fullScale, delta, symbolCenter)
let objectEnd = fma(halfScale, delta, objectStart)

symbolObjects.append(CentralObject(roundShapeType: .cone,
modelSpaceBottom: objectStart,
modelSpaceTop: objectEnd,
diameter: 0.025,
diameter: halfScale,

color: [0.5, 0.5, 0.5])!)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,10 @@ extension PendulumInterface {
interfaceRenderer.interfaceElements.append(CachedParagraph.backButton.interfaceElement)
}

mutating func resetSize() {
interfaceRenderer.interfaceElements[index] = CachedParagraph.backButton.interfaceElement
}

func rayTrace(ray worldSpaceRay: RayTracing.Ray) -> Float? {
element.rayTrace(ray: worldSpaceRay)
}
Expand All @@ -34,7 +38,7 @@ extension PendulumInterface {

extension PendulumInterface.BackButton: PendulumInterfaceElement, InterfaceParagraphContainer {

enum CachedParagraph: UInt8, PendulumParagraphList {
enum CachedParagraph: UInt8, PendulumParagraphListElement {
case backButton

var parameters: Parameters {
Expand All @@ -57,10 +61,13 @@ extension PendulumInterface.BackButton: PendulumInterfaceElement, InterfaceParag
}

fileprivate static func generateInterfaceElement(type: CachedParagraph) -> InterfaceRenderer.InterfaceElement {
let paragraph = Self.createParagraph(type)
var paragraph = Self.createParagraph(type)
let scale = PendulumInterface.sizeScale

InterfaceRenderer.scaleParagraph(&paragraph, scale: scale)

return .init(position: .zero, forwardDirection: [0, 0, 1], orthogonalUpDirection: [0, 1, 0],
width: width, height: 0.08, depth: 0.05, radius: .greatestFiniteMagnitude,
width: width * scale, height: 0.08 * scale, depth: 0.05 * scale, radius: .greatestFiniteMagnitude,

highlightColor: [0.6, 0.8, 1.0], highlightOpacity: 1.0,
surfaceColor: [0.3, 0.5, 0.7], surfaceOpacity: 0.75,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import simd
extension PendulumInterface {

struct Counter: PendulumIndexContainer, InterfaceParagraphContainer {
enum CachedParagraph: UInt8, PendulumParagraphList {
enum CachedParagraph: UInt8, PendulumParagraphListElement {
case minus10
case minus5
case minus1
Expand Down Expand Up @@ -174,6 +174,10 @@ extension PendulumInterface {
elements = .init(interfaceRenderer: pendulumInterface.interfaceRenderer)
}

mutating func resetSize() {
elements.resetSize()
}



mutating func resetHighlighting() {
Expand Down Expand Up @@ -293,10 +297,14 @@ extension PendulumInterface.CircularButton {
}

static func generateInterfaceElement(type: Counter.CachedParagraph) -> InterfaceRenderer.InterfaceElement {
let paragraph = Counter.createParagraph(type)
var paragraph = Counter.createParagraph(type)
let scale = PendulumInterface.sizeScale

InterfaceRenderer.scaleParagraph(&paragraph, scale: scale)

return .init(position: .zero, forwardDirection: [0, 0, 1], orthogonalUpDirection: [0, 1, 0],
width: width, height: height, depth: 0.05, radius: .greatestFiniteMagnitude,
width: width * scale, height: height * scale,
depth: 0.05 * scale, radius: .greatestFiniteMagnitude,

highlightColor: [0.6, 0.8, 1.0], highlightOpacity: 1.0,
surfaceColor: [0.3, 0.5, 0.7], surfaceOpacity: 0.75,
Expand Down
Loading

0 comments on commit 02ba546

Please sign in to comment.