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.
66 lines
1.6 KiB
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);
|
|
}
|
|
|
|
}
|
|
|