1
1
<script setup lang="js">
2
2
import ' @ar-js-org/ar.js' ;
3
3
import { Zone } from ' ./Zone' ;
4
+ import { CardService } from ' ./CardService' ;
5
+ import { ConnectionService } from ' @/services/ConnectionService' ;
6
+ import { ref } from ' vue' ;
7
+
8
+ const props = defineProps ({
9
+ cardService: {
10
+ type: CardService
11
+ },
12
+ conService: {
13
+ type: ConnectionService
14
+ }
15
+ });
16
+ const connected = ref (false );
4
17
5
18
// Global Variable
6
19
var markersURLArray = [];
@@ -10,148 +23,147 @@ var foundCardMarkers = [];
10
23
var foundZoneMarkers = [];
11
24
var handZone;
12
25
13
- AFRAME .registerComponent (' markers_start' , {
14
- init : function () {
15
- console .log (' Add markers to the scene' );
16
-
17
- var sceneEl = document .querySelector (' a-scene' );
18
- var numberOfCards = 45 ;
19
- // list of the markers
20
- for (var i = 0 ; i < numberOfCards+ 1 ; i++ ) {
21
- var url = " /markers/pattern-" + i + " .patt" ;
22
- markersURLArray .push (url);
23
- markersNameArray .push (i);
24
- // console.log(url);
25
- }
26
- for (var k = 0 ; k < numberOfCards+ 1 ; k++ ) {
27
- var markerEl = document .createElement (' a-marker' );
28
- markerEl .setAttribute (' type' , ' pattern' );
29
- markerEl .setAttribute (' url' , markersURLArray[k]);
30
- markerEl .setAttribute (' id' , markersNameArray[k]);
31
-
32
-
33
- markerEl .setAttribute (' registerevents' , ' ' );
34
- sceneEl .appendChild (markerEl);
35
- markerEl .style .zIndex = ' 1' ; // Adjust the value as needed
36
-
37
- // Adding text to each marker
38
- var textEl = document .createElement (' a-entity' );
39
-
40
- textEl .setAttribute (' id' , ' text' );
41
- textEl .setAttribute (' text' , { color: ' red' , align: ' center' , value: markersNameArray[k], width: ' 5.5' });
42
- textEl .object3D .position .set (0 , 0.7 , 0 );
43
- textEl .object3D .rotation .set (- 90 , 0 , 0 );
44
-
45
- markerEl .appendChild (textEl);
46
-
47
- var ImageEl = document .createElement (' a-image' );
48
- var imageUrl = " /cardImages/cardFront" + k + " .svg" ;
49
- ImageEl .setAttribute (' src' , ' url(' + imageUrl + ' )' );
50
- ImageEl .setAttribute (' id' , ' card' );
51
-
52
- ImageEl .object3D .position .set (0 , 0.0 , 0 );
53
- ImageEl .object3D .rotation .set (- 90 , 0 , 0 );
54
- markerEl .appendChild (ImageEl);
55
-
56
-
57
- }
58
- handZone = new Zone (" /markers/ZoneMarker1.patt" , " /markers/ZoneMarker2.patt" , sceneEl, " hand" , foundZoneMarkers);
59
- }
60
- });
61
-
62
- // Detect marker found and lost
63
- AFRAME .registerComponent (' registerevents' , {
64
- init : function () {
65
- const marker = this .el ;
66
-
67
- marker .addEventListener (" markerFound" , () => {
68
- var markerId = marker .id ;
69
- addFoundMarker (marker, foundCardMarkers)
70
- if (handZone .markerInZone (marker)) {
71
- turnCard (marker);
26
+ props .conService .onConnection (() => {
27
+ AFRAME .registerComponent (' markers_start' , {
28
+ init : function () {
29
+ console .log (` Adding ${ props .cardService .numberOfCards } markers to the scene...` );
30
+
31
+ var sceneEl = document .querySelector (' a-scene' );
32
+ // list of the markers
33
+ for (var i = 0 ; i < props .cardService .numberOfCards + 1 ; i++ ) {
34
+ var url = " /markers/pattern-" + i + " .patt" ;
35
+ markersURLArray .push (url);
36
+ markersNameArray .push (i);
37
+ }
38
+ for (var k = 0 ; k < props .cardService .numberOfCards + 1 ; k++ ) {
39
+ var markerEl = document .createElement (' a-marker' );
40
+ markerEl .setAttribute (' type' , ' pattern' );
41
+ markerEl .setAttribute (' url' , markersURLArray[k]);
42
+ markerEl .setAttribute (' id' , markersNameArray[k]);
43
+
44
+
45
+ markerEl .setAttribute (' registerevents' , ' ' );
46
+ sceneEl .appendChild (markerEl);
47
+ markerEl .style .zIndex = ' 1' ; // Adjust the value as needed
48
+
49
+ // Add text to each marker
50
+ var textEl = document .createElement (' a-entity' );
51
+
52
+ textEl .setAttribute (' id' , ' text' );
53
+ textEl .setAttribute (' text' , { color: ' red' , align: ' center' , value: markersNameArray[k], width: ' 5.5' });
54
+ textEl .object3D .position .set (0 , 0.7 , 0 );
55
+ textEl .object3D .rotation .set (- 90 , 0 , 0 );
56
+
57
+ markerEl .appendChild (textEl);
58
+
59
+ // Add the card Image
60
+ var ImageEl = document .createElement (' a-image' );
61
+ ImageEl .setAttribute (' src' , props .cardService .cardBack );
62
+ ImageEl .setAttribute (' id' , ' card' );
63
+
64
+ ImageEl .object3D .position .set (0 , 0.0 , 0 );
65
+ ImageEl .object3D .rotation .set (- 90 , 0 , 0 );
66
+ markerEl .appendChild (ImageEl);
72
67
}
73
- console .log (' Marker Found: ' , markerId, ' at ' , marker .object3D .position );
74
- });
75
-
76
- marker .addEventListener (" markerLost" , () => {
77
- var markerId = marker .id ;
78
- removeFoundMarker (marker, foundCardMarkers);
79
- console .log (' Marker Lost: ' , markerId);
80
- });
81
- function checkMarkerInZone () {
82
- for (let foundMarker of foundCardMarkers) {
83
- if (handZone .markerInZone (foundMarker)) {
84
- turnCard (foundMarker);
85
- } else if (isCardBack (foundMarker)) {
86
- showCard (foundMarker);
68
+ handZone = new Zone (" /markers/ZoneMarker1.patt" , " /markers/ZoneMarker2.patt" , sceneEl, " hand" , foundZoneMarkers);
69
+ }
70
+ });
71
+
72
+ // Detect marker found and lost
73
+ AFRAME .registerComponent (' registerevents' , {
74
+ init : function () {
75
+ const marker = this .el ;
76
+
77
+ marker .addEventListener (" markerFound" , () => {
78
+ var markerId = marker .id ;
79
+ addFoundMarker (marker, foundCardMarkers)
80
+ if (handZone .markerInZone (marker)) {
81
+ turnCard (marker);
82
+ }
83
+ console .log (' Marker Found: ' , markerId, ' at ' , marker .object3D .position );
84
+ });
85
+
86
+ marker .addEventListener (" markerLost" , () => {
87
+ var markerId = marker .id ;
88
+ removeFoundMarker (marker, foundCardMarkers);
89
+ console .log (' Marker Lost: ' , markerId);
90
+ });
91
+ function checkMarkerInZone () {
92
+ for (let foundMarker of foundCardMarkers) {
93
+ if (handZone .markerInZone (foundMarker)) {
94
+ turnCard (foundMarker);
95
+ } else if (isCardBack (foundMarker)) {
96
+ showCard (foundMarker);
97
+ }
98
+ }
99
+ setTimeout (checkMarkerInZone, 100 );
100
+ };
101
+ checkMarkerInZone ();
102
+ },
103
+
104
+ });
105
+
106
+ AFRAME .registerComponent (' registerevents_zone' , {
107
+ init : function () {
108
+ const marker = this .el ;
109
+ var lastPosition1;
110
+ var lastPosition2;
111
+ marker .addEventListener (" markerFound" , () => {
112
+
113
+ var markerId = marker .id ;
114
+ var image = marker .querySelector (' #text' );
115
+ var position = marker .object3D .position ;
116
+
117
+ addFoundMarker (marker, foundZoneMarkers)
118
+ // add for loop here with zoneArray if we have multiple
119
+ if (isMarkerIdFound (handZone .getMarker1Id (), foundZoneMarkers) && isMarkerIdFound (handZone .getMarker2Id (), foundZoneMarkers)) {
120
+ lastPosition1 = handZone .getZoneMarker1 ().object3D .position .clone ();
121
+ lastPosition2 = handZone .getZoneMarker2 ().object3D .position .clone ();
122
+ handZone .drawZone ();
87
123
}
88
- }
89
- setTimeout (checkMarkerInZone, 100 );
90
- };
91
- checkMarkerInZone ();
92
- },
93
-
94
- });
95
-
96
- AFRAME .registerComponent (' registerevents_zone' , {
97
- init : function () {
98
- const marker = this .el ;
99
- var lastPosition1;
100
- var lastPosition2;
101
- marker .addEventListener (" markerFound" , () => {
102
-
103
- var markerId = marker .id ;
104
- var image = marker .querySelector (' #text' );
105
- var position = marker .object3D .position ;
106
-
107
- addFoundMarker (marker, foundZoneMarkers)
108
- // add for loop here with zoneArray if we have multiple
109
- if (isMarkerIdFound (handZone .getMarker1Id (), foundZoneMarkers) && isMarkerIdFound (handZone .getMarker2Id (), foundZoneMarkers)) {
110
- lastPosition1 = handZone .getZoneMarker1 ().object3D .position .clone ();
111
- lastPosition2 = handZone .getZoneMarker2 ().object3D .position .clone ();
112
- handZone .drawZone ();
113
- }
114
124
115
- console .log (' Zone Marker Found: ' , markerId, ' at ' , marker .object3D .position );
116
- });
125
+ console .log (' Zone Marker Found: ' , markerId, ' at ' , marker .object3D .position );
126
+ });
117
127
118
- marker .addEventListener (" markerLost" , () => {
119
- var markerId = marker .id ;
128
+ marker .addEventListener (" markerLost" , () => {
129
+ var markerId = marker .id ;
120
130
121
- // add for loop here with zoneArray if we have multiple
122
- if (marker .id === handZone .getMarker1Id () || marker .id === handZone .getMarker2Id ()) {
123
- handZone .removeZone ();
124
- }
131
+ // add for loop here with zoneArray if we have multiple
132
+ if (marker .id === handZone .getMarker1Id () || marker .id === handZone .getMarker2Id ()) {
133
+ handZone .removeZone ();
134
+ }
125
135
126
- removeFoundMarker (marker, foundZoneMarkers);
127
- console .log (' Zone Marker Lost: ' , markerId);
128
- });
136
+ removeFoundMarker (marker, foundZoneMarkers);
137
+ console .log (' Zone Marker Lost: ' , markerId);
138
+ });
129
139
130
- handZone .redrawZoneEnable ();
131
- },
140
+ handZone .redrawZoneEnable ();
141
+ },
142
+ });
143
+ connected .value = true ;
132
144
});
133
145
146
+
134
147
function isCardBack (marker ) {
135
148
if (! marker) return false ;
136
149
const imageEl = marker .querySelector (' #card' );
137
150
if (! imageEl) return false ;
138
- return imageEl .getAttribute (' src' ) === ' url(/cardImages/cardBackBlue.svg) ' ;
151
+ return imageEl .getAttribute (' src' ) === props . cardService . cardBack ;
139
152
}
140
153
141
-
142
-
143
154
function turnCard (marker ) {
144
155
const imageEl = marker .querySelector (' #card' );
145
- imageEl .setAttribute (' src' , ' url(/cardImages/cardBackBlue.svg) ' );
156
+ imageEl .setAttribute (' src' , props . cardService . cardBack );
146
157
}
147
158
148
159
function showCard (marker ) {
149
160
const imageEl = marker .querySelector (' #card' );
150
- let id = marker .getAttribute (' id' )
151
- imageEl .setAttribute (' src' , ' url(/cardImages/cardFront' + id + ' .svg)' );
161
+ let id = marker .getAttribute (' id' );
162
+ props .cardService .getCardByMarker (id).then ((card ) => {
163
+ imageEl .setAttribute (' src' , card .url );
164
+ });
152
165
}
153
166
154
-
155
167
function addFoundMarker (marker , markerList ) {
156
168
if (! markerList .includes (marker)) {
157
169
markerList .push (marker);
@@ -173,10 +185,12 @@ function isMarkerIdFound(markerId, list) {
173
185
</script >
174
186
175
187
<template >
176
- <a-scene markers_start xr-mode-ui =" enabled: false" color-space =" sRGB" renderer =" gammaOutput: true"
177
- arjs =' debugUIEnabled: false; sourceType: webcam; patternRatio: 0.85; trackingMethod: best;' >
178
- <a-entity id =' userCamera' camera >
179
- <!-- <a-cursor> </a-cursor> -->
180
- </a-entity >
181
- </a-scene >
188
+ <div v-if =" connected" >
189
+ <a-scene markers_start xr-mode-ui =" enabled: false" color-space =" sRGB" renderer =" gammaOutput: true"
190
+ arjs =' debugUIEnabled: false; sourceType: webcam; patternRatio: 0.85; trackingMethod: best;' >
191
+ <a-entity id =' userCamera' camera >
192
+ <!-- <a-cursor> </a-cursor> -->
193
+ </a-entity >
194
+ </a-scene >
195
+ </div >
182
196
</template >
0 commit comments