package Roguelike.Ability.ActiveAbility.MovementType; import Roguelike.Global.Passability; import Roguelike.Ability.ActiveAbility.ActiveAbility; import Roguelike.Pathfinding.BresenhamLine; import Roguelike.Tiles.GameTile; import Roguelike.Tiles.Point; import Roguelike.Util.EnumBitflag; import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.XmlReader.Element; public class MovementTypeRay extends AbstractMovementType { private static final EnumBitflag<Passability> RayPassability = new EnumBitflag<Passability>( new Passability[] { Passability.LEVITATE } ); @Override public void parse( Element xml ) { } @Override public void init( ActiveAbility ab, int endx, int endy ) { Array<Point> path = BresenhamLine.line( ab.source.x, ab.source.y, endx, endy, ab.source.level.getGrid(), false, ab.getRange(), RayPassability, ab.getCaster() ); ab.AffectedTiles.clear(); for ( int i = 1; i < path.size; i++ ) { Point p = path.get( i ); GameTile tile = ab.source.level.getGameTile( p ); ab.AffectedTiles.add( tile ); if ( !tile.getPassable( RayPassability, ab.getCaster() ) ) { break; } } } @Override public boolean update( ActiveAbility ab ) { return true; } @Override public AbstractMovementType copy() { MovementTypeRay t = new MovementTypeRay(); return t; } @Override public void updateAccumulators( float cost ) { } @Override public boolean needsUpdate() { return false; } }