Package org.jwildfire.create.tina.animate

Source Code of org.jwildfire.create.tina.animate.FlameMovie

/*
  JWildfire - an image and animation processor written in Java
  Copyright (C) 1995-2014 Andreas Maschke

  This is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser
  General Public License as published by the Free Software Foundation; either version 2.1 of the
  License, or (at your option) any later version.
  This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
  even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  Lesser General Public License for more details.

  You should have received a copy of the GNU Lesser General Public License along with this software;
  if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jwildfire.create.tina.animate;

import java.util.ArrayList;
import java.util.List;

import org.jwildfire.base.Prefs;
import org.jwildfire.create.tina.base.Flame;

public class FlameMovie {
  public static final int SCRIPT_COUNT = 12;

  private final Prefs prefs;
  private final GlobalScript globalScripts[] = initGlobalScripts();
  private final XFormScript xFormScripts[] = initXFormScripts();
  private final List<Motion> motions = new ArrayList<Motion>();
  private final List<FlameMoviePart> parts = new ArrayList<FlameMoviePart>();
  private int frameWidth = 640;
  private int frameHeight = 480;
  private double framesPerSecond = 12.0;
  private int motionBlurLength = 12;
  private double motionBlurTimeStep = 0.015;
  private String name = "";

  public FlameMovie(Prefs pPrefs) {
    prefs = pPrefs;
  }

  private XFormScript[] initXFormScripts() {
    XFormScript[] res = new XFormScript[SCRIPT_COUNT];
    for (int i = 0; i < res.length; i++) {
      res[i] = new XFormScript(XFormScriptType.NONE, 1.0);
    }
    return res;
  }

  private GlobalScript[] initGlobalScripts() {
    GlobalScript[] res = new GlobalScript[SCRIPT_COUNT];
    for (int i = 0; i < res.length; i++) {
      res[i] = new GlobalScript(GlobalScriptType.NONE, 1.0);
    }
    return res;
  }

  public List<Motion> getMotions() {
    return motions;
  }

  public int getFrameCount() {
    int res = 0;
    for (FlameMoviePart part : parts) {
      if (part.getFrameCount() > 0) {
        res += part.getFrameCount();
      }
    }
    return res;
  }

  public void addPart(FlameMoviePart pPart) {
    parts.add(pPart);
  }

  public Flame getFlame(int pFrame) {
    int currFrame = 0;
    for (int i = 0; i < parts.size(); i++) {
      FlameMoviePart part = parts.get(i);
      currFrame += part.getFrameCount();
      if (currFrame >= pFrame) {
        Flame flame1 = part.getFlame().makeCopy();
        int morphFrames = part.getFrameMorphCount();
        if (morphFrames == 0 || pFrame < (currFrame - morphFrames) || i == (parts.size() - 1)) {
          return flame1;
        }
        else {
          Flame flame2 = parts.get(i + 1).getFlame().makeCopy();
          int morphFrame = pFrame - (currFrame - morphFrames);
          //          System.out.println(pFrame + ": " + morphFrame);
          return FlameMorphService.morphFlames(prefs, part.getFlameMorphType(), flame1, flame2, morphFrame, morphFrames);
        }
      }
    }
    return null;
  }

  public Flame createAnimatedFlame(Flame pFlame, int pFrame) {
    Flame res = AnimationService.createFrameFlame(pFrame, getFrameCount(), getFramesPerSecond(), pFlame, getGlobalScripts(), getxFormScripts(), getMotionBlurLength(), getMotionBlurTimeStep(), getFrameWidth(), getFrameHeight(), prefs);
    res.setFrame(pFrame);
    return res;
  }

  public int getFrameWidth() {
    return frameWidth;
  }

  public void setFrameWidth(int frameWidth) {
    this.frameWidth = frameWidth;
  }

  public int getFrameHeight() {
    return frameHeight;
  }

  public void setFrameHeight(int frameHeight) {
    this.frameHeight = frameHeight;
  }

  public double getFramesPerSecond() {
    return framesPerSecond;
  }

  public void setFramesPerSecond(double framesPerSecond) {
    this.framesPerSecond = framesPerSecond;
  }

  public List<FlameMoviePart> getParts() {
    return parts;
  }

  public int getMotionBlurLength() {
    return motionBlurLength;
  }

  public void setMotionBlurLength(int motionBlurLength) {
    this.motionBlurLength = motionBlurLength;
  }

  public double getMotionBlurTimeStep() {
    return motionBlurTimeStep;
  }

  public void setMotionBlurTimeStep(double motionBlurTimeStep) {
    this.motionBlurTimeStep = motionBlurTimeStep;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name != null ? name : "";
  }

  public GlobalScript[] getGlobalScripts() {
    return globalScripts;
  }

  public XFormScript[] getxFormScripts() {
    return xFormScripts;
  }
}
TOP

Related Classes of org.jwildfire.create.tina.animate.FlameMovie

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.