Android Open Source - Schooner-3D Action






From Project

Back to project page Schooner-3D.

License

The source code is released under:

Apache License

If you think the Android project Schooner-3D listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * Copyright 2012 Dan Mercer/*from w  w  w.  j a  v  a  2 s .c  om*/
 * 
 * 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.supermercerbros.gameengine.armature;

import java.util.Iterator;

import android.util.SparseArray;

import com.supermercerbros.gameengine.math.Curve;
import com.supermercerbros.gameengine.motion.Movement;

public class Action {
  private final SparseArray<Curve> boneCurves;
  public final Movement movement;
  
  public Action(Movement movement, SparseArray<Curve> curves) {
    this.boneCurves = curves;
    this.movement = movement;
  }

  public void update(ActionData data, Skeleton skeleton, long time) {    
    if (time < data.startTime) {
      // Interpolating to the action
      final float framePoint = (time - data.callTime) / (data.startTime - data.callTime);
      final Iterator<Bone> iter = skeleton.bones.iterator();
      for (int i = 0; iter.hasNext(); i++) {
        final int offset = i*4;
        final Bone bone = iter.next();
        
        final float sw = data.callState.boneStates[offset    ];
        final float sx = data.callState.boneStates[offset + 1];
        final float sy = data.callState.boneStates[offset + 2];
        final float sz = data.callState.boneStates[offset + 3];
        
        final float fw, fx, fy, fz;
        Curve wCurve = boneCurves.get(offset    );
        if (wCurve != null) {
          Curve xCurve = boneCurves.get(offset + 1);
          Curve yCurve = boneCurves.get(offset + 2);
          Curve zCurve = boneCurves.get(offset + 3);
          fw = wCurve.getStartValue();
          fx = xCurve.getStartValue();
          fy = yCurve.getStartValue();
          fz = zCurve.getStartValue();
        } else {
          fw = 1.0f;
          fx = 0.0f;
          fy = 0.0f;
          fz = 0.0f;
        }
        final float w = sw + (fw - sw) * framePoint;
        final float x = sx + (fx - sx) * framePoint;
        final float y = sy + (fy - sy) * framePoint;
        final float z = sz + (fz - sz) * framePoint;
        bone.setRotation(w, x, y, z);
      }
    } else {
      // Interpolating in the action
      final float framePoint = ((float) (time - data.startTime)) / data.duration;
      
      //TODO: do this more better-er. See MeshAnimation, line 74-ish
      if (framePoint > 1.0f) {
        return; // Don't animate.
      }
      
      final Iterator<Bone> iter = skeleton.bones.iterator();
      for (int i = 0; iter.hasNext(); i++) {
        final int offset = i*4;
        final Bone bone = iter.next();
        
        Curve wCurve = boneCurves.get(offset    );
        if (wCurve != null) {
          Curve xCurve = boneCurves.get(offset + 1);
          Curve yCurve = boneCurves.get(offset + 2);
          Curve zCurve = boneCurves.get(offset + 3);
          
          final float w = wCurve.getInterpolation(framePoint);
          final float x = xCurve.getInterpolation(framePoint);
          final float y = yCurve.getInterpolation(framePoint);
          final float z = zCurve.getInterpolation(framePoint);
          bone.setRotation(w, x, y, z);
        } 
      }
    }
    
  }
}




Java Source Code List

com.supermercerbros.gameengine.GameActivity.java
com.supermercerbros.gameengine.GameView.java
com.supermercerbros.gameengine.Schooner3D.java
com.supermercerbros.gameengine.TestActivity.java
com.supermercerbros.gameengine.TestMaterials.java
com.supermercerbros.gameengine.TestObjects.java
com.supermercerbros.gameengine.animation.AnimationData.java
com.supermercerbros.gameengine.animation.Keyframe.java
com.supermercerbros.gameengine.animation.MeshAnimation.java
com.supermercerbros.gameengine.armature.ActionData.java
com.supermercerbros.gameengine.armature.Action.java
com.supermercerbros.gameengine.armature.BinarySkeletalVertexModifier.java
com.supermercerbros.gameengine.armature.Bone.java
com.supermercerbros.gameengine.armature.SkeletalVertexModifier.java
com.supermercerbros.gameengine.armature.Skeleton.java
com.supermercerbros.gameengine.collision.Bounds.java
com.supermercerbros.gameengine.collision.Collider.java
com.supermercerbros.gameengine.collision.CollisionDetector.java
com.supermercerbros.gameengine.collision.Collision.java
com.supermercerbros.gameengine.collision.DebugListener.java
com.supermercerbros.gameengine.collision.Edge.java
com.supermercerbros.gameengine.collision.Face.java
com.supermercerbros.gameengine.collision.Feature.java
com.supermercerbros.gameengine.collision.Intersection.java
com.supermercerbros.gameengine.collision.Line.java
com.supermercerbros.gameengine.collision.LocalDistMinimum.java
com.supermercerbros.gameengine.collision.Matrix.java
com.supermercerbros.gameengine.collision.OnCollisionCheckFinishedListener.java
com.supermercerbros.gameengine.collision.Plane.java
com.supermercerbros.gameengine.collision.Point.java
com.supermercerbros.gameengine.collision.Polyhedron.java
com.supermercerbros.gameengine.collision.SphereBounds.java
com.supermercerbros.gameengine.collision.Vector.java
com.supermercerbros.gameengine.collision.Vertex.java
com.supermercerbros.gameengine.debug.JankCatcher.java
com.supermercerbros.gameengine.debug.LoopLog.java
com.supermercerbros.gameengine.engine.Camera.java
com.supermercerbros.gameengine.engine.DataPipe.java
com.supermercerbros.gameengine.engine.EGLContextLostHandler.java
com.supermercerbros.gameengine.engine.Engine.java
com.supermercerbros.gameengine.engine.GameRenderer.java
com.supermercerbros.gameengine.engine.Light.java
com.supermercerbros.gameengine.engine.Normals.java
com.supermercerbros.gameengine.engine.RenderData.java
com.supermercerbros.gameengine.engine.Scene.java
com.supermercerbros.gameengine.engine.Time.java
com.supermercerbros.gameengine.engine.shaders.Material.java
com.supermercerbros.gameengine.engine.shaders.Program.java
com.supermercerbros.gameengine.engine.shaders.ShaderLib.java
com.supermercerbros.gameengine.engine.shaders.Shader.java
com.supermercerbros.gameengine.engine.shaders.VertexModifier.java
com.supermercerbros.gameengine.handlers.OnAnimationCompleteDispatcher.java
com.supermercerbros.gameengine.handlers.OnAnimationCompleteListener.java
com.supermercerbros.gameengine.hud.CoordsConverter.java
com.supermercerbros.gameengine.hud.GameHud.java
com.supermercerbros.gameengine.hud.HudElement.java
com.supermercerbros.gameengine.material.CelShadedMaterial.java
com.supermercerbros.gameengine.material.TexturedMaterial.java
com.supermercerbros.gameengine.math.BezierCurve.java
com.supermercerbros.gameengine.math.Curve.java
com.supermercerbros.gameengine.math.MatrixUtils.java
com.supermercerbros.gameengine.math.Quaternion.java
com.supermercerbros.gameengine.motion.CurveMovement.java
com.supermercerbros.gameengine.motion.MovementData.java
com.supermercerbros.gameengine.motion.Movement.java
com.supermercerbros.gameengine.objects.AnimatedMeshObject.java
com.supermercerbros.gameengine.objects.BasicMaterial.java
com.supermercerbros.gameengine.objects.BonedObject.java
com.supermercerbros.gameengine.objects.GameObject.java
com.supermercerbros.gameengine.objects.Metadata.java
com.supermercerbros.gameengine.parsers.ConstantCurve.java
com.supermercerbros.gameengine.parsers.GameFactory.java
com.supermercerbros.gameengine.parsers.PreBoneData.java
com.supermercerbros.gameengine.parsers.PreObjectData.java
com.supermercerbros.gameengine.parsers.Sch3D.java
com.supermercerbros.gameengine.render.Compositor.java
com.supermercerbros.gameengine.shaders.ProgramSource.java
com.supermercerbros.gameengine.texture.BitmapTexture.java
com.supermercerbros.gameengine.texture.ETC1CompressedTexture.java
com.supermercerbros.gameengine.texture.Texture.java
com.supermercerbros.gameengine.util.BetterDataInputStream.java
com.supermercerbros.gameengine.util.DelayedRunnable.java
com.supermercerbros.gameengine.util.GLES2.java
com.supermercerbros.gameengine.util.IPO.java
com.supermercerbros.gameengine.util.LoopingThread.java
com.supermercerbros.gameengine.util.Toggle.java
com.supermercerbros.gameengine.util.Utils.java