Package dwlab.shapes.sprites.shape_types.drawing_sprites

Source Code of dwlab.shapes.sprites.shape_types.drawing_sprites.DrawingSprite

/* Digital Wizard's Lab - game development framework
* Copyright (C) 2013, Matt Merkulov

* All rights reserved. Use of this code is allowed under the
* Artistic License 2.0 terms, as specified in the license.txt
* file distributed with this code, or available from
* http://www.opensource.org/licenses/artistic-license-2.0.php
*/

package dwlab.shapes.sprites.shape_types.drawing_sprites;

import dwlab.base.images.Image;
import static dwlab.platform.Functions.*;
import dwlab.shapes.sprites.Camera;
import dwlab.shapes.sprites.Sprite;
import dwlab.shapes.sprites.shape_types.ServiceObjects;
import dwlab.shapes.sprites.shape_types.ShapeType;
import dwlab.visualizers.Color;
import dwlab.visualizers.Visualizer;
import java.util.HashMap;
import java.util.Map;

public class DrawingSprite extends ServiceObjects {
  public static DrawingSprite defaultHandler = new DrawingSprite();
 
  private static final HashMap<ShapeType, DrawingSprite> handlersMap = new HashMap<ShapeType, DrawingSprite>();

 
  static {
    register( ShapeType.spriteTemplate, DrawingSpriteTemplate.instance );
    initSystem();
  }


  public static void register( ShapeType shapeType, DrawingSprite handler ) {
    handlersMap.put( shapeType, handler );
  }



  public void perform( Visualizer visualizer, Sprite sprite, Sprite spriteShape, Color drawingColor ) {
    Image image = visualizer.image;
    if( image != null ) {
      Camera.current.fieldToScreen( spriteShape, vector1 );

      double angle;
      if( visualizer.rotating ) {
        angle = spriteShape.displayingAngle + spriteShape.angle;
      } else {
        angle = spriteShape.displayingAngle;
      }

      if( debug ) if( sprite.frame < 0 || sprite.frame >= visualizer.image.framesQuantity() ) {
        error( "Incorrect frame number ( " + sprite.frame + " ) for sprite \"" + sprite.getTitle() + "\", should be less than " + visualizer.image.framesQuantity() );
      }

      if( visualizer.scaling ) {
        Camera.current.sizeFieldToScreen( spriteShape, vector2 );
        double scaledWidth = vector2.x * visualizer.xScale;
        double scaledHeight = vector2.y * visualizer.yScale;
        image.draw( sprite.frame, vector1.x + visualizer.dX * scaledWidth, vector1.y + visualizer.dY * scaledHeight, scaledWidth, scaledHeight, angle, visualizer.multiplyBy( drawingColor ) );
      } else {
        double scaledWidth = image.getWidth() * visualizer.xScale;
        double scaledHeight = image.getHeight() * visualizer.yScale;
        image.draw( sprite.frame, vector1.x + visualizer.dX * scaledWidth, vector1.y + visualizer.dY * scaledHeight, scaledWidth, scaledHeight, angle, visualizer.multiplyBy( drawingColor ) );
      }
    } else {
      sprite.drawShape( visualizer.multiplyBy( drawingColor ), false );
    }
  }


  public static DrawingSprite handlers[];

  public static void initSystem() {
    int quantity = ShapeType.shapeTypes.size();

    handlers = new DrawingSprite[ quantity ];
    for( int n = 0; n < quantity; n++ ) handlers[ n ] = defaultHandler;
    for( Map.Entry<ShapeType, DrawingSprite> entry : handlersMap.entrySet() ) {
      handlers[ entry.getKey().getNum() ] = entry.getValue();
    }
  }
}
TOP

Related Classes of dwlab.shapes.sprites.shape_types.drawing_sprites.DrawingSprite

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.