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
33package com.jme3.effect;
34
35import com.jme3.material.RenderState;
36import com.jme3.math.Matrix3f;
37import com.jme3.renderer.Camera;
38import com.jme3.scene.Mesh;
39
40/**
41 * The <code>ParticleMesh</code> is the underlying visual implementation of a
42 * {@link ParticleEmitter particle emitter}.
43 *
44 * @author Kirill Vainer
45 */
46public abstract class ParticleMesh extends Mesh {
47
48    /**
49     * Type of particle mesh
50     */
51    public enum Type {
52        /**
53         * The particle mesh is composed of points. Each particle is a point.
54         * This can be used in conjuction with {@link RenderState#setPointSprite(boolean) point sprites}
55         * to render particles the usual way.
56         */
57        Point,
58
59        /**
60         * The particle mesh is composed of triangles. Each particle is
61         * two triangles making a single quad.
62         */
63        Triangle;
64    }
65
66    /**
67     * Initialize mesh data.
68     *
69     * @param emitter The emitter which will use this <code>ParticleMesh</code>.
70     * @param numParticles The maxmimum number of particles to simulate
71     */
72    public abstract void initParticleData(ParticleEmitter emitter, int numParticles);
73
74    /**
75     * Set the images on the X and Y coordinates
76     * @param imagesX Images on the X coordinate
77     * @param imagesY Images on the Y coordinate
78     */
79    public abstract void setImagesXY(int imagesX, int imagesY);
80
81    /**
82     * Update the particle visual data. Typically called every frame.
83     */
84    public abstract void updateParticleData(Particle[] particles, Camera cam, Matrix3f inverseRotation);
85
86}
87