forked from c-frame/aframe-extras
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy patha-hexgrid.js
63 lines (60 loc) · 1.51 KB
/
a-hexgrid.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
var vg = require('../../lib/hex-grid.min.js');
var defaultHexGrid = require('../../lib/default-hex-grid.json');
/**
* Hex grid.
*/
var Primitive = module.exports.Primitive = {
defaultComponents: {
'hexgrid': {}
},
mappings: {
src: 'hexgrid.src'
}
};
var Component = module.exports.Component = {
dependencies: ['material'],
schema: {
src: {type: 'asset'}
},
init: function () {
var data = this.data;
if (data.src) {
fetch(data.src)
.then(function (response) { response.json(); })
.then(function (json) { this.addMesh(json); });
} else {
this.addMesh(defaultHexGrid);
}
},
addMesh: function (json) {
var grid = new vg.HexGrid();
grid.fromJSON(json);
var board = new vg.Board(grid);
board.generateTilemap();
this.el.setObject3D('mesh', board.group);
this.addMaterial();
},
addMaterial: function () {
var materialComponent = this.el.components.material;
var material = (materialComponent || {}).material;
if (!material) return;
this.el.object3D.traverse(function (node) {
if (node.isMesh) {
node.material = material;
}
});
},
remove: function () {
this.el.removeObject3D('mesh');
}
};
module.exports.registerAll = (function () {
var registered = false;
return function (AFRAME) {
if (registered) return;
AFRAME = AFRAME || window.AFRAME;
AFRAME.registerComponent('hexgrid', Component);
AFRAME.registerPrimitive('a-hexgrid', Primitive);
registered = true;
};
}());