@gamelearn/arcade-components 2.17.13 → 2.18.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/chained-image-click-puzzle-component/components/ChainedImageClickPuzzleComponent.js +5 -4
- package/dist/components/chained-image-click-puzzle-component/components/CurrentImagePuzzle.js +9 -4
- package/dist/components/dialog-component/components/DialogComponent.js +131 -120
- package/dist/components/frame-click-puzzle-component/components/CurrentFramePuzzle.js +12 -6
- package/dist/components/frame-click-puzzle-component/components/FrameClickPuzzleComponent.js +2 -1
- package/dist/components/image-click-wrapper-component/components/ImageClickWrapperComponent.js +10 -7
- package/package.json +2 -2
|
@@ -63,6 +63,9 @@ var ChainedImageClickPuzzleComponent = function ChainedImageClickPuzzleComponent
|
|
|
63
63
|
payload: puzzleId
|
|
64
64
|
});
|
|
65
65
|
}, [emitEvent, puzzleId]);
|
|
66
|
+
var totalCorrects = list.reduce(function (acc, current) {
|
|
67
|
+
return acc + current.areas.length;
|
|
68
|
+
}, 0);
|
|
66
69
|
var currentPuzzleProps = {
|
|
67
70
|
list: list,
|
|
68
71
|
description: description,
|
|
@@ -79,11 +82,9 @@ var ChainedImageClickPuzzleComponent = function ChainedImageClickPuzzleComponent
|
|
|
79
82
|
slidesCompleted: slidesCompleted,
|
|
80
83
|
setSlidesCompleted: setSlidesCompleted,
|
|
81
84
|
loadPuzzleStatus: loadPuzzleStatus,
|
|
82
|
-
keyboardControl: keyboardControl
|
|
85
|
+
keyboardControl: keyboardControl,
|
|
86
|
+
totalCorrects: totalCorrects
|
|
83
87
|
};
|
|
84
|
-
var totalCorrects = list.reduce(function (acc, current) {
|
|
85
|
-
return acc + current.areas.length;
|
|
86
|
-
}, 0);
|
|
87
88
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
88
89
|
className: "puzzle--image__click"
|
|
89
90
|
}, showFrames ? /*#__PURE__*/_react.default.createElement("div", {
|
package/dist/components/chained-image-click-puzzle-component/components/CurrentImagePuzzle.js
CHANGED
|
@@ -62,7 +62,8 @@ var CurrentImageClickPuzzle = function CurrentImageClickPuzzle(_ref) {
|
|
|
62
62
|
setIndex = _ref.setIndex,
|
|
63
63
|
slidesCompleted = _ref.slidesCompleted,
|
|
64
64
|
setSlidesCompleted = _ref.setSlidesCompleted,
|
|
65
|
-
keyboardControl = _ref.keyboardControl
|
|
65
|
+
keyboardControl = _ref.keyboardControl,
|
|
66
|
+
totalCorrects = _ref.totalCorrects;
|
|
66
67
|
var accRewards = (0, _react.useRef)([]);
|
|
67
68
|
var correctClicked = (0, _react.useRef)(0);
|
|
68
69
|
var currentSelected = (0, _react.useRef)(0);
|
|
@@ -160,6 +161,10 @@ var CurrentImageClickPuzzle = function CurrentImageClickPuzzle(_ref) {
|
|
|
160
161
|
}, [slidesCompleted, specificFeedbacks, currentImageProps.hasClickOnce, currentImageProps.areas.length, currentImageProps.hasClickOrder, selected, setSelected, index, list.length, setSlidesCompleted, handleFinish, setIndex, emitEvent]);
|
|
161
162
|
|
|
162
163
|
var onResolve = function onResolve() {
|
|
164
|
+
if (index >= list.length - 1) {
|
|
165
|
+
setSelected(totalCorrects);
|
|
166
|
+
}
|
|
167
|
+
|
|
163
168
|
playSound('score');
|
|
164
169
|
emitEvent({
|
|
165
170
|
type: 'puzzleAction',
|
|
@@ -178,10 +183,10 @@ var CurrentImageClickPuzzle = function CurrentImageClickPuzzle(_ref) {
|
|
|
178
183
|
}));
|
|
179
184
|
}, [info, puzzleId, setInfo]);
|
|
180
185
|
(0, _react.useEffect)(function () {
|
|
181
|
-
if (loadPuzzleStatus) {
|
|
182
|
-
onComplete([], true,
|
|
186
|
+
if (loadPuzzleStatus && index !== list.length - 1) {
|
|
187
|
+
onComplete([], true, false);
|
|
183
188
|
}
|
|
184
|
-
}, [
|
|
189
|
+
}, [index, list.length, loadPuzzleStatus, onComplete]);
|
|
185
190
|
|
|
186
191
|
var checkSelectedAreas = function checkSelectedAreas() {
|
|
187
192
|
var areasSelected = currentImageProps.hasClickOnce ? currentImageProps.areas.length : 1;
|
|
@@ -63,11 +63,12 @@ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Sy
|
|
|
63
63
|
|
|
64
64
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
65
65
|
|
|
66
|
-
var crossFadeDuration = 0.
|
|
66
|
+
var crossFadeDuration = 0.1;
|
|
67
67
|
var characterMs = 75;
|
|
68
68
|
var minMs = 1400;
|
|
69
69
|
var headSize = 2;
|
|
70
70
|
var raycast = new _three.Raycaster();
|
|
71
|
+
var animationTarget = new _three.Object3D();
|
|
71
72
|
var maxCharacterToSwitch = 70;
|
|
72
73
|
raycast.firstHitOnly = true;
|
|
73
74
|
|
|
@@ -109,12 +110,12 @@ var DialogComponent = function DialogComponent(_ref) {
|
|
|
109
110
|
audioFailed = _useState10[0],
|
|
110
111
|
setAudioFailed = _useState10[1];
|
|
111
112
|
|
|
112
|
-
var
|
|
113
|
-
return
|
|
114
|
-
})
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
113
|
+
var scene = (0, _fiber.useThree)(function (state) {
|
|
114
|
+
return state.scene;
|
|
115
|
+
});
|
|
116
|
+
var camera = (0, _fiber.useThree)(function (state) {
|
|
117
|
+
return state.camera;
|
|
118
|
+
});
|
|
118
119
|
|
|
119
120
|
var _useTimeout = (0, _useTimeout2.default)(),
|
|
120
121
|
start = _useTimeout.start,
|
|
@@ -127,17 +128,11 @@ var DialogComponent = function DialogComponent(_ref) {
|
|
|
127
128
|
var defaultCamera = (0, _react.useMemo)(function () {
|
|
128
129
|
return camera.clone();
|
|
129
130
|
}, []);
|
|
131
|
+
var actualCamera = (0, _react.useRef)(camera);
|
|
130
132
|
var messagePosition = (0, _react.useRef)({
|
|
131
133
|
pos: [0, 0, 0],
|
|
132
134
|
child: null
|
|
133
135
|
});
|
|
134
|
-
|
|
135
|
-
var _useState11 = (0, _react.useState)(false),
|
|
136
|
-
_useState12 = _slicedToArray(_useState11, 2),
|
|
137
|
-
animationRunning = _useState12[0],
|
|
138
|
-
setAnimationRunning = _useState12[1];
|
|
139
|
-
|
|
140
|
-
var animationTarget = (0, _react.useRef)(new _three.Object3D());
|
|
141
136
|
var currentLineData = lines[line];
|
|
142
137
|
var lastLine = lines[line - 1];
|
|
143
138
|
var lastSet = (0, _react.useRef)(false);
|
|
@@ -157,9 +152,14 @@ var DialogComponent = function DialogComponent(_ref) {
|
|
|
157
152
|
var audio = Object.keys((currentLineData === null || currentLineData === void 0 ? void 0 : currentLineData.audio) || {}).length;
|
|
158
153
|
var voice = Object.keys((currentLineData === null || currentLineData === void 0 ? void 0 : currentLineData.voice) || {}).length;
|
|
159
154
|
var isVoiceOver = voiceOver || (currentLineData === null || currentLineData === void 0 ? void 0 : currentLineData.type) === 'conversationalNarration';
|
|
160
|
-
var isDecision = decision || (currentLineData === null || currentLineData === void 0 ? void 0 : currentLineData.type) === 'conversationalDecision';
|
|
155
|
+
var isDecision = decision || (currentLineData === null || currentLineData === void 0 ? void 0 : currentLineData.type) === 'conversationalDecision'; // Force camera update (r3f selector not updating)
|
|
156
|
+
|
|
157
|
+
(0, _fiber.useFrame)(function (_ref3) {
|
|
158
|
+
var sceneCam = _ref3.camera;
|
|
159
|
+
actualCamera.current = sceneCam;
|
|
160
|
+
});
|
|
161
161
|
|
|
162
|
-
var
|
|
162
|
+
var _useState11 = (0, _react.useState)({
|
|
163
163
|
text: '',
|
|
164
164
|
name: '',
|
|
165
165
|
inScene: false,
|
|
@@ -168,9 +168,9 @@ var DialogComponent = function DialogComponent(_ref) {
|
|
|
168
168
|
avatar: '',
|
|
169
169
|
show: false
|
|
170
170
|
}),
|
|
171
|
-
|
|
172
|
-
currentMessage =
|
|
173
|
-
setCurrentMessage =
|
|
171
|
+
_useState12 = _slicedToArray(_useState11, 2),
|
|
172
|
+
currentMessage = _useState12[0],
|
|
173
|
+
setCurrentMessage = _useState12[1];
|
|
174
174
|
|
|
175
175
|
var charactersInvolved = (0, _react.useMemo)(function () {
|
|
176
176
|
return lines.reduce(function (acc, current) {
|
|
@@ -193,10 +193,10 @@ var DialogComponent = function DialogComponent(_ref) {
|
|
|
193
193
|
});
|
|
194
194
|
}, [emitEvent]);
|
|
195
195
|
|
|
196
|
-
var
|
|
197
|
-
|
|
198
|
-
edgesHistory =
|
|
199
|
-
setEdgesHistory =
|
|
196
|
+
var _useState13 = (0, _react.useState)([]),
|
|
197
|
+
_useState14 = _slicedToArray(_useState13, 2),
|
|
198
|
+
edgesHistory = _useState14[0],
|
|
199
|
+
setEdgesHistory = _useState14[1];
|
|
200
200
|
|
|
201
201
|
var lastNodeId = (0, _react.useMemo)(function () {
|
|
202
202
|
return edgesHistory[edgesHistory.length - 1];
|
|
@@ -251,13 +251,22 @@ var DialogComponent = function DialogComponent(_ref) {
|
|
|
251
251
|
|
|
252
252
|
var onLoadAnim = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {};
|
|
253
253
|
var animation;
|
|
254
|
+
var emotion = element.isSeated && !slot.emotion.includes('seated') ? "".concat(slot.emotion, "-seated") : slot.emotion;
|
|
254
255
|
|
|
255
256
|
if (slot !== null && slot !== void 0 && slot.animationId && slot !== null && slot !== void 0 && (_slot$animation = slot.animation) !== null && _slot$animation !== void 0 && _slot$animation.url) {
|
|
257
|
+
// force camera transition seated -> not seated
|
|
258
|
+
if (lastTalking.current && lastTalking.current.uid === element.uid) {
|
|
259
|
+
var currentIsSeated = slot.emotion.includes('seated');
|
|
260
|
+
var lastIsSeated = lastTalking.current.emotion.includes('seated');
|
|
261
|
+
if (currentIsSeated && !lastIsSeated) lastTalking.current = {};
|
|
262
|
+
if (!currentIsSeated && lastIsSeated) lastTalking.current = {};
|
|
263
|
+
}
|
|
264
|
+
|
|
256
265
|
animation = slot.animation;
|
|
257
266
|
} else {
|
|
258
267
|
var _slot$character2;
|
|
259
268
|
|
|
260
|
-
animation = (_slot$character2 = slot.character) === null || _slot$character2 === void 0 ? void 0 : _slot$character2.resource.animations[
|
|
269
|
+
animation = (_slot$character2 = slot.character) === null || _slot$character2 === void 0 ? void 0 : _slot$character2.resource.animations[emotion];
|
|
261
270
|
}
|
|
262
271
|
|
|
263
272
|
var mixer = element.userData.mixer;
|
|
@@ -290,6 +299,70 @@ var DialogComponent = function DialogComponent(_ref) {
|
|
|
290
299
|
mixer.stopAllAction();
|
|
291
300
|
defaultAction.play();
|
|
292
301
|
}
|
|
302
|
+
}; // Starts camera transition
|
|
303
|
+
|
|
304
|
+
|
|
305
|
+
var animateCameraTransition = function animateCameraTransition() {
|
|
306
|
+
if (!zoomStarted.current) {
|
|
307
|
+
var cam = actualCamera.current;
|
|
308
|
+
var targetPosition = messagePosition.current.child ? messagePosition.current.pos : defaultCamera.position.toArray();
|
|
309
|
+
animationTarget.position.fromArray(targetPosition);
|
|
310
|
+
|
|
311
|
+
if (messagePosition.current.parent) {
|
|
312
|
+
if (!animationTarget.quaternion.equals(cam.quaternion)) {
|
|
313
|
+
animationTarget.applyQuaternion(cam.quaternion);
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
var mult = messagePosition.current.isLeft ? -1 : 1;
|
|
317
|
+
var headSpace = headSize * mult;
|
|
318
|
+
animationTarget.translateX(-10 * mult + headSpace);
|
|
319
|
+
animationTarget.translateY(-2);
|
|
320
|
+
animationTarget.translateZ(30);
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
_gsap.default.to(cam.position, _objectSpread({
|
|
324
|
+
duration: 0.9,
|
|
325
|
+
ease: 'power3.easeInOut',
|
|
326
|
+
onStart: function onStart() {
|
|
327
|
+
zoomStarted.current = true;
|
|
328
|
+
},
|
|
329
|
+
onUpdate: function onUpdate() {
|
|
330
|
+
if (changedMats.current.length) {
|
|
331
|
+
changedMats.current.forEach(function (o) {
|
|
332
|
+
var object = o.object;
|
|
333
|
+
object.material.visible = true;
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
},
|
|
337
|
+
onComplete: function onComplete() {
|
|
338
|
+
if (onZoomEnd.current) {
|
|
339
|
+
onZoomEnd.current();
|
|
340
|
+
onZoomEnd.current = null;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
raycast.set(cam.getWorldPosition(new _three.Vector3(0, 0, 0)), cam.getWorldDirection(new _three.Vector3()));
|
|
344
|
+
var objects = raycast.intersectObjects(scene.children, true);
|
|
345
|
+
changedMats.current = objects.filter(function (o) {
|
|
346
|
+
return o.distance < 10;
|
|
347
|
+
}); // Make objects invisible in front of the camera
|
|
348
|
+
|
|
349
|
+
if (changedMats.current.length) {
|
|
350
|
+
changedMats.current.forEach(function (o) {
|
|
351
|
+
var object = o.object;
|
|
352
|
+
object.material.side = 0;
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
if (lastSet.current || !messagePosition.current.child) {
|
|
357
|
+
cam.copy(defaultCamera);
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
zoomStarted.current = false;
|
|
361
|
+
}
|
|
362
|
+
}, animationTarget.position));
|
|
363
|
+
} else if (zoomStarted.current) {
|
|
364
|
+
zoomStarted.current = false;
|
|
365
|
+
}
|
|
293
366
|
}; // Reset currentEmotion to defaultAnim
|
|
294
367
|
|
|
295
368
|
|
|
@@ -305,7 +378,7 @@ var DialogComponent = function DialogComponent(_ref) {
|
|
|
305
378
|
messagePosition.current.parent = null;
|
|
306
379
|
|
|
307
380
|
if (zoomInActor) {
|
|
308
|
-
|
|
381
|
+
animateCameraTransition();
|
|
309
382
|
}
|
|
310
383
|
}, [zoomInActor]);
|
|
311
384
|
|
|
@@ -367,6 +440,7 @@ var DialogComponent = function DialogComponent(_ref) {
|
|
|
367
440
|
|
|
368
441
|
(0, _react.useEffect)(function () {
|
|
369
442
|
return function () {
|
|
443
|
+
lastTalking.current = {};
|
|
370
444
|
resetAnims();
|
|
371
445
|
};
|
|
372
446
|
}, []);
|
|
@@ -584,37 +658,38 @@ var DialogComponent = function DialogComponent(_ref) {
|
|
|
584
658
|
|
|
585
659
|
if (element && !lastSet.current) {
|
|
586
660
|
loadEmotion(talkingCharacter, element, function (mixer, action, defaultAction) {
|
|
587
|
-
if (talkingCharacter.uid === element.uid) {
|
|
588
|
-
moveBubble(element);
|
|
589
|
-
|
|
590
|
-
var setMessage = function setMessage() {
|
|
591
|
-
var _talkingCharacter$cha5;
|
|
592
|
-
|
|
593
|
-
setCurrentMessage({
|
|
594
|
-
text: talkingCharacter.text,
|
|
595
|
-
name: talkingCharacter.alias || ((_talkingCharacter$cha5 = talkingCharacter.character) === null || _talkingCharacter$cha5 === void 0 ? void 0 : _talkingCharacter$cha5.name),
|
|
596
|
-
inScene: true,
|
|
597
|
-
thinkful: talkingCharacter.emotion === 'thinkful',
|
|
598
|
-
avatar: getAvatarURL(talkingCharacter),
|
|
599
|
-
show: true
|
|
600
|
-
});
|
|
601
|
-
};
|
|
602
|
-
|
|
603
|
-
if (zoomInActor) {
|
|
604
|
-
onZoomEnd.current = setMessage;
|
|
605
|
-
setAnimationRunning(true);
|
|
606
|
-
} else {
|
|
607
|
-
setMessage();
|
|
608
|
-
}
|
|
609
|
-
}
|
|
610
|
-
|
|
611
661
|
var startAction = element.userData.lastEmotion ? element.userData.lastEmotion : defaultAction;
|
|
612
662
|
|
|
613
663
|
if (startAction && action && startAction !== action) {
|
|
614
|
-
mixer.stopAllAction();
|
|
615
664
|
(0, _helpers.executeCrossFade)(startAction, action, crossFadeDuration);
|
|
616
665
|
element.userData.defaultAnim = action.getClip();
|
|
617
666
|
}
|
|
667
|
+
|
|
668
|
+
setTimeout(function () {
|
|
669
|
+
if (talkingCharacter.uid === element.uid) {
|
|
670
|
+
moveBubble(element);
|
|
671
|
+
|
|
672
|
+
var setMessage = function setMessage() {
|
|
673
|
+
var _talkingCharacter$cha5;
|
|
674
|
+
|
|
675
|
+
setCurrentMessage({
|
|
676
|
+
text: talkingCharacter.text,
|
|
677
|
+
name: talkingCharacter.alias || ((_talkingCharacter$cha5 = talkingCharacter.character) === null || _talkingCharacter$cha5 === void 0 ? void 0 : _talkingCharacter$cha5.name),
|
|
678
|
+
inScene: true,
|
|
679
|
+
thinkful: talkingCharacter.emotion === 'thinkful',
|
|
680
|
+
avatar: getAvatarURL(talkingCharacter),
|
|
681
|
+
show: true
|
|
682
|
+
});
|
|
683
|
+
};
|
|
684
|
+
|
|
685
|
+
if (zoomInActor) {
|
|
686
|
+
onZoomEnd.current = setMessage;
|
|
687
|
+
animateCameraTransition();
|
|
688
|
+
} else {
|
|
689
|
+
setMessage();
|
|
690
|
+
}
|
|
691
|
+
}
|
|
692
|
+
}, 150);
|
|
618
693
|
});
|
|
619
694
|
} else {
|
|
620
695
|
var _talkingCharacter$cha6;
|
|
@@ -638,7 +713,7 @@ var DialogComponent = function DialogComponent(_ref) {
|
|
|
638
713
|
});
|
|
639
714
|
}
|
|
640
715
|
}
|
|
641
|
-
}, [actors,
|
|
716
|
+
}, [actors, currentLineData, zoomInActor, getCurrentVisible, translate, getAvatarURL, loadEmotion, resetCameraView, isDecision, isVoiceOver, charactersInvolved]); // Sound logic
|
|
642
717
|
|
|
643
718
|
var stopEkho = (0, _useEkho.default)({
|
|
644
719
|
audioType: currentLineData === null || currentLineData === void 0 ? void 0 : currentLineData.audioType,
|
|
@@ -701,75 +776,11 @@ var DialogComponent = function DialogComponent(_ref) {
|
|
|
701
776
|
stop();
|
|
702
777
|
};
|
|
703
778
|
}, [currentMessage, nextLine, start, stop, currentLineData === null || currentLineData === void 0 ? void 0 : currentLineData.audioType, autoPlayCond, audio, voice, audioFailed]);
|
|
704
|
-
(0, _react.useEffect)(function () {
|
|
705
|
-
if (animationRunning && !zoomStarted.current) {
|
|
706
|
-
var cam = camera;
|
|
707
|
-
var targetPosition = messagePosition.current.child ? messagePosition.current.pos : defaultCamera.position.toArray();
|
|
708
|
-
animationTarget.current.position.fromArray(targetPosition);
|
|
709
|
-
|
|
710
|
-
if (messagePosition.current.parent) {
|
|
711
|
-
if (!animationTarget.current.quaternion.equals(cam.quaternion)) {
|
|
712
|
-
animationTarget.current.applyQuaternion(cam.quaternion);
|
|
713
|
-
}
|
|
714
|
-
|
|
715
|
-
var mult = messagePosition.current.isLeft ? -1 : 1;
|
|
716
|
-
var headSpace = headSize * mult;
|
|
717
|
-
animationTarget.current.translateX(-10 * mult + headSpace);
|
|
718
|
-
animationTarget.current.translateY(-2);
|
|
719
|
-
animationTarget.current.translateZ(30);
|
|
720
|
-
}
|
|
721
|
-
|
|
722
|
-
_gsap.default.to(cam.position, {
|
|
723
|
-
duration: 1,
|
|
724
|
-
ease: 'power3.easeInOut',
|
|
725
|
-
onStart: function onStart() {
|
|
726
|
-
zoomStarted.current = true;
|
|
727
|
-
},
|
|
728
|
-
onUpdate: function onUpdate() {
|
|
729
|
-
if (changedMats.current.length) {
|
|
730
|
-
changedMats.current.forEach(function (o) {
|
|
731
|
-
var object = o.object;
|
|
732
|
-
object.material.visible = true;
|
|
733
|
-
});
|
|
734
|
-
}
|
|
735
|
-
},
|
|
736
|
-
onComplete: function onComplete() {
|
|
737
|
-
onZoomEnd.current();
|
|
738
|
-
|
|
739
|
-
onZoomEnd.current = function () {};
|
|
740
|
-
|
|
741
|
-
zoomStarted.current = false;
|
|
742
|
-
setAnimationRunning(false);
|
|
743
|
-
raycast.set(cam.getWorldPosition(new _three.Vector3(0, 0, 0)), cam.getWorldDirection(new _three.Vector3()));
|
|
744
|
-
var objects = raycast.intersectObjects(scene.children, true);
|
|
745
|
-
changedMats.current = objects.filter(function (o) {
|
|
746
|
-
return o.distance < 10;
|
|
747
|
-
}); // Make objects invisible in front of the camera
|
|
748
|
-
|
|
749
|
-
if (changedMats.current.length) {
|
|
750
|
-
changedMats.current.forEach(function (o) {
|
|
751
|
-
var object = o.object;
|
|
752
|
-
object.material.side = 0;
|
|
753
|
-
});
|
|
754
|
-
}
|
|
755
|
-
|
|
756
|
-
if (lastSet.current || !messagePosition.current.child) {
|
|
757
|
-
cam.copy(defaultCamera);
|
|
758
|
-
}
|
|
759
|
-
},
|
|
760
|
-
x: animationTarget.current.position.x,
|
|
761
|
-
y: animationTarget.current.position.y,
|
|
762
|
-
z: animationTarget.current.position.z
|
|
763
|
-
});
|
|
764
|
-
} else if (zoomStarted.current) {
|
|
765
|
-
zoomStarted.current = false;
|
|
766
|
-
}
|
|
767
|
-
}, [animationRunning, camera]);
|
|
768
779
|
var disableBackButton = (0, _react.useMemo)(function () {
|
|
769
780
|
var disabled = line === 0 || previousLineWasDecision();
|
|
770
781
|
return disabled;
|
|
771
782
|
}, [line, previousLineWasDecision]);
|
|
772
|
-
keyboardControl(isDecision || disableBackButton ||
|
|
783
|
+
keyboardControl(isDecision || disableBackButton || !currentMessage.show ? null : manualBackLine, isDecision || !currentMessage.show ? null : manualNextLine);
|
|
773
784
|
var container = document.querySelector('.screens--container');
|
|
774
785
|
|
|
775
786
|
if (isDecision) {
|
|
@@ -819,15 +830,15 @@ var DialogComponent = function DialogComponent(_ref) {
|
|
|
819
830
|
}, /*#__PURE__*/_react.default.createElement("button", {
|
|
820
831
|
type: "button",
|
|
821
832
|
onClick: manualBackLine,
|
|
822
|
-
disabled: disableBackButton ||
|
|
823
|
-
className: "gat--btn__round ".concat(disableBackButton ||
|
|
833
|
+
disabled: disableBackButton || !currentMessage.show,
|
|
834
|
+
className: "gat--btn__round ".concat(disableBackButton || !currentMessage.show ? 'disabled' : '')
|
|
824
835
|
}, /*#__PURE__*/_react.default.createElement("span", {
|
|
825
836
|
className: (0, _LangIsRtl.default)() ? 'icon-next' : 'icon-back'
|
|
826
837
|
})), /*#__PURE__*/_react.default.createElement("button", {
|
|
827
838
|
type: "button",
|
|
828
839
|
onClick: manualNextLine,
|
|
829
|
-
disabled:
|
|
830
|
-
className: "gat--btn__round \n ".concat(
|
|
840
|
+
disabled: !currentMessage.show,
|
|
841
|
+
className: "gat--btn__round \n ".concat(!currentMessage.show ? 'disabled' : '', "\n ").concat(automatic && isEndNode() ? 'glowing-animation' : '')
|
|
831
842
|
}, /*#__PURE__*/_react.default.createElement("span", {
|
|
832
843
|
className: (0, _LangIsRtl.default)() ? 'icon-back' : 'icon-next'
|
|
833
844
|
})))));
|
|
@@ -67,7 +67,8 @@ var CurrentFramePuzzle = function CurrentFramePuzzle(_ref) {
|
|
|
67
67
|
resetValues = _ref.resetValues,
|
|
68
68
|
setResetValues = _ref.setResetValues,
|
|
69
69
|
pause = _ref.pause,
|
|
70
|
-
keyboardControl = _ref.keyboardControl
|
|
70
|
+
keyboardControl = _ref.keyboardControl,
|
|
71
|
+
totalCorrects = _ref.totalCorrects;
|
|
71
72
|
|
|
72
73
|
var _soundActions = _slicedToArray(soundActions, 1),
|
|
73
74
|
playSound = _soundActions[0];
|
|
@@ -154,6 +155,10 @@ var CurrentFramePuzzle = function CurrentFramePuzzle(_ref) {
|
|
|
154
155
|
}
|
|
155
156
|
}, [framesCompleted, specificFeedbacks === null || specificFeedbacks === void 0 ? void 0 : (_specificFeedbacks$co2 = specificFeedbacks.correctFeedbacks) === null || _specificFeedbacks$co2 === void 0 ? void 0 : _specificFeedbacks$co2.length, props.hasClickOnce, props.areas.length, props.hasClickOrder, setRewards, selected, puzzlesAutoCompleted, setSelected, index, list.length, setFramesCompleted, setIndex, handleFinish, emitEvent]);
|
|
156
157
|
var handleResolve = (0, _react.useCallback)(function () {
|
|
158
|
+
if (index >= list.length - 1) {
|
|
159
|
+
setSelected(totalCorrects);
|
|
160
|
+
}
|
|
161
|
+
|
|
157
162
|
playSound('score');
|
|
158
163
|
emitEvent({
|
|
159
164
|
type: 'hidePuzzleButtons',
|
|
@@ -167,10 +172,11 @@ var CurrentFramePuzzle = function CurrentFramePuzzle(_ref) {
|
|
|
167
172
|
action: 'resolve',
|
|
168
173
|
payload: {
|
|
169
174
|
element: puzzleId,
|
|
170
|
-
rewards: info.resolve.rewards
|
|
175
|
+
rewards: info.resolve.rewards,
|
|
176
|
+
finish: index + 1 >= list.length
|
|
171
177
|
}
|
|
172
178
|
});
|
|
173
|
-
}, [playSound, emitEvent, setPuzzlesAutoCompleted, puzzleId, info.resolve.rewards,
|
|
179
|
+
}, [index, list.length, playSound, emitEvent, setPuzzlesAutoCompleted, puzzleId, info.resolve.rewards, setSelected, totalCorrects]);
|
|
174
180
|
var handleResetPuzzle = (0, _react.useCallback)(function () {
|
|
175
181
|
setFramesCompleted({});
|
|
176
182
|
correctClicked.current = 0;
|
|
@@ -178,10 +184,10 @@ var CurrentFramePuzzle = function CurrentFramePuzzle(_ref) {
|
|
|
178
184
|
emitResetPuzzle();
|
|
179
185
|
}, [emitResetPuzzle, setFramesCompleted]);
|
|
180
186
|
(0, _react.useEffect)(function () {
|
|
181
|
-
if (loadPuzzleStatus) {
|
|
182
|
-
onComplete([], true,
|
|
187
|
+
if (loadPuzzleStatus && index !== list.length - 1) {
|
|
188
|
+
onComplete([], true, false);
|
|
183
189
|
}
|
|
184
|
-
}, [framesCompleted, loadPuzzleStatus, onComplete]);
|
|
190
|
+
}, [framesCompleted, index, list.length, loadPuzzleStatus, onComplete]);
|
|
185
191
|
|
|
186
192
|
var checkSelectedAreas = function checkSelectedAreas() {
|
|
187
193
|
var areasSelected = props.hasClickOnce ? props.areas.length : 1;
|
package/dist/components/frame-click-puzzle-component/components/FrameClickPuzzleComponent.js
CHANGED
|
@@ -173,7 +173,8 @@ var FrameImageClickComponent = function FrameImageClickComponent(_ref) {
|
|
|
173
173
|
puzzlesAutoCompleted: puzzlesAutoCompleted,
|
|
174
174
|
emitOpenPopupCounterInfo: onInitPuzzle,
|
|
175
175
|
pause: pause,
|
|
176
|
-
keyboardControl: keyboardControl
|
|
176
|
+
keyboardControl: keyboardControl,
|
|
177
|
+
totalCorrects: totalCorrects
|
|
177
178
|
};
|
|
178
179
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
179
180
|
className: "puzzle-frame"
|
package/dist/components/image-click-wrapper-component/components/ImageClickWrapperComponent.js
CHANGED
|
@@ -469,15 +469,18 @@ var ImageClickWrapperComponent = function ImageClickWrapperComponent(props) {
|
|
|
469
469
|
}, [createStartAndEndDate, defaultCompleted, firstTryForFrame, puzzlesAutoCompleted, slideNumber, timer]);
|
|
470
470
|
(0, _react.useEffect)(function () {
|
|
471
471
|
if (timer && countDownTime === 0) feedbackError();
|
|
472
|
-
}, [countDownTime, feedbackError, timer]);
|
|
472
|
+
}, [countDownTime, feedbackError, timer]); // only for frameclick
|
|
473
|
+
|
|
473
474
|
(0, _react.useEffect)(function () {
|
|
474
|
-
if (
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
475
|
+
if (timer) {
|
|
476
|
+
if (pause) {
|
|
477
|
+
clearIntervalForCountDown();
|
|
478
|
+
pauseTheCounter();
|
|
479
|
+
} else {
|
|
480
|
+
startCountDown();
|
|
481
|
+
}
|
|
479
482
|
}
|
|
480
|
-
}, [clearIntervalForCountDown, listenerForActualDate, pause, pauseTheCounter, startCountDown]);
|
|
483
|
+
}, [clearIntervalForCountDown, listenerForActualDate, pause, pauseTheCounter, startCountDown, timer]);
|
|
481
484
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
482
485
|
className: className
|
|
483
486
|
}, feedbackData.show ? /*#__PURE__*/_react.default.createElement(_FeedbackComponent.default, {
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@gamelearn/arcade-components",
|
|
3
3
|
"author": "Gamelearn",
|
|
4
4
|
"license": "unlicense",
|
|
5
|
-
"version": "2.
|
|
5
|
+
"version": "2.18.1",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"files": [
|
|
8
8
|
"dist",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
16
|
"@babel/runtime": "^7.18.6",
|
|
17
|
-
"@gamelearn/arcade-styles": "2.
|
|
17
|
+
"@gamelearn/arcade-styles": "2.12.0",
|
|
18
18
|
"@gamelearn/arcade-three-core": "1.17.2",
|
|
19
19
|
"@react-three/drei": "9.4.3",
|
|
20
20
|
"@react-three/fiber": "8.0.17",
|