Package dwlab.shapes.sprites.shape_types.wedging_off

Source Code of dwlab.shapes.sprites.shape_types.wedging_off.WedgingOffSprites

/* 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.wedging_off;

import dwlab.base.service.Service;
import dwlab.base.service.Vector;
import dwlab.shapes.sprites.Sprite;
import dwlab.shapes.sprites.shape_types.ServiceObjects;
import dwlab.shapes.sprites.shape_types.ShapeType;
import java.util.HashMap;
import java.util.Map;

public class WedgingOffSprites extends ServiceObjects {
  public static WedgingOffSprites defaultHandler = new WedgingOffSprites();
 
  private static HashMap<ShapeType, HashMap<ShapeType, WedgingOffSprites>> spritesCollisionsMap = new HashMap<ShapeType, HashMap<ShapeType, WedgingOffSprites>>();
 
  static {
    register( ShapeType.pivot, ShapeType.oval, WedgingOffPivotWithOval.instance );
    register( ShapeType.pivot, ShapeType.rectangle, WedgingOffPivotWithRectangle.instance );
    register( ShapeType.oval, ShapeType.oval, WedgingOffOvalWithOval.instance );
    register( ShapeType.oval, ShapeType.rectangle, WedgingOffOvalWithRectangle.instance );
    register( ShapeType.rectangle, ShapeType.rectangle, WedgingOffRectangleWithRectangle.instance );
    for( ShapeType triangle : ShapeType.triangles ) {
      register( ShapeType.pivot, triangle, WedgingOffPivotWithTriangle.instance );
      register( ShapeType.oval, triangle, WedgingOffOvalWithTriangle.instance );
      register( ShapeType.rectangle, triangle, WedgingOffRectangleWithTriangle.instance );
      for( ShapeType triangle2 : ShapeType.triangles ) {
        register( triangle, triangle2, WedgingOffTriangleWithTriangle.instance );
      }
    }
    initSystem();
  }


  public void calculateVector( Sprite sprite1, Sprite sprite2, Vector vector ) {
    vector.set( 0d, 0d );
  }


  static void register( ShapeType shapeType1, ShapeType shapeType2, WedgingOffSprites wedgingOff ) {
    HashMap map = spritesCollisionsMap.get( shapeType1 );
    if( map == null ) {
      map = new HashMap();
      spritesCollisionsMap.put( shapeType1, map );
    }
    map.put( shapeType2, wedgingOff );
  }


  public static WedgingOffSprites handlers[][];

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

    handlers = new WedgingOffSprites[ quantity ][];
    for( int n =0; n < quantity; n++ ) {
      handlers[ n ] =new WedgingOffSprites[ quantity ];
      for( int m = 0; m < quantity; m++ ) handlers[ n ][ m ] = defaultHandler;
    }
    for( Map.Entry<ShapeType, HashMap<ShapeType, WedgingOffSprites>> entry1 : spritesCollisionsMap.entrySet() ) {
      ShapeType shapeType1 = entry1.getKey();
      for( Map.Entry<ShapeType, WedgingOffSprites> entry2 : entry1.getValue().entrySet() ) {
        handlers[ shapeType1.getNum() ][ entry2.getKey().getNum() ] = entry2.getValue();
      }
    }
  }


  static double popAngle( Sprite triangle1, Sprite triangle2, double dY ) {
    triangle2.getRightAngleVertex( servicePivots[ 0 ] );
    triangle2.getHypotenuse( serviceLines[ 0 ] );
    triangle1.getOtherVertices( servicePivots[ 1 ], servicePivots[ 2 ] );
    int o = serviceLines[ 0 ].pivotOrientation( servicePivots[ 0 ] );
    for( int n = 1; n <= 2; n++ ) {
      if( o == serviceLines[ 0 ].pivotOrientation( servicePivots[ n ] ) ) {
        if( Service.inLimits( servicePivots[ n ].getX(), triangle2.leftX(), triangle2.rightX() ) ) {
          dY = Math.max( dY, Math.abs( serviceLines[ 0 ].getY( servicePivots[ n ].getX() ) - servicePivots[ n ].getY() ) );
        }
      }
    }
    return dY;
  }


  public static void separate( Sprite pivot1, Sprite pivot2, Vector impulse, double pivot1movingResistance, double pivot2movingResistance ) {
    if( pivot1movingResistance < 0 ) {
      if( pivot2movingResistance < 0 ) return;
      pivot1movingResistance = 1.0;
      pivot2movingResistance = 0.0;
    } else if( pivot2movingResistance < 0 ) {
      pivot1movingResistance = 0.0;
      pivot2movingResistance = 1.0;
    }

    double k1, k2;
    double movingResistanceSum = pivot1movingResistance + pivot2movingResistance;
    if( movingResistanceSum != 0 ) {
      k1 = pivot2movingResistance / movingResistanceSum;
      k2 = pivot1movingResistance / movingResistanceSum;
    } else {
      k1 = 0.5d;
      k2 = 0.5d;
    }

    if( k1 != 0.0 ) pivot1.alterCoords( k1 * impulse.x, k1 * impulse.y );
    if( k2 != 0.0 ) pivot2.alterCoords( -k2 * impulse.x, -k2 * impulse.y );
  }
}
TOP

Related Classes of dwlab.shapes.sprites.shape_types.wedging_off.WedgingOffSprites

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.