@gamelearn/arcade-components 1.24.4 → 1.26.0

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.
@@ -64,6 +64,7 @@ var CurrentImageClickPuzzle = function CurrentImageClickPuzzle(_ref) {
64
64
  index = _useState2[0],
65
65
  setIndex = _useState2[1];
66
66
 
67
+ var resolvedItems = (0, _react.useRef)({});
67
68
  var puzzleId = "chained-image-click-puzzle_".concat(index, "_").concat(nodeId);
68
69
 
69
70
  var _soundActions = _slicedToArray(soundActions, 1),
@@ -152,7 +153,8 @@ var CurrentImageClickPuzzle = function CurrentImageClickPuzzle(_ref) {
152
153
  action: 'resolve',
153
154
  payload: {
154
155
  element: puzzleId,
155
- rewards: info.resolve.rewards
156
+ rewards: info.resolve.rewards,
157
+ finish: index + 1 >= list.length
156
158
  }
157
159
  });
158
160
  };
@@ -163,8 +165,9 @@ var CurrentImageClickPuzzle = function CurrentImageClickPuzzle(_ref) {
163
165
  }));
164
166
  }, [info, setInfo, puzzleId]);
165
167
  (0, _react.useEffect)(function () {
166
- if (currentPuzzleStatus) {
168
+ if (currentPuzzleStatus && !resolvedItems.current[puzzleId]) {
167
169
  onComplete([], true, true);
170
+ resolvedItems.current[puzzleId] = true;
168
171
  }
169
172
  }, [onComplete, puzzleId, currentPuzzleStatus]);
170
173
  return /*#__PURE__*/_react.default.createElement(_imageClickWrapperComponent.default, _extends({
@@ -382,7 +382,36 @@ var DialogComponent = function DialogComponent(_ref) {
382
382
  }
383
383
  }
384
384
  }
385
- }, [edges, isBranched, lines, mounted]); // Position bubble over talking character/and switch emotions
385
+ }, [edges, isBranched, lines, mounted]);
386
+
387
+ var moveBubble = function moveBubble(element, target, showArrowTop) {
388
+ element.updateMatrix();
389
+ element.updateMatrixWorld();
390
+ var head = element.getObjectByName('Head_M');
391
+ head.updateMatrix();
392
+ head.updateMatrixWorld();
393
+ head.getWorldPosition(target.position);
394
+ target.applyQuaternion(camera.quaternion);
395
+ var distance = camera.position.distanceTo(target.position);
396
+ var staticDisplay = distance > 70 && !zoomInActor && !showArrowTop;
397
+ target.translateY(staticDisplay || showArrowTop ? 0 : 2); // Detectar posicion de personaje a izq o derecha de pantalla
398
+
399
+ var vector = new _three.Vector3();
400
+ vector.setFromMatrixPosition(head.matrixWorld);
401
+ var p = vector.project(defaultCamera);
402
+ target.translateX(headSize);
403
+ var isLeft = p.x < 0;
404
+ messagePosition.current = {
405
+ pos: target.position.toArray(),
406
+ child: head,
407
+ parent: element,
408
+ isLeft: isLeft
409
+ };
410
+ return {
411
+ distance: distance
412
+ };
413
+ }; // Position bubble over talking character/and switch emotions
414
+
386
415
 
387
416
  (0, _react.useEffect)(function () {
388
417
  if (isDecision) {
@@ -450,29 +479,8 @@ var DialogComponent = function DialogComponent(_ref) {
450
479
  setTimeout(function () {
451
480
  if (talkingCharacter.uid === element.uid) {
452
481
  var showArrowTop = talkingCharacter.text.length > maxCharacterToSwitch;
453
- element.updateMatrix();
454
- element.updateMatrixWorld();
455
- var head = element.getObjectByName('Head_M');
456
482
  var target = new _three.Object3D();
457
- head.updateMatrix();
458
- head.updateMatrixWorld();
459
- head.getWorldPosition(target.position);
460
- target.applyQuaternion(camera.quaternion);
461
- var distance = camera.position.distanceTo(target.position);
462
- var staticDisplay = distance > 70 && !zoomInActor && !showArrowTop;
463
- target.translateY(staticDisplay || showArrowTop ? 0 : 3); // Detectar posicion de personaje a izq o derecha de pantalla
464
-
465
- var vector = new _three.Vector3();
466
- vector.setFromMatrixPosition(head.matrixWorld);
467
- var p = vector.project(defaultCamera);
468
- target.translateX(headSize);
469
- var isLeft = p.x < 0;
470
- messagePosition.current = {
471
- pos: target.position.toArray(),
472
- child: head,
473
- parent: element,
474
- isLeft: isLeft
475
- };
483
+ moveBubble(element, target, showArrowTop);
476
484
 
477
485
  if (zoomInActor) {
478
486
  setAnimationRunning(true);
@@ -482,7 +490,9 @@ var DialogComponent = function DialogComponent(_ref) {
482
490
  setTimeout(function () {
483
491
  var _talkingCharacter$cha;
484
492
 
485
- distance = camera.position.distanceTo(target.position);
493
+ var _moveBubble = moveBubble(element, target, showArrowTop),
494
+ distance = _moveBubble.distance;
495
+
486
496
  setCurrentMessage({
487
497
  text: talkingCharacter.text,
488
498
  name: talkingCharacter.alias || ((_talkingCharacter$cha = talkingCharacter.character) === null || _talkingCharacter$cha === void 0 ? void 0 : _talkingCharacter$cha.name),
@@ -571,7 +581,9 @@ var DialogComponent = function DialogComponent(_ref) {
571
581
  var y = bubbleRect.y - bubbleRect.height;
572
582
 
573
583
  if (!messagePosition.current.isLeft || (x < 0 || x > window.innerWidth) && currentMessage.inScene) {
574
- var child = messagePosition.current.child;
584
+ var _messagePosition$curr = messagePosition.current,
585
+ child = _messagePosition$curr.child,
586
+ parent = _messagePosition$curr.parent;
575
587
 
576
588
  if (child) {
577
589
  var target = new _three.Object3D();
@@ -579,6 +591,7 @@ var DialogComponent = function DialogComponent(_ref) {
579
591
  target.applyQuaternion(camera.quaternion);
580
592
  groupRef.current.position.copy(target.position);
581
593
  groupRef.current.updateMatrixWorld();
594
+ moveBubble(parent, target, false);
582
595
  var divider = isMobile ? 10 : 6;
583
596
  var distanceX = bubbleRect.width + bubbleRect.width / divider;
584
597
  bubbleRef.current.parentNode.style.transform = "translate3d(-".concat(distanceX, "px, -").concat(bubbleRect.height, "px, 0px)");
@@ -50,6 +50,7 @@ var MAX_EXTRA_LETTERS = 8;
50
50
 
51
51
  var AnswerPanel = function AnswerPanel(_ref) {
52
52
  var answer = _ref.answer,
53
+ flickerPosition = _ref.flickerPosition,
53
54
  _ref$show = _ref.show,
54
55
  show = _ref$show === void 0 ? false : _ref$show;
55
56
  var words = [];
@@ -64,6 +65,8 @@ var AnswerPanel = function AnswerPanel(_ref) {
64
65
  if (a.char === ' ') {
65
66
  wordIndex += 1;
66
67
  }
68
+
69
+ a.positionInitial = a.index;
67
70
  });
68
71
  return words.map(function (word, index) {
69
72
  return /*#__PURE__*/_react.default.createElement("div", {
@@ -84,7 +87,7 @@ var AnswerPanel = function AnswerPanel(_ref) {
84
87
  fixed = _ref3.fixed;
85
88
  return /*#__PURE__*/_react.default.createElement("span", {
86
89
  key: "".concat(char + i),
87
- className: "puzzle--hanged__letter ".concat(!fixed ? 'active' : '')
90
+ className: "puzzle--hanged__letter ".concat(!fixed ? 'active' : '', " ").concat(word[i].positionInitial === flickerPosition ? 'fakeFocus' : '')
88
91
  }, char);
89
92
  }));
90
93
  });
@@ -111,40 +114,50 @@ var HangedPuzzleComponent = function HangedPuzzleComponent(_ref4) {
111
114
 
112
115
  var imgURL = ((_image$img = image.img) === null || _image$img === void 0 ? void 0 : _image$img.url) || defaultImage;
113
116
 
114
- var _useState = (0, _react.useState)([]),
117
+ var _useState = (0, _react.useState)(0),
115
118
  _useState2 = _slicedToArray(_useState, 2),
116
- poolLetters = _useState2[0],
117
- setPoolLetters = _useState2[1];
119
+ flickerPosition = _useState2[0],
120
+ setFlickerPosition = _useState2[1];
118
121
 
119
122
  var _useState3 = (0, _react.useState)(false),
120
123
  _useState4 = _slicedToArray(_useState3, 2),
121
- mounted = _useState4[0],
122
- setMounted = _useState4[1];
124
+ playerHasFailAtLeastOneTime = _useState4[0],
125
+ setPlayerHasFailAtLeastOneTime = _useState4[1];
123
126
 
124
127
  var _useState5 = (0, _react.useState)([]),
125
128
  _useState6 = _slicedToArray(_useState5, 2),
126
- resolvedAnswer = _useState6[0],
127
- setAnswer = _useState6[1];
129
+ poolLetters = _useState6[0],
130
+ setPoolLetters = _useState6[1];
128
131
 
129
- var _useState7 = (0, _react.useState)(''),
132
+ var _useState7 = (0, _react.useState)(false),
130
133
  _useState8 = _slicedToArray(_useState7, 2),
131
- resolvedClass = _useState8[0],
132
- setResolveClass = _useState8[1];
134
+ mounted = _useState8[0],
135
+ setMounted = _useState8[1];
133
136
 
134
- var _useState9 = (0, _react.useState)(false),
137
+ var _useState9 = (0, _react.useState)([]),
135
138
  _useState10 = _slicedToArray(_useState9, 2),
136
- disabled = _useState10[0],
137
- setDisable = _useState10[1];
139
+ resolvedAnswer = _useState10[0],
140
+ setAnswer = _useState10[1];
138
141
 
139
- var _useState11 = (0, _react.useState)([]),
142
+ var _useState11 = (0, _react.useState)(''),
140
143
  _useState12 = _slicedToArray(_useState11, 2),
141
- accRewards = _useState12[0],
142
- setRewards = _useState12[1];
144
+ resolvedClass = _useState12[0],
145
+ setResolveClass = _useState12[1];
143
146
 
144
147
  var _useState13 = (0, _react.useState)(false),
145
148
  _useState14 = _slicedToArray(_useState13, 2),
146
- showCorrectSolution = _useState14[0],
147
- setCorrectSolution = _useState14[1];
149
+ disabled = _useState14[0],
150
+ setDisable = _useState14[1];
151
+
152
+ var _useState15 = (0, _react.useState)([]),
153
+ _useState16 = _slicedToArray(_useState15, 2),
154
+ accRewards = _useState16[0],
155
+ setRewards = _useState16[1];
156
+
157
+ var _useState17 = (0, _react.useState)(false),
158
+ _useState18 = _slicedToArray(_useState17, 2),
159
+ showCorrectSolution = _useState18[0],
160
+ setCorrectSolution = _useState18[1];
148
161
 
149
162
  var translatedAnswer = answer.toUpperCase().split('');
150
163
  var answerPanel = translatedAnswer.filter(function (char) {
@@ -258,6 +271,10 @@ var HangedPuzzleComponent = function HangedPuzzleComponent(_ref4) {
258
271
  });
259
272
  setPoolLetters(restoredPool);
260
273
  setAnswer(newAnswer);
274
+ var newCursorPosition = newAnswer.find(function (el) {
275
+ return el.char === '';
276
+ });
277
+ setFlickerPosition(newCursorPosition.index);
261
278
  };
262
279
 
263
280
  var addCharacter = function addCharacter(character, index) {
@@ -280,12 +297,36 @@ var HangedPuzzleComponent = function HangedPuzzleComponent(_ref4) {
280
297
  }).length;
281
298
  setPoolLetters(newPool);
282
299
  setAnswer(newAnswer);
300
+ getCursorPosition();
283
301
 
284
302
  if (responsedChar === resolvedAnswer.length) {
285
303
  resolvePuzzle(newAnswer, newPool);
286
304
  }
287
305
  };
288
306
 
307
+ var getCursorPosition = function getCursorPosition() {
308
+ if (!playerHasFailAtLeastOneTime) {
309
+ var _resolvedAnswer;
310
+
311
+ var cursorPosition = resolvedAnswer.find(function (el) {
312
+ return el.char === '';
313
+ });
314
+ setFlickerPosition(cursorPosition.index + 1);
315
+
316
+ if (((_resolvedAnswer = resolvedAnswer[cursorPosition.index + 1]) === null || _resolvedAnswer === void 0 ? void 0 : _resolvedAnswer.letter) === ' ') {
317
+ setFlickerPosition(cursorPosition.index + 2);
318
+ }
319
+ } else {
320
+ var _cursorPosition = resolvedAnswer.find(function (el) {
321
+ return el.index !== flickerPosition && el.letter !== ' ' && el.char === '' && el.poolIndex === false;
322
+ });
323
+
324
+ if (_cursorPosition) {
325
+ setFlickerPosition(_cursorPosition.index);
326
+ }
327
+ }
328
+ };
329
+
289
330
  var removeCharacter = function removeCharacter() {
290
331
  playSound('click-ui');
291
332
  var newCharacter = resolvedAnswer.map(function (letter, index) {
@@ -317,6 +358,7 @@ var HangedPuzzleComponent = function HangedPuzzleComponent(_ref4) {
317
358
  });
318
359
  setPoolLetters(newPool);
319
360
  setAnswer(newAnswer);
361
+ setFlickerPosition(newCharacter.index);
320
362
  }
321
363
  };
322
364
 
@@ -352,6 +394,7 @@ var HangedPuzzleComponent = function HangedPuzzleComponent(_ref4) {
352
394
  emitEvent({
353
395
  type: 'failPuzzle'
354
396
  });
397
+ setPlayerHasFailAtLeastOneTime(true);
355
398
  };
356
399
 
357
400
  var resolvePuzzle = function resolvePuzzle(newAnswer, newPool) {
@@ -403,6 +446,10 @@ var HangedPuzzleComponent = function HangedPuzzleComponent(_ref4) {
403
446
  handleClose();
404
447
  } else {
405
448
  handleFail();
449
+ var cursorPosition = resolvedAnswer.find(function (el) {
450
+ return el.char === '';
451
+ });
452
+ setFlickerPosition(cursorPosition.index);
406
453
  }
407
454
  };
408
455
 
@@ -460,6 +507,7 @@ var HangedPuzzleComponent = function HangedPuzzleComponent(_ref4) {
460
507
  answer: answer.split(''),
461
508
  show: true
462
509
  }) : /*#__PURE__*/_react.default.createElement(AnswerPanel, {
510
+ flickerPosition: flickerPosition,
463
511
  answer: resolvedAnswer
464
512
  })), /*#__PURE__*/_react.default.createElement("div", {
465
513
  className: "puzzle--hanged__keyboard"
@@ -74,7 +74,7 @@ var UrlComponent = function UrlComponent(_ref) {
74
74
  }, /*#__PURE__*/_react.default.createElement("span", {
75
75
  className: "icon-close"
76
76
  })) : null, /*#__PURE__*/_react.default.createElement("span", {
77
- className: "popup--link__title popup--link__lineclamp"
77
+ className: "popup--link__title"
78
78
  }, name), /*#__PURE__*/_react.default.createElement("span", {
79
79
  className: "popup--link__desc"
80
80
  }, text), /*#__PURE__*/_react.default.createElement("a", {
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@gamelearn/arcade-components",
3
3
  "author": "Gamelearn",
4
4
  "license": "unlicense",
5
- "version": "1.24.4",
5
+ "version": "1.26.0",
6
6
  "main": "dist/index.js",
7
7
  "files": [
8
8
  "dist",
@@ -13,8 +13,8 @@
13
13
  "url": "https://github.com/gamelearn/arcade-components"
14
14
  },
15
15
  "dependencies": {
16
- "@gamelearn/arcade-styles": "0.12.0",
17
- "@gamelearn/arcade-three-core": "1.12.0",
16
+ "@gamelearn/arcade-styles": "0.13.0",
17
+ "@gamelearn/arcade-three-core": "1.13.0",
18
18
  "@react-three/drei": "9.4.3",
19
19
  "@react-three/fiber": "8.0.10",
20
20
  "@testing-library/jest-dom": "^5.16.4",