package rabbitescape.engine.textworld;
import java.util.List;
import rabbitescape.engine.Entrance;
import rabbitescape.engine.Exit;
import rabbitescape.engine.Fire;
import rabbitescape.engine.Pipe;
import rabbitescape.engine.Thing;
import rabbitescape.engine.Token;
import rabbitescape.engine.Token.Type;
import rabbitescape.engine.err.RabbitEscapeException;
public class ThingRenderer
{
public static class UnknownTokenType extends RabbitEscapeException
{
public final Type type;
public UnknownTokenType( Type type )
{
this.type = type;
}
private static final long serialVersionUID = 1L;
}
public static void render( Chars chars, List<Thing> things )
{
for ( Thing thing : things )
{
chars.set(
thing.x, thing.y, charForThing( thing ), thing.saveState() );
}
}
private static char charForThing( Thing thing )
{
if ( thing instanceof Entrance )
{
return 'Q';
}
else if ( thing instanceof Exit )
{
return 'O';
}
else if ( thing instanceof Token )
{
return charForToken( (Token)thing );
}
else if ( thing instanceof Fire )
{
return 'A';
}
else if ( thing instanceof Pipe )
{
return 'P';
}
else
{
throw new AssertionError(
"Unknown Thing type: " + thing.getClass() );
}
}
private static char charForToken( Token thing )
{
switch ( thing.type )
{
case bash: return 'b';
case dig: return 'd';
case bridge: return 'i';
case block: return 'k';
case climb: return 'c';
case explode: return 'p';
case brolly: return 'l';
default: throw new UnknownTokenType( thing.type );
}
}
}