Scene.js 3.0 KB
Newer Older
M
Mr.doob 已提交
1 2
/**
 * @author mr.doob / http://mrdoob.com/
3
 * @author mikael emtinger / http://gomo.se/
M
Mr.doob 已提交
4 5
 */

M
Mr.doob 已提交
6
THREE.Scene = function () {
7

M
Mr.doob 已提交
8
	THREE.Object3D.call( this );
9

10 11 12 13
	this.matrixAutoUpdate = false;

	this.fog = null;

M
Mr.doob 已提交
14 15
	this.overrideMaterial = null;

A
alteredq 已提交
16
	this.collisions = null;
17

18
	this.objects = [];
M
Mr.doob 已提交
19 20
	this.lights = [];

21 22
	this.__objectsAdded = [];
	this.__objectsRemoved = [];
M
Mr.doob 已提交
23

24
};
M
Mr.doob 已提交
25

M
Mr.doob 已提交
26
THREE.Scene.prototype = new THREE.Object3D();
27
THREE.Scene.prototype.constructor = THREE.Scene;
M
Mr.doob 已提交
28
THREE.Scene.prototype.supr = THREE.Object3D.prototype;
M
Mr.doob 已提交
29

30
THREE.Scene.prototype.add = function ( object ) {
31

32 33
	this.supr.add.call( this, object );
	this.addChildRecurse( object );
34

35
}
36

37
THREE.Scene.prototype.addChildRecurse = function ( child ) {
M
Mr.doob 已提交
38 39 40

	if ( child instanceof THREE.Light ) {

41
		if ( this.lights.indexOf( child ) === - 1 ) {
M
Mr.doob 已提交
42 43 44 45 46 47 48

			this.lights.push( child );

		}

	} else if ( !( child instanceof THREE.Camera || child instanceof THREE.Bone ) ) {

49
		if ( this.objects.indexOf( child ) === - 1 ) {
M
Mr.doob 已提交
50

A
alteredq 已提交
51
			this.objects.push( child );
52
			this.__objectsAdded.push( child );
53

M
Mr.doob 已提交
54 55
		}

56
	}
M
Mr.doob 已提交
57

58
	for ( var c = 0; c < child.children.length; c ++ ) {
M
Mr.doob 已提交
59

A
alteredq 已提交
60
		this.addChildRecurse( child.children[ c ] );
61

M
Mr.doob 已提交
62 63
	}

64
}
65

66
THREE.Scene.prototype.remove = function ( object ) {
67

68 69
	this.supr.remove.call( this, object );
	this.removeChildRecurse( object );
70

71
}
M
Mr.doob 已提交
72

73
THREE.Scene.prototype.removeChildRecurse = function ( child ) {
M
Mr.doob 已提交
74 75 76

	if ( child instanceof THREE.Light ) {

A
alteredq 已提交
77
		var i = this.lights.indexOf( child );
M
Mr.doob 已提交
78 79 80

		if ( i !== -1 ) {

81
			this.lights.splice( i, 1 );
M
Mr.doob 已提交
82

M
Mr.doob 已提交
83 84 85 86
		}

	} else if ( !( child instanceof THREE.Camera ) ) {

A
alteredq 已提交
87
		var i = this.objects.indexOf( child );
M
Mr.doob 已提交
88 89 90

		if( i !== -1 ) {

91
			this.objects.splice( i, 1 );
92
			this.__objectsRemoved.push( child );
M
Mr.doob 已提交
93

M
Mr.doob 已提交
94 95
		}

96
	}
M
Mr.doob 已提交
97

98
	for ( var c = 0; c < child.children.length; c ++ ) {
M
Mr.doob 已提交
99

M
Mr.doob 已提交
100
		this.removeChildRecurse( child.children[ c ] );
101

M
Mr.doob 已提交
102
	}
M
Mr.doob 已提交
103

M
Mr.doob 已提交
104
}
105

106 107 108 109
// DEPRECATED

THREE.Scene.prototype.addChild = function ( child ) {

110
	console.warn( 'DEPRECATED: Scene.addChild() is now Scene.add(). Called in ' + arguments.callee.caller.name + '().' );
111 112 113 114 115 116
	this.add( child );

}

THREE.Scene.prototype.addObject = function ( child ) {

117
	console.warn( 'DEPRECATED: Scene.addObject() is now Scene.add(). Called in ' + arguments.callee.caller.name + '().' );
118 119 120 121 122 123
	this.add( child );

}

THREE.Scene.prototype.addLight = function ( child ) {

124
	console.warn( 'DEPRECATED: Scene.addLight() is now Scene.add(). Called in ' + arguments.callee.caller.name + '().' );
125 126 127 128 129 130
	this.add( child );

}

THREE.Scene.prototype.removeChild = function ( child ) {

131
	console.warn( 'DEPRECATED: Scene.removeChild() is now Scene.remove(). Called in ' + arguments.callee.caller.name + '().' );
132 133 134 135 136 137
	this.remove( child );

}

THREE.Scene.prototype.removeObject = function ( child ) {

138
	console.warn( 'DEPRECATED: Scene.removeObject() is now Scene.remove(). Called in ' + arguments.callee.caller.name + '().' );
139 140 141 142 143 144
	this.remove( child );

}

THREE.Scene.prototype.removeLight = function ( child ) {

145
	console.warn( 'DEPRECATED: Scene.removeLight() is now Scene.remove(). Called in ' + arguments.callee.caller.name + '().' );
146 147 148
	this.remove( child );

}