• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 EmitterSphereShape implements EmitterShape {
43 
44     private Vector3f center;
45     private float radius;
46 
EmitterSphereShape()47     public EmitterSphereShape() {
48     }
49 
EmitterSphereShape(Vector3f center, float radius)50     public EmitterSphereShape(Vector3f center, float radius) {
51         if (center == null) {
52             throw new NullPointerException();
53         }
54 
55         if (radius <= 0) {
56             throw new IllegalArgumentException("Radius must be greater than 0");
57         }
58 
59         this.center = center;
60         this.radius = radius;
61     }
62 
63     @Override
deepClone()64     public EmitterShape deepClone() {
65         try {
66             EmitterSphereShape clone = (EmitterSphereShape) super.clone();
67             clone.center = center.clone();
68             return clone;
69         } catch (CloneNotSupportedException ex) {
70             throw new AssertionError();
71         }
72     }
73 
74     @Override
getRandomPoint(Vector3f store)75     public void getRandomPoint(Vector3f store) {
76         do {
77             store.x = (FastMath.nextRandomFloat() * 2f - 1f) * radius;
78             store.y = (FastMath.nextRandomFloat() * 2f - 1f) * radius;
79             store.z = (FastMath.nextRandomFloat() * 2f - 1f) * radius;
80         } while (store.distance(center) > radius);
81     }
82 
83     @Override
getRandomPointAndNormal(Vector3f store, Vector3f normal)84     public void getRandomPointAndNormal(Vector3f store, Vector3f normal) {
85         this.getRandomPoint(store);
86     }
87 
getCenter()88     public Vector3f getCenter() {
89         return center;
90     }
91 
setCenter(Vector3f center)92     public void setCenter(Vector3f center) {
93         this.center = center;
94     }
95 
getRadius()96     public float getRadius() {
97         return radius;
98     }
99 
setRadius(float radius)100     public void setRadius(float radius) {
101         this.radius = radius;
102     }
103 
104     @Override
write(JmeExporter ex)105     public void write(JmeExporter ex) throws IOException {
106         OutputCapsule oc = ex.getCapsule(this);
107         oc.write(center, "center", null);
108         oc.write(radius, "radius", 0);
109     }
110 
111     @Override
read(JmeImporter im)112     public void read(JmeImporter im) throws IOException {
113         InputCapsule ic = im.getCapsule(this);
114         center = (Vector3f) ic.readSavable("center", null);
115         radius = ic.readFloat("radius", 0);
116     }
117 }
118