Package com.badlogic.gdx.graphics.g3d.particles.values

Source Code of com.badlogic.gdx.graphics.g3d.particles.values.MeshSpawnShapeValue$Triangle

package com.badlogic.gdx.graphics.g3d.particles.values;

import com.badlogic.gdx.assets.AssetDescriptor;
import com.badlogic.gdx.assets.AssetManager;
import com.badlogic.gdx.graphics.Mesh;
import com.badlogic.gdx.graphics.VertexAttributes.Usage;
import com.badlogic.gdx.graphics.g3d.Model;
import com.badlogic.gdx.graphics.g3d.particles.ResourceData;
import com.badlogic.gdx.graphics.g3d.particles.ResourceData.SaveData;
import com.badlogic.gdx.math.MathUtils;
import com.badlogic.gdx.math.Vector3;
import com.badlogic.gdx.utils.GdxRuntimeException;

/** The base class of all the {@link ParticleValue} values which spawn a particle on a mesh shape.
* @author Inferno */
public abstract class MeshSpawnShapeValue extends SpawnShapeValue {
  protected static class Triangle{
    float x1, y1, z1,
        x2, y2, z2,
        x3, y3, z3;
    public Trianglefloat x1, float y1, float z1,
                float x2, float y2, float z2,
                float x3, float y3, float z3){
      this.x1 = x1; this.y1 = y1; this.z1 = z1;
      this.x2 = x2; this.y2 = y2; this.z2 = z2;
      this.x3 = x3; this.y3 = y3; this.z3 = z3;
    }
   
    public static Vector3 pick(float x1, float y1, float z1,
      float x2, float y2, float z2,
      float x3, float y3, float z3, Vector3 vector){
      float a = MathUtils.random(), b = MathUtils.random();
      return vector.set(   x1 + a*(x2 - x1) + b*(x3 - x1),
                    y1 + a*(y2 - y1) + b*(y3 - y1),
                    z1 + a*(z2 - z1) + b*(z3 - z1));
    }
   
    public Vector3 pick(Vector3 vector){
      float a = MathUtils.random(), b = MathUtils.random();
      return vector.set(   x1 + a*(x2 - x1) + b*(x3 - x1),
                    y1 + a*(y2 - y1) + b*(y3 - y1),
                    z1 + a*(z2 - z1) + b*(z3 - z1));
    }
  }
 
  protected Mesh mesh;
  /** the model this mesh belongs to.
   * It can be null, but this means the mesh
   * will not be able to be serialized correctly.*/
  protected Model model;
 
  public MeshSpawnShapeValue (MeshSpawnShapeValue value) {
    super(value);
  }

  public MeshSpawnShapeValue () {}

  @Override
  public void load (ParticleValue value) {
    super.load(value);
    MeshSpawnShapeValue spawnShapeValue = (MeshSpawnShapeValue) value;
    setMesh(spawnShapeValue.mesh, spawnShapeValue.model);
  }
 
  public void setMesh(Mesh mesh, Model model){
    if(mesh.getVertexAttribute(Usage.Position) == null)
      throw new GdxRuntimeException("Mesh vertices must have Usage.Position");
    this.model =  model;
    this.mesh = mesh;
  }
 
  public void setMesh(Mesh mesh){
    this.setMesh(mesh, null);
  }

  @Override
  public void save (AssetManager manager, ResourceData data) {
    if(model != null){
      SaveData saveData = data.createSaveData();
      saveData.saveAsset(manager.getAssetFileName(model), Model.class);
      saveData.save("index", model.meshes.indexOf(mesh, true));
    }
  }
 
  @Override
  public void load (AssetManager manager, ResourceData data) {
    SaveData saveData = data.getSaveData();
    AssetDescriptor descriptor = saveData.loadAsset();
    if(descriptor!=null){
      Model model = (Model) manager.get(descriptor);
      setMesh(model.meshes.get((Integer)saveData.load("index")), model);
    }
  }

}
TOP

Related Classes of com.badlogic.gdx.graphics.g3d.particles.values.MeshSpawnShapeValue$Triangle

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.