/******************************************************************************* * Copyright 2011 See AUTHORS file. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ package com.badlogic.gdx.graphics.g3d.particles.emitters; import com.badlogic.gdx.graphics.g3d.particles.ParticleControllerComponent; import com.badlogic.gdx.utils.Json; import com.badlogic.gdx.utils.JsonValue; /** An {@link Emitter} is a {@link ParticleControllerComponent} which will handle the particles emission. It must update the * {@link Emitter#percent} to reflect the current percentage of the current emission cycle. It should consider * {@link Emitter#minParticleCount} and {@link Emitter#maxParticleCount} to rule particle emission. It should notify the particle * controller when particles are activated, killed, or when an emission cycle begins. * @author Inferno */ public abstract class Emitter extends ParticleControllerComponent implements Json.Serializable { /** The min/max quantity of particles */ public int minParticleCount, maxParticleCount = 4; /** Current state of the emission, should be currentTime/ duration Must be updated on each update */ public float percent; public Emitter (Emitter regularEmitter) { set(regularEmitter); } public Emitter () { } @Override public void init () { controller.particles.size = 0; } @Override public void end () { controller.particles.size = 0; } public boolean isComplete () { return percent >= 1.0f; } public int getMinParticleCount () { return minParticleCount; } public void setMinParticleCount (int minParticleCount) { this.minParticleCount = minParticleCount; } public int getMaxParticleCount () { return maxParticleCount; } public void setMaxParticleCount (int maxParticleCount) { this.maxParticleCount = maxParticleCount; } public void setParticleCount (int aMin, int aMax) { setMinParticleCount(aMin); setMaxParticleCount(aMax); } public void set (Emitter emitter) { minParticleCount = emitter.minParticleCount; maxParticleCount = emitter.maxParticleCount; } @Override public void write (Json json) { json.writeValue("minParticleCount", minParticleCount); json.writeValue("maxParticleCount", maxParticleCount); } @Override public void read (Json json, JsonValue jsonData) { minParticleCount = json.readValue("minParticleCount", int.class, jsonData); maxParticleCount = json.readValue("maxParticleCount", int.class, jsonData); } }