2 * Copyright (c) 2003-2009 jMonkeyEngine
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
12 * * Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
16 * * Neither the name of 'jMonkeyEngine' nor the names of its contributors
17 * may be used to endorse or promote products derived from this software
18 * without specific prior written permission.
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
22 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
27 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
28 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
29 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 package com.jme.light;
35 import java.util.ArrayList;
37 import com.jme.scene.Node;
38 import com.jme.scene.Spatial;
39 import com.jme.scene.state.RenderState;
40 import com.jme.system.DisplaySystem;
43 * <code>LightControllerManager</code>
45 * This class should not be used anymore, use <code>Node.sortLights()</code> instead.
47 * @see jmetest.util.TestManyLights
51 public class LightControllerManager {
52 static ArrayList<LightStateController> controllerList = new ArrayList<LightStateController>(1);
53 static LightManagement lm = new LightManagement();
55 public static void addController(LightStateController lsc) {
56 controllerList.add(lsc);
59 public static void clearSpatials() {
60 controllerList.clear();
63 public static void clearLights() {
67 public LightManagement getLightManagement() {
71 public static void addSpatial(Spatial s) {
72 //remove any existing lsc's
75 LightStateController lsc = new LightStateController(s,
77 controllerList.add(lsc);
79 if(s.getRenderState(RenderState.StateType.Light) == null) {
80 s.setRenderState(DisplaySystem.getDisplaySystem().getRenderer().createLightState());
82 if (s.getLightCombineMode() != Spatial.LightCombineMode.Off)
83 s.setLightCombineMode(Spatial.LightCombineMode.Replace);
86 private static void clearLSCs(Spatial s) {
87 for (int i = 0; i < s.getControllers().size(); i++) {
88 if(s.getController(i) instanceof LightStateController) {
89 s.removeController(s.getController(i));
94 if (s instanceof Node) {
96 for (int i = n.getQuantity(); --i > 0; ) {
97 clearLSCs(n.getChild(i));
102 public static void addLight(Light l) {
103 if(!lm.contains(l)) {
108 public static void removeLight(Light l) {
112 public static void removeSpatial(Spatial spatial) {
113 for(int i = 0; i < spatial.getControllers().size(); i++) {
114 if(spatial.getController(i) instanceof LightStateController) {
115 controllerList.remove(spatial.getController(i));
120 public static void reset() {