Android Open Source - nadia Animation






From Project

Back to project page nadia.

License

The source code is released under:

GNU Lesser General Public License

If you think the Android project nadia 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

/*
 * Animation.java//from   w w  w . j a va 2s. c  o  m
 * 
 * Copyright (c) 2013, Emmanuel Arana Corzo. All rights reserved.
 *
 * This library 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 library 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 library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 * MA 02110-1301  USA
 */

package com.redarctic.nadia.baseengine.sprite;

import android.graphics.Canvas;
import android.os.SystemClock;

import com.ashokgelal.samaya.TimeSpan;
import com.redarctic.nadia.ext.MathHelper;
import com.redarctic.nadia.collision.Rectangle;

public class Animation implements Cloneable {
  public static final int DEFAULT_FRAMES_PER_SECOND = 5;
  Rectangle[] frames;
  int framesPerSecond;
  TimeSpan frameZeroTimer;
  TimeSpan frameLength;
  TimeSpan frameTimer;
  int currentFrame;
  int frameWidth;
  int frameHeight;
  
  public int getFramesPerSecond() {
    return this.framesPerSecond;
  }
  
  public void setFramesPerSecond(int value) {
    if (value < 1)
      this.framesPerSecond = 1;
    else if (value > 60)
      this.framesPerSecond = 60;
    else
      this.framesPerSecond = value;
    
    this.frameLength = TimeSpan.FromSeconds( 1 / (double)this.framesPerSecond );
  }
  
  public Rectangle getCurrentFrameRect() {
    if (frames.length > this.currentFrame)
      return this.frames[this.currentFrame];
    else 
      return null;
  }
  
  public int getCurrentFrame() {
    return this.currentFrame;
  }
  
  public void setCurrentFrame(int value) {
    this.currentFrame = (int)MathHelper.clamp(value, 0, this.frames.length - 1);
  }
  
  public int getFrameWidth() {
    return this.frameWidth;
  }
  
  public int getFrameHeight() {
    return this.frameHeight;
  }
  
  public Animation(int frameCount, int frameWidth, int frameHeight, int xOffset, int yOffset) 
  throws AnimationException {
    if (frameCount > 0) {
      frames = new Rectangle[frameCount];
      this.frameWidth = frameWidth;
      this.frameHeight = frameHeight;
      
      for (int i = 0; i < frameCount; i++) {
        this.frames[i] = new Rectangle(
            xOffset + (frameWidth * i),
            yOffset,
            xOffset + (frameWidth * i) + frameWidth,
            yOffset + frameHeight);
      }
      this.setFramesPerSecond(DEFAULT_FRAMES_PER_SECOND);
      this.reset();
    } else {
      throw new AnimationException("The frameCount parameter is less than 1");
    }
  }
  
  private Animation(Animation animation) {
    this.frames = animation.frames;
    this.setFramesPerSecond(DEFAULT_FRAMES_PER_SECOND);
  }
  
  public void update(Canvas canvas) {
    TimeSpan tsTmp = TimeSpan.Subtract(
        TimeSpan.FromMilliseconds( SystemClock.elapsedRealtime() ), 
        this.frameZeroTimer
        );
    
    this.frameTimer = TimeSpan.Add(
        this.frameTimer,
        tsTmp
        );
    
    if ( this.frameTimer.GreaterThanOrEqual(frameLength) ) {
      frameTimer = TimeSpan.Zero;
      currentFrame = (currentFrame + 1) % frames.length;
    }
  }
  
  public void reset() {
    this.currentFrame = 0;
    frameTimer = TimeSpan.Zero;
    this.frameZeroTimer = TimeSpan.FromMilliseconds(SystemClock.elapsedRealtime());
  }

  @Override
  protected Object clone() throws CloneNotSupportedException {
    Animation animationClone = new Animation(this);
    
    animationClone.frameWidth = this.frameWidth;
    animationClone.frameHeight = this.frameHeight;
    animationClone.reset();
    
    return animationClone;
  }  
}




Java Source Code List

com.ashokgelal.samaya.DateTimeFormatter.java
com.ashokgelal.samaya.DateTimeInterval.java
com.ashokgelal.samaya.DateTimeParser.java
com.ashokgelal.samaya.DateTime.java
com.ashokgelal.samaya.ModelUtil.java
com.ashokgelal.samaya.Samaya.java
com.ashokgelal.samaya.TimeSpan.java
com.ashokgelal.samaya.ToStringUtil.java
com.ashokgelal.samaya.Util.java
com.redarctic.nadia.baseengine.BaseGameState.java
com.redarctic.nadia.baseengine.ColorPallete.java
com.redarctic.nadia.baseengine.DrawableGameComponent.java
com.redarctic.nadia.baseengine.DrawableObject.java
com.redarctic.nadia.baseengine.GameComponent.java
com.redarctic.nadia.baseengine.GameStateManager.java
com.redarctic.nadia.baseengine.GameState.java
com.redarctic.nadia.baseengine.GameSurfaceView.java
com.redarctic.nadia.baseengine.GameSurface.java
com.redarctic.nadia.baseengine.SpriteFont.java
com.redarctic.nadia.baseengine.Sprite.java
com.redarctic.nadia.baseengine.character.BaseModifier.java
com.redarctic.nadia.baseengine.character.Classes.java
com.redarctic.nadia.baseengine.character.FormulaModifierException.java
com.redarctic.nadia.baseengine.character.Player.java
com.redarctic.nadia.baseengine.item.ArmorLocation.java
com.redarctic.nadia.baseengine.item.Armor.java
com.redarctic.nadia.baseengine.item.BaseItem.java
com.redarctic.nadia.baseengine.item.ItemManager.java
com.redarctic.nadia.baseengine.item.ItemType.java
com.redarctic.nadia.baseengine.item.Shield.java
com.redarctic.nadia.baseengine.item.Weapon.java
com.redarctic.nadia.baseengine.item.WeaponsType.java
com.redarctic.nadia.baseengine.sprite.AnimatedSprite.java
com.redarctic.nadia.baseengine.sprite.AnimationException.java
com.redarctic.nadia.baseengine.sprite.AnimationKey.java
com.redarctic.nadia.baseengine.sprite.Animation.java
com.redarctic.nadia.baseengine.tileengine.Camera.java
com.redarctic.nadia.baseengine.tileengine.Engine.java
com.redarctic.nadia.baseengine.tileengine.MapLayer.java
com.redarctic.nadia.baseengine.tileengine.TileException.java
com.redarctic.nadia.baseengine.tileengine.TileMap.java
com.redarctic.nadia.baseengine.tileengine.Tile.java
com.redarctic.nadia.baseengine.tileengine.Tileset.java
com.redarctic.nadia.baseengine.world.Level.java
com.redarctic.nadia.baseengine.world.World.java
com.redarctic.nadia.collision.Circle.java
com.redarctic.nadia.collision.CollisionPolygon.java
com.redarctic.nadia.collision.ConvexPolygonException.java
com.redarctic.nadia.collision.Rectangle.java
com.redarctic.nadia.controls.ButtonPad.java
com.redarctic.nadia.controls.DirectionalPad.java
com.redarctic.nadia.controls.menu.CharacterDialog.java
com.redarctic.nadia.controls.menu.ControlBorder.java
com.redarctic.nadia.controls.menu.ControlManager.java
com.redarctic.nadia.controls.menu.Control.java
com.redarctic.nadia.controls.menu.Label.java
com.redarctic.nadia.controls.menu.LeftRightSelector.java
com.redarctic.nadia.controls.menu.LinkLabel.java
com.redarctic.nadia.controls.menu.Menu.java
com.redarctic.nadia.controls.menu.PictureBox.java
com.redarctic.nadia.controls.menu.SimpleConversation.java
com.redarctic.nadia.ext.MathHelper.java
com.redarctic.nadia.ext.StringHelper.java
com.redarctic.nadia.ext.simplesignalslot.ISignalProvider.java
com.redarctic.nadia.ext.simplesignalslot.ISlotProvider.java
com.redarctic.nadia.ext.simplesignalslot.PrimitiveWrapper.java
com.redarctic.nadia.ext.simplesignalslot.SignalSlotMap.java
com.redarctic.nadia.ext.simplesignalslot.SignalSlotPair.java
com.redarctic.nadia.ext.simplesignalslot.SlotProviderMethodPair.java