-
Notifications
You must be signed in to change notification settings - Fork 2
/
index.js
98 lines (80 loc) · 2.5 KB
/
index.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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
/**
* A-Frame Wrapper for THREE.JS RectAreaLight
* @author Mo Kargas (DEVLAD) [email protected]
*/
/* global AFRAME */
/* global THREE */
if (typeof AFRAME === 'undefined') {
throw new Error('Component attempted to register before AFRAME was available.')
}
if (typeof THREE === 'undefined') {
throw new Error('Component attempted to register before THREE was available.')
}
AFRAME.registerComponent('area-light', {
schema: {
intensity: {
type: 'number',
default: 1.0
},
color: {
type: 'color',
default: '#FFFFFF'
},
width: {
type: 'number',
default: 2.0
},
height: {
type: 'number',
default: 2.0
},
helperColor: {
type: 'color',
default: undefined
},
showHelper: {
type: 'boolean',
default: true
},
},
init: function() {
this.setHelperColor = this.setHelperColor.bind(this)
this.rectLight = new THREE.RectAreaLight(this.data.color, this.data.intensity, this.data.width, this.data.height)
this.rectLight.position.set(this.data.width / 2, 0, 0)
this.el.object3D.add(this.rectLight)
//Helper set, assign to scene
if (this.data.showHelper) {
this.rectLightHelper = new THREE.RectAreaLightHelper(this.rectLight)
this.rectLightHelper.position.set(this.rectLight.position.x, 0, 0)
this.el.object3D.add(this.rectLightHelper)
//Determine if we have a different helperColor set
if (this.data.helperColor !== undefined) {
this.setHelperColor(this.data.helperColor)
} else {
this.setHelperColor(this.data.color)
}
}
},
setHelperColor: function(color) {
//Set helper material color if enabled
//NOTE: RectLightHelper consists of submeshes https://github.com/mrdoob/three.js/blob/master/src/helpers/RectAreaLightHelper.js
this.rectLightHelper.children.forEach(node => node.material.color.set(color))
},
update: function(oldData) {
//Update light values
this.rectLight.intensity = this.data.intensity
this.rectLight.width = this.data.width
this.rectLight.height = this.data.height
this.rectLight.color.set( this.data.color )
if (this.rectLightHelper !== undefined) {
this.rectLightHelper.visible = this.data.showHelper
//Update, as child light may have changed dimensions
this.rectLightHelper.update()
if (this.data.helperColor !== undefined) {
this.setHelperColor(this.data.helperColor)
} else {
this.setHelperColor(this.data.color)
}
}
}
});