1 /* 2 * Copyright (c) 2009-2010 jMonkeyEngine 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are 7 * met: 8 * 9 * * Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 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. 15 * 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. 19 * 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. 31 */ 32 package com.jme3.effect.shapes; 33 34 import com.jme3.export.InputCapsule; 35 import com.jme3.export.JmeExporter; 36 import com.jme3.export.JmeImporter; 37 import com.jme3.export.OutputCapsule; 38 import com.jme3.math.FastMath; 39 import com.jme3.math.Vector3f; 40 import java.io.IOException; 41 42 public class EmitterBoxShape implements EmitterShape { 43 44 private Vector3f min, len; 45 46 public EmitterBoxShape() { 47 } 48 49 public EmitterBoxShape(Vector3f min, Vector3f max) { 50 if (min == null || max == null) { 51 throw new NullPointerException(); 52 } 53 54 this.min = min; 55 this.len = new Vector3f(); 56 this.len.set(max).subtractLocal(min); 57 } 58 59 @Override 60 public void getRandomPoint(Vector3f store) { 61 store.x = min.x + len.x * FastMath.nextRandomFloat(); 62 store.y = min.y + len.y * FastMath.nextRandomFloat(); 63 store.z = min.z + len.z * FastMath.nextRandomFloat(); 64 } 65 66 /** 67 * This method fills the point with data. 68 * It does not fill the normal. 69 * @param store the variable to store the point data 70 * @param normal not used in this class 71 */ 72 @Override 73 public void getRandomPointAndNormal(Vector3f store, Vector3f normal) { 74 this.getRandomPoint(store); 75 } 76 77 @Override 78 public EmitterShape deepClone() { 79 try { 80 EmitterBoxShape clone = (EmitterBoxShape) super.clone(); 81 clone.min = min.clone(); 82 clone.len = len.clone(); 83 return clone; 84 } catch (CloneNotSupportedException ex) { 85 throw new AssertionError(); 86 } 87 } 88 89 public Vector3f getMin() { 90 return min; 91 } 92 93 public void setMin(Vector3f min) { 94 this.min = min; 95 } 96 97 public Vector3f getLen() { 98 return len; 99 } 100 101 public void setLen(Vector3f len) { 102 this.len = len; 103 } 104 105 @Override 106 public void write(JmeExporter ex) throws IOException { 107 OutputCapsule oc = ex.getCapsule(this); 108 oc.write(min, "min", null); 109 oc.write(len, "length", null); 110 } 111 112 @Override 113 public void read(JmeImporter im) throws IOException { 114 InputCapsule ic = im.getCapsule(this); 115 min = (Vector3f) ic.readSavable("min", null); 116 len = (Vector3f) ic.readSavable("length", null); 117 } 118 } 119