package rabbitescape.render;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import rabbitescape.engine.Rabbit;
import rabbitescape.engine.Thing;
import rabbitescape.engine.WaterRegion;
import rabbitescape.engine.World;
import rabbitescape.engine.util.DupeStringCounter;
import rabbitescape.engine.util.Util;
import rabbitescape.engine.util.Util.Function;
public class Overlay
{
private final World world;
public final List<Thing> items;
public Overlay( World world )
{
this.world = world;
items = Util.list( Util.chain(
world.things,
world.rabbits,
world.waterTable.getListCopy()
) );
}
public String at( int x, int y )
{
List<WaterRegion> waterRegions = waterRegionsAt( x, y );
List<Thing> things = world.getThingsAt( x, y );
Rabbit[] rabbits = world.getRabbitsAt( x, y );
if ( waterRegions.size() == 0 &&
things.size() == 0 &&
rabbits.length == 0 )
{
return "";
}
Iterable<Thing> thingsHere = Util.chain( waterRegions, things, Arrays.asList( rabbits ) );
Function<Thing,String> textF = new Function<Thing,String>()
{
@Override
public String apply( Thing t )
{
return t.overlayText();
}
};
Iterable<String> strings = Util.map( textF, thingsHere );
DupeStringCounter dsc = new DupeStringCounter( strings );
return dsc.join( "\n" );
}
private List<WaterRegion> waterRegionsAt( int x, int y )
{
if ( x < 0 || y < 0 || x >= world.size.width || y >= world.size.height )
{
return Collections.emptyList();
}
else
{
return world.waterTable.getItemsAt( x, y );
}
}
}