Package org.jwildfire.create.tina.dance.motion

Source Code of org.jwildfire.create.tina.dance.motion.DefaultMotionCreator

/*
  JWildfire - an image and animation processor written in Java
  Copyright (C) 1995-2013 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.dance.motion;

import org.jwildfire.create.tina.base.Flame;
import org.jwildfire.create.tina.base.Layer;
import org.jwildfire.create.tina.dance.DancingFlameProject;
import org.jwildfire.create.tina.dance.model.AnimationModelService;
import org.jwildfire.create.tina.dance.model.FlamePropertyPath;
import org.jwildfire.create.tina.dance.model.PropertyModel;

public class DefaultMotionCreator implements MotionCreator {

  @Override
  public void createMotions(DancingFlameProject pProject) {
    pProject.getMotions().clear();

    FFTMotion amp0 = new FFTMotion();
    amp0.setFftChannel(0);
    amp0.setAmplitude(-7.0);

    FFTMotion amp1 = new FFTMotion();
    amp1.setFftChannel(1);
    amp1.setAmplitude(-0.5);

    FFTMotion amp2 = new FFTMotion();
    amp2.setFftChannel(2);
    amp2.setAmplitude(-0.5);

    FFTMotion amp3 = new FFTMotion();
    amp3.setFftChannel(3);
    amp3.setAmplitude(-2.0);

    FFTMotion amp4 = new FFTMotion();
    amp4.setFftChannel(4);
    amp4.setAmplitude(0.25);

    FFTMotion amp5 = new FFTMotion();
    amp5.setFftChannel(5);
    amp5.setAmplitude(-0.25);

    FFTMotion amp7 = new FFTMotion();
    amp7.setFftChannel(47);
    amp7.setAmplitude(5.0);

    FFTMotion amp8 = new FFTMotion();
    amp8.setFftChannel(48);
    amp8.setAmplitude(-0.75);

    FFTMotion amp9 = new FFTMotion();
    amp9.setFftChannel(49);
    amp9.setAmplitude(0.5);

    FFTMotion amp10 = new FFTMotion();
    amp10.setFftChannel(50);
    amp10.setAmplitude(3.0);

    FFTMotion amp11 = new FFTMotion();
    amp11.setFftChannel(51);
    amp11.setAmplitude(0.25);

    FFTMotion amp12 = new FFTMotion();
    amp12.setFftChannel(52);
    amp12.setAmplitude(0.25);

    FFTMotion amp14 = new FFTMotion();
    amp14.setFftChannel(2);
    amp14.setAmplitude(0.25);
    amp14.setOffset(1.0);

    pProject.getMotions().add(amp0);
    pProject.getMotions().add(amp1);
    pProject.getMotions().add(amp2);
    pProject.getMotions().add(amp3);
    pProject.getMotions().add(amp4);
    pProject.getMotions().add(amp5);
    pProject.getMotions().add(amp7);
    pProject.getMotions().add(amp8);
    pProject.getMotions().add(amp9);
    pProject.getMotions().add(amp10);
    pProject.getMotions().add(amp11);
    pProject.getMotions().add(amp12);
    pProject.getMotions().add(amp14);

    for (Flame flame : pProject.getFlames()) {
      PropertyModel model = AnimationModelService.createModel(flame);
      for (int layerIdx = 0; layerIdx < flame.getLayers().size(); layerIdx++) {
        Layer layer = flame.getLayers().get(layerIdx);
        if (layer.getXForms().size() > 0) {
          addXFormLink(model, amp0, flame, layerIdx, 0, AnimationModelService.PROPNAME_ANGLE);
          addXFormLink(model, amp1, flame, layerIdx, 0, AnimationModelService.PROPNAME_ORIGIN_X);
          addXFormLink(model, amp2, flame, layerIdx, 0, AnimationModelService.PROPNAME_ORIGIN_Y);
        }

        if (layer.getXForms().size() > 1) {
          addXFormLink(model, amp3, flame, layerIdx, 1, AnimationModelService.PROPNAME_ANGLE);
          addXFormLink(model, amp4, flame, layerIdx, 1, AnimationModelService.PROPNAME_ORIGIN_X);
          addXFormLink(model, amp5, flame, layerIdx, 1, AnimationModelService.PROPNAME_ORIGIN_Y);
        }

        if (layer.getXForms().size() > 2) {
          addXFormLink(model, amp7, flame, layerIdx, 2, AnimationModelService.PROPNAME_ANGLE);
          addXFormLink(model, amp8, flame, layerIdx, 2, AnimationModelService.PROPNAME_ORIGIN_X);
          addXFormLink(model, amp9, flame, layerIdx, 2, AnimationModelService.PROPNAME_ORIGIN_Y);
        }

        if (layer.getXForms().size() > 3) {
          addXFormLink(model, amp10, flame, layerIdx, 3, AnimationModelService.PROPNAME_ANGLE);
          addXFormLink(model, amp11, flame, layerIdx, 3, AnimationModelService.PROPNAME_ORIGIN_X);
          addXFormLink(model, amp12, flame, layerIdx, 3, AnimationModelService.PROPNAME_ORIGIN_Y);
        }

        if (layer.getFinalXForms().size() > 0) {
          addFinalXFormLink(model, amp14, flame, layerIdx, 0, AnimationModelService.PROPNAME_ZOOM);
        }
      }
    }
  }

  protected void addXFormLink(PropertyModel pModel, Motion pMotion, Flame pFlame, int pLayerIdx, int pXFormIndex, String pPropname) {
    FlamePropertyPath path = new FlamePropertyPath(pFlame, AnimationModelService.createXFormPropertyPath(pLayerIdx, pXFormIndex, pPropname));
    MotionLink link = new MotionLink(path);
    pMotion.getMotionLinks().add(link);
  }

  protected void addFinalXFormLink(PropertyModel pModel, Motion pMotion, Flame pFlame, int pLayerIdx, int pXFormIndex, String pPropname) {
    FlamePropertyPath path = new FlamePropertyPath(pFlame, AnimationModelService.createFinalXFormPropertyPath(pLayerIdx, pXFormIndex, pPropname));
    MotionLink link = new MotionLink(path);
    pMotion.getMotionLinks().add(link);
  }
}
TOP

Related Classes of org.jwildfire.create.tina.dance.motion.DefaultMotionCreator

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.