Skip to content

Commit 71588d5

Browse files
committed
Refactor: Extract three.js scene assets from tsp model
1 parent 18d04b6 commit 71588d5

File tree

11 files changed

+874
-764
lines changed

11 files changed

+874
-764
lines changed

src/event/Handler3D.js

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/**
2+
* @author syt123450 / https://github.com/syt123450
3+
*/
4+
5+
function Handler3D( tspModel ) {
6+
7+
this.tspModel = tspModel;
8+
9+
/**
10+
* Record layer hovered by mouse now.
11+
*
12+
* @type { Layer }
13+
*/
14+
15+
this.hoveredLayer = undefined;
16+
17+
/**
18+
* Record Emissive element.
19+
*
20+
* @type { THREE.Object }
21+
*/
22+
23+
this.hoveredEmissive = undefined;
24+
25+
}
26+
27+
Handler3D.prototype = {
28+
29+
handleClick: function() {
30+
31+
},
32+
33+
handleHover: function( intersects ) {
34+
35+
}
36+
37+
};
38+
39+
export { Handler3D };

src/event/HandlerFactory.js

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/**
2+
* @author syt123450 / https://github.com/syt123450
3+
*/
4+
5+
import { SequentialHandler3D } from './SequentialHandler3D';
6+
import { ModelHandler3D } from './ModelHandler3D';
7+
8+
let HandlerFactory = ( function() {
9+
10+
function getEventHandler( tspModel ) {
11+
12+
if ( tspModel.modelType === "Sequential" ) {
13+
14+
return new SequentialHandler3D( tspModel );
15+
16+
} else if ( tspModel.modelType === "Model" ) {
17+
18+
return new ModelHandler3D( tspModel );
19+
20+
}
21+
22+
}
23+
24+
return {
25+
26+
getEventHandler: getEventHandler
27+
28+
}
29+
30+
} )();
31+
32+
export { HandlerFactory };

src/event/ModelHandler3D.js

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
/**
2+
* @author syt123450 / https://github.com/syt123450
3+
*/
4+
5+
import { Handler3D } from './Handler3D';
6+
7+
function ModelHandler3D( tspModel ) {
8+
9+
Handler3D.call( this, tspModel );
10+
11+
}
12+
13+
ModelHandler3D.prototype = Object.assign( Object.create( Handler3D.prototype ), {
14+
15+
handleClick: function( selectedElement ) {
16+
17+
// Let the layer to handle actual click event.
18+
19+
let selectedLayer = this.tspModel.layers[ selectedElement.layerIndex ];
20+
21+
selectedLayer.handleClick( selectedElement );
22+
23+
// Rearrange layer
24+
25+
let translateTime = selectedLayer.openTime;
26+
let level = this.tspModel.layerLookupMap[ selectedElement.layerIndex ];
27+
28+
this.tspModel.rearrangeLayerInLevel( level, translateTime );
29+
30+
},
31+
32+
handleHover: function( intersects ) {
33+
34+
if ( this.hoveredLayer !== undefined ) {
35+
36+
this.hoveredLayer.handleHoverOut();
37+
this.hoveredLayer = undefined;
38+
39+
}
40+
41+
if ( this.hoveredEmissive !== undefined ) {
42+
43+
this.hoveredEmissive.context.darken();
44+
this.hoveredEmissive = undefined;
45+
46+
}
47+
48+
for ( let i = 0; i < intersects.length; i ++ ) {
49+
50+
if ( intersects !== null && intersects.length > 0 && intersects[ i ].object.type === "Mesh" ) {
51+
52+
let selectedElement = intersects[ i ].object;
53+
54+
if ( selectedElement.hoverable === true ) {
55+
56+
if ( selectedElement.emissiveable ) {
57+
58+
this.hoveredEmissive = selectedElement;
59+
selectedElement.context.emissive();
60+
61+
}
62+
63+
let selectedLayer = this.tspModel.layers[ selectedElement.layerIndex ];
64+
65+
// Let the layer to handle actual hover event.
66+
67+
selectedLayer.handleHoverIn( selectedElement );
68+
69+
this.hoveredLayer = selectedLayer;
70+
71+
break;
72+
73+
}
74+
75+
}
76+
77+
}
78+
79+
}
80+
81+
} );
82+
83+
export { ModelHandler3D };

src/event/SequentialHandler3D.js

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
/**
2+
* @author syt123450 / https://github.com/syt123450
3+
*/
4+
5+
import { Handler3D } from './Handler3D';
6+
7+
function SequentialHandler3D( tspModel ) {
8+
9+
Handler3D.call( this, tspModel );
10+
11+
}
12+
13+
SequentialHandler3D.prototype = Object.assign( Object.create( Handler3D.prototype ), {
14+
15+
handleClick: function( selectedElement ) {
16+
17+
// Let the layer to handle actual click event.
18+
19+
let selectedLayer = this.tspModel.layers[ selectedElement.layerIndex - 1 ];
20+
21+
selectedLayer.handleClick( selectedElement );
22+
23+
},
24+
25+
handleHover: function( intersects ) {
26+
27+
if ( this.hoveredLayer !== undefined ) {
28+
29+
this.hoveredLayer.handleHoverOut();
30+
this.hoveredLayer = undefined;
31+
32+
}
33+
34+
if ( this.hoveredEmissive !== undefined ) {
35+
36+
this.hoveredEmissive.context.darken();
37+
this.hoveredEmissive = undefined;
38+
39+
}
40+
41+
for ( let i = 0; i < intersects.length; i ++ ) {
42+
43+
if ( intersects !== null && intersects.length > 0 && intersects[ i ].object.type === "Mesh" ) {
44+
45+
let selectedElement = intersects[ i ].object;
46+
47+
if ( selectedElement.hoverable === true ) {
48+
49+
if ( selectedElement.emissiveable ) {
50+
51+
this.hoveredEmissive = selectedElement;
52+
selectedElement.context.emissive();
53+
54+
}
55+
56+
let selectedLayer = this.tspModel.layers[ selectedElement.layerIndex - 1 ];
57+
58+
// Let the layer to handle actual hover event.
59+
60+
selectedLayer.handleHoverIn( selectedElement );
61+
62+
this.hoveredLayer = selectedLayer;
63+
64+
break;
65+
66+
}
67+
68+
}
69+
70+
}
71+
72+
}
73+
74+
} );
75+
76+
export { SequentialHandler3D };

src/renderer/ModelRenderer.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/**
2+
* @author syt123450 / https://github.com/syt123450
3+
*/
4+
5+
function ModelRenderer( tspModel, handlers ) {
6+
7+
this.tspModel = tspModel;
8+
this.handlers = handlers;
9+
10+
}
11+
12+
ModelRenderer.prototype = {
13+
14+
init: function() {
15+
16+
},
17+
18+
reset: function() {
19+
20+
}
21+
22+
};
23+
24+
export { ModelRenderer };

src/renderer/RendererFactory.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/**
2+
* @author syt123450 / https://github.com/syt123450
3+
*/
4+
5+
import { HandlerFactory } from '../event/HandlerFactory';
6+
import { Web3DRenderer } from './Web3DRenderer';
7+
8+
let RendererFactory = ( function() {
9+
10+
function getRenderer( tspModel ) {
11+
12+
let eventHandler = HandlerFactory.getEventHandler( tspModel );
13+
14+
return new Web3DRenderer( tspModel, eventHandler );
15+
16+
}
17+
18+
return {
19+
20+
getRenderer: getRenderer
21+
22+
}
23+
24+
} )();
25+
26+
export { RendererFactory };

0 commit comments

Comments
 (0)