Package examples

Source Code of examples.VectorSpriteExample

package examples;

import static dwlab.platform.Functions.*;
import dwlab.base.Project;
import dwlab.base.images.Image;
import dwlab.base.service.Align;
import dwlab.base.service.Service;
import dwlab.controllers.ButtonAction;
import dwlab.controllers.Key;
import dwlab.controllers.KeyboardKey;
import dwlab.platform.LWJGL;
import dwlab.shapes.maps.tilemaps.TileMap;
import dwlab.shapes.maps.tilemaps.TileSet;
import dwlab.shapes.sprites.Camera;
import dwlab.shapes.sprites.Sprite;
import dwlab.shapes.sprites.SpriteAndTileCollisionHandler;
import dwlab.shapes.sprites.VectorSprite;
import dwlab.shapes.sprites.shape_types.ShapeType;

public class VectorSpriteExample extends Project {
  public static void main(String[] argv) {
    LWJGL.init();
    main();
  }
 
  public static void main() {
    ( new VectorSpriteExample() ).act();
    initCamera();
  }
 
 
  int coinsQuantity = 100;
  int platformsQuantity = 100;
  int minPlatformLength = 3;
  int maxPlatformLength = 12;
  int mapSize = 128;

  int voidTile = 0;
  int bricksTile = 1;
  int coinTile = 2;

  ButtonAction jump = ButtonAction.create( KeyboardKey.create( Key.UP ) );
  ButtonAction moveLeft = ButtonAction.create( KeyboardKey.create( Key.LEFT ) );
  ButtonAction moveRight = ButtonAction.create( KeyboardKey.create( Key.RIGHT ) );

 
  public VectorSprite player = new VectorSprite() {
    double gravity = 10.0;
    double horizontalSpeed = 5.0;
    double jumpStrength = 15.0;

    boolean onLand;
    SpriteAndTileCollisionHandler horizontalCollisionHandler = new SpriteAndTileCollisionHandler(){
      @Override
      public void handleCollision( Sprite sprite, TileMap tileMap, int tileX, int tileY, Sprite collisionSprite ) {
        if( bricks( tileMap, tileX, tileY ) ) sprite.pushFrom( tileMap, tileX, tileY );
      }
    };
    SpriteAndTileCollisionHandler verticalCollisionHandler = new SpriteAndTileCollisionHandler<VectorSprite>(){
      @Override
      public void handleCollision( VectorSprite sprite, TileMap tileMap, int tileX, int tileY, Sprite collisionSprite ) {
        if( bricks( tileMap, tileX, tileY ) ) {
          sprite.pushFrom( tileMap, tileX, tileY );
          if( sprite.dY > 0 ) onLand = true;
          sprite.dY = 0;
        }
      }
    };

    @Override
    public void act() {
      move( dX, 0 );
      collisionsWith( tileMap, horizontalCollisionHandler );

      onLand = false;
      move( 0, dY );
      dY += perSecond( gravity );
      collisionsWith( tileMap, verticalCollisionHandler );

      dX = 0.0;
      if( moveLeft.isDown() ) {
        dX = -horizontalSpeed;
        setFacing( Facing.LEFT );
      } else if( moveRight.isDown() ) {
        dX = horizontalSpeed;
        setFacing( Facing.RIGHT );
      }

      if( onLand && jump.isDown() ) dY = -jumpStrength;
    }
   
         
    boolean bricks( TileMap tileMap, int tileX, int tileY ) {
      int tileNum = tileMap.getTile( tileX, tileY );
      if( tileNum == coinTile ) {
        tileMap.setTile( tileX, tileY, voidTile );
        coins += 1;
      } else if( tileNum == bricksTile ) {
        return true;
      }
      return false;
    }
  };
 
  public TileMap tileMap = TileMap.create( new TileSet( new Image( "res/tileset.png", 4, 1 ), 0 ), mapSize, mapSize );
  public int coins;

 
  @Override
  public void init() {
    player.shapeType = ShapeType.rectangle;
    player.setCoords( 0d, 2d - 0.5d * mapSize );
    player.setSize( 0.8d, 1.8d );
    player.visualizer.image = new Image( "res/mario.png", 4, 1 );
     
    tileMap.setSize( mapSize, mapSize );
    for( int n = 0; n < coinsQuantity; n++ ) {
      tileMap.setTile( (int) Service.random( 1, mapSize - 2 ), (int) Service.random( 1, mapSize - 2 ), coinTile );
    }
    for( int n = 0; n < platformsQuantity; n++ ) {
      int size = (int) Service.random( minPlatformLength, maxPlatformLength );
      int x = (int) Service.random( 1, mapSize - 1 - size );
      int y = (int) Service.random( 1, mapSize - 2 );
      for( int dX = 0; dX <= size; dX++ ) tileMap.setTile( x + dX, y, bricksTile );
    }
    for( int n = 0; n < mapSize ; n++ ) {
      tileMap.setTile( n, 0, bricksTile );
      tileMap.setTile( n, mapSize - 1, bricksTile );
      tileMap.setTile( 0, n ,bricksTile );
      tileMap.setTile( mapSize - 1, n, bricksTile );
    }
    tileMap.tileSet.collisionSprites = new Sprite[ 3 ][];
    for( int n = 1; n < 3; n ++ ) tileMap.tileSet.collisionSprites[ n ] = new Sprite[ 1 ];
    tileMap.tileSet.collisionSprites[ 1 ][ 0 ] = new Sprite( 0.5d, 0.5d, 1d, 1d );
    tileMap.tileSet.collisionSprites[ 2 ][ 0 ] = new Sprite( 0.5d, 0.5d, 1d );
  }
 

  @Override
  public void logic() {
    Camera.current.jumpTo( player );
    Camera.current.limitWith( tileMap );
    player.act();
  }

 
  @Override
  public void render() {
    tileMap.draw();
    player.draw();
    printText( "Move player with arrow Keys" );
    printText( "Coins: " + coins, 1 );
    printText( "LTVectorSprite, CollisionsWithTileMap, HandleCollisionWithTile example", Align.TO_CENTER, Align.TO_BOTTOM );
  }
}
TOP

Related Classes of examples.VectorSpriteExample

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.