Rogue: Savage Rats, a retro-themed dungeon crawler
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
rogue-savage-rats/src/mightypork/rogue/world/tile/render/DoorTileRenderer.java

66 lines
1.6 KiB

package mightypork.rogue.world.tile.render;
import mightypork.gamecore.core.App;
import mightypork.gamecore.resources.textures.TxSheet;
import mightypork.rogue.world.level.render.TileRenderContext;
import mightypork.rogue.world.tile.TileRenderer;
import mightypork.rogue.world.tile.impl.TileBaseDoor;
import mightypork.utils.math.constraints.rect.Rect;
import mightypork.utils.math.timing.TimedTask;
public class DoorTileRenderer extends TileRenderer {
private final TxSheet locked;
private final TxSheet closed;
private final TxSheet open;
private boolean visuallyOpen = false;
private final TimedTask closeTask = new TimedTask() {
@Override
public void run()
{
visuallyOpen = ((TileBaseDoor) tile).isOpen();
}
};
public DoorTileRenderer(TileBaseDoor doorTile, TxSheet locked, TxSheet closed, TxSheet open) {
super(doorTile);
this.locked = locked;
this.closed = closed;
this.open = open;
}
@Override
public void renderTile(TileRenderContext context)
{
final Rect rect = context.getRect();
if (!visuallyOpen && ((TileBaseDoor) tile).isOpen()) visuallyOpen = true;
if (visuallyOpen && !((TileBaseDoor) tile).isOpen()) {
if (!closeTask.isRunning()) closeTask.start(0.4);
}
if (visuallyOpen) {
App.gfx().quad(rect, open.getRandomQuad(context.getTileNoise()));
} else {
final TxSheet sheet = (((TileBaseDoor) tile).isLocked() ? locked : closed);
App.gfx().quad(rect, sheet.getRandomQuad(context.getTileNoise()));
}
}
@Override
public void update(double delta)
{
closeTask.update(delta);
}
}