@@ -22,6 +22,7 @@ class ViewController: UIViewController, ARSCNViewDelegate {
22
22
fileprivate var timer = Timer ( )
23
23
fileprivate var offers = [ Offer] ( )
24
24
fileprivate var showedMerchants : [ OffersMerchants ] = [ ]
25
+ fileprivate var atmArrow : VirtualObject !
25
26
26
27
override func viewDidLoad( ) {
27
28
super. viewDidLoad ( )
@@ -36,14 +37,11 @@ class ViewController: UIViewController, ARSCNViewDelegate {
36
37
override func viewDidAppear( _ animated: Bool ) {
37
38
super. viewDidAppear ( animated)
38
39
setupSession ( )
39
- // @TODO: Temporary test deals icons
40
- // DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
41
- // self.add(.dealfree, position: SCNVector3(-1, 0, -3.8))
42
- // self.add(.deal10, position: SCNVector3(0, 0, -4))
43
- // self.add(.deal20, position: SCNVector3(1, 0, -3.8))
44
- // self.add(.deal30, position: SCNVector3(3, 0, -3))
45
- // self.add(.deal40, position: SCNVector3(5, 0, 0))
46
- // }
40
+ DispatchQueue . main. asyncAfter ( deadline: . now( ) + 0.5 ) {
41
+ //guard let cameraTransform = self.session.currentFrame?.camera.transform else { return }
42
+ //let cameraPosition = SCNVector3.positionFromTransform(cameraTransform)
43
+ self . atmArrow = self . add ( . atmarrow, position: SCNVector3 ( 0 , - 0.3 , - 1 ) , toCamera: true )
44
+ }
47
45
guard let logoView = logoView else { return }
48
46
view. bringSubview ( toFront: logoView)
49
47
logoView. open ( completion: { [ weak logoView] ( success) in
@@ -86,6 +84,8 @@ class ViewController: UIViewController, ARSCNViewDelegate {
86
84
// MARK: - ARSessionDelegate
87
85
extension ViewController : ARSessionDelegate {
88
86
func session( _ session: ARSession , didUpdate frame: ARFrame ) {
87
+ self . atmArrow? . removeFromParentNode ( )
88
+ self . atmArrow = self . add ( . atmarrow, position: SCNVector3 ( 0 , - 0.3 , - 1 ) , toCamera: true )
89
89
if requestLock { return }
90
90
requestLock = true
91
91
session. delegate = nil
@@ -125,7 +125,7 @@ extension ViewController: ARSessionDelegate {
125
125
let offset : Float = 0.5
126
126
let z1 = position. z - sin( angles. y + Float. pi/ 2 ) * defaultDistance - sin( angles. y + Float. pi) * offset
127
127
let x1 = position. x + cos( angles. y + Float. pi/ 2 ) * defaultDistance + cos( angles. y + Float. pi) * offset
128
- let dealoffset : Float = 0.0
128
+ let dealoffset : Float = - offset
129
129
DispatchQueue . main. async {
130
130
switch offerMerchant {
131
131
case . walmart:
@@ -153,14 +153,15 @@ extension ViewController: ARSessionDelegate {
153
153
fileprivate extension ViewController {
154
154
155
155
/// Adds SCNNode to the current scene.
156
- func add( _ deal: Deals , position: SCNVector3 ) {
156
+ func add( _ deal: Deals , position: SCNVector3 , toCamera: Bool = false ) -> VirtualObject {
157
+ let wrapperNode = VirtualObject ( deal)
157
158
DispatchQueue . global ( ) . async {
158
- let wrapperNode = VirtualObject ( deal)
159
159
DispatchQueue . main. async {
160
- self . setNewVirtualObjectPosition ( position, wrapperNode)
160
+ self . setNewVirtualObjectPosition ( position, wrapperNode, toCanera : toCamera )
161
161
self . mainNode. addChildNode ( wrapperNode)
162
162
}
163
163
}
164
+ return wrapperNode
164
165
}
165
166
166
167
func setupSceneView( ) {
@@ -203,7 +204,21 @@ fileprivate extension ViewController {
203
204
mainNode. removeFromParentNode ( )
204
205
}
205
206
206
- func setNewVirtualObjectPosition( _ pos: SCNVector3 , _ object: SCNNode ) {
207
+ func setNewVirtualObjectPosition( _ pos: SCNVector3 , _ object: SCNNode , toCanera: Bool = false ) {
208
+ if toCanera {
209
+ object. position = pos
210
+ // if pos == 0 {
211
+ // return
212
+ // }
213
+ // let tgA: Double = Double(cameraToPosition.z) / Double(cameraToPosition.x)
214
+ // let cornerB = Double.pi / 2 - atan(tgA)
215
+ // if cameraToPosition.x < 0 {
216
+ // object.eulerAngles = SCNVector3(0, cornerB, 0)
217
+ // } else {
218
+ // object.eulerAngles = SCNVector3(0, Double.pi + cornerB, 0)
219
+ // }
220
+ return
221
+ }
207
222
guard let cameraTransform = session. currentFrame? . camera. transform else {
208
223
object. position = pos
209
224
return
0 commit comments