1
- /* global document, window, Live2D */
1
+ /* global document, window, Event, Live2D */
2
2
import { L2DMatrix44 , L2DTargetPoint , L2DViewMatrix } from './Live2DFramework.js' ;
3
3
import LAppDefine from './LAppDefine.js' ;
4
4
import MatrixStack from './utils/MatrixStack.js' ;
@@ -22,8 +22,8 @@ function normalizePoint(x, y, x0, y0, w, h) {
22
22
targetY = dy / y0 ;
23
23
}
24
24
return {
25
- x : targetX ,
26
- y : - targetY
25
+ vx : targetX ,
26
+ vy : - targetY
27
27
} ;
28
28
}
29
29
@@ -41,7 +41,6 @@ class Cubism2Model {
41
41
this . projMatrix = null ; /*new L2DMatrix44()*/
42
42
this . deviceToScreen = null ; /*new L2DMatrix44();*/
43
43
44
- this . drag = false ;
45
44
this . oldLen = 0 ;
46
45
47
46
this . _boundMouseEvent = this . mouseEvent . bind ( this ) ;
@@ -55,10 +54,8 @@ class Cubism2Model {
55
54
this . canvas . addEventListener ( 'mousewheel' , this . _boundMouseEvent , false ) ;
56
55
this . canvas . addEventListener ( 'click' , this . _boundMouseEvent , false ) ;
57
56
58
- this . canvas . addEventListener ( 'mousedown' , this . _boundMouseEvent , false ) ;
59
57
document . addEventListener ( 'mousemove' , this . _boundMouseEvent , false ) ;
60
58
61
- this . canvas . addEventListener ( 'mouseup' , this . _boundMouseEvent , false ) ;
62
59
document . addEventListener ( 'mouseout' , this . _boundMouseEvent , false ) ;
63
60
this . canvas . addEventListener ( 'contextmenu' , this . _boundMouseEvent , false ) ;
64
61
@@ -123,10 +120,8 @@ class Cubism2Model {
123
120
if ( this . canvas ) {
124
121
this . canvas . removeEventListener ( 'mousewheel' , this . _boundMouseEvent , false ) ;
125
122
this . canvas . removeEventListener ( 'click' , this . _boundMouseEvent , false ) ;
126
- this . canvas . removeEventListener ( 'mousedown' , this . _boundMouseEvent , false ) ;
127
- this . canvas . removeEventListener ( 'mousemove' , this . _boundMouseEvent , false ) ;
128
- this . canvas . removeEventListener ( 'mouseup' , this . _boundMouseEvent , false ) ;
129
- this . canvas . removeEventListener ( 'mouseout' , this . _boundMouseEvent , false ) ;
123
+ document . removeEventListener ( 'mousemove' , this . _boundMouseEvent , false ) ;
124
+ document . removeEventListener ( 'mouseout' , this . _boundMouseEvent , false ) ;
130
125
this . canvas . removeEventListener ( 'contextmenu' , this . _boundMouseEvent , false ) ;
131
126
132
127
this . canvas . removeEventListener ( 'touchstart' , this . _boundTouchEvent , false ) ;
@@ -227,13 +222,9 @@ class Cubism2Model {
227
222
}
228
223
229
224
modelTurnHead ( event ) {
230
- this . drag = true ;
231
-
232
225
const rect = this . canvas . getBoundingClientRect ( ) ;
233
226
234
- const target = normalizePoint ( event . clientX , event . clientY , rect . left + rect . width / 2 , rect . top + rect . height / 2 , window . innerWidth , window . innerHeight ) ;
235
- const vx = target . x ;
236
- const vy = target . y ;
227
+ const { vx, vy } = normalizePoint ( event . clientX , event . clientY , rect . left + rect . width / 2 , rect . top + rect . height / 2 , window . innerWidth , window . innerHeight ) ;
237
228
238
229
logger . trace (
239
230
'onMouseDown device( x:' +
@@ -249,13 +240,16 @@ class Cubism2Model {
249
240
250
241
this . dragMgr . setPoint ( vx , vy ) ;
251
242
this . live2DMgr . tapEvent ( vx , vy ) ;
243
+
244
+ if ( this . live2DMgr ?. model . hitTest ( LAppDefine . HIT_AREA_BODY , vx , vy ) ) {
245
+ window . dispatchEvent ( new Event ( 'live2d:tapbody' ) ) ;
246
+ }
252
247
}
253
248
254
249
followPointer ( event ) {
255
250
const rect = event . target . getBoundingClientRect ( ) ;
256
251
257
- const vx = this . transformViewX ( event . clientX - rect . left ) ;
258
- const vy = this . transformViewY ( event . clientY - rect . top ) ;
252
+ const { vx, vy } = normalizePoint ( event . clientX , event . clientY , rect . left + rect . width / 2 , rect . top + rect . height / 2 , window . innerWidth , window . innerHeight ) ;
259
253
260
254
logger . trace (
261
255
'onMouseMove device( x:' +
@@ -269,36 +263,27 @@ class Cubism2Model {
269
263
')' ,
270
264
) ;
271
265
272
- if ( this . drag ) {
273
- this . dragMgr . setPoint ( vx , vy ) ;
266
+ this . dragMgr . setPoint ( vx , vy ) ;
267
+
268
+ if ( this . live2DMgr ?. model . hitTest ( LAppDefine . HIT_AREA_BODY , vx , vy ) ) {
269
+ window . dispatchEvent ( new Event ( 'live2d:hoverbody' ) ) ;
274
270
}
275
271
}
276
272
277
273
lookFront ( ) {
278
- if ( this . drag ) {
279
- this . drag = false ;
280
- }
281
-
282
274
this . dragMgr . setPoint ( 0 , 0 ) ;
283
275
}
284
276
285
277
mouseEvent ( e ) {
286
278
e . preventDefault ( ) ;
287
279
288
280
if ( e . type == 'mousewheel' ) {
289
- if (
290
- e . clientX < 0 ||
291
- this . canvas . clientWidth < e . clientX ||
292
- e . clientY < 0 ||
293
- this . canvas . clientHeight < e . clientY
294
- ) {
295
- return ;
296
- }
297
-
298
281
if ( e . wheelDelta > 0 ) this . modelScaling ( 1.1 ) ;
299
- else this . modelScaling ( 0.9 ) ;
300
- } else if ( e . type == 'mousemove ' ) {
282
+ else this . modelScaling ( 1 ) ;
283
+ } else if ( e . type == 'click' || e . type == 'contextmenu ') {
301
284
this . modelTurnHead ( e ) ;
285
+ } else if ( e . type == 'mousemove' ) {
286
+ this . followPointer ( e ) ;
302
287
} else if ( e . type == 'mouseout' ) {
303
288
this . lookFront ( ) ;
304
289
}
0 commit comments