Turtle programming game that was never finished to a playable state (but had cute graphics and sounds)
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.
tortuga/src/net/tortuga/gui/widgets/composite/PgmShopBase.java

205 lines
3.0 KiB

package net.tortuga.gui.widgets.composite;
import net.tortuga.annotations.NeedsOverride;
import net.tortuga.annotations.Unimplemented;
import net.tortuga.gui.widgets.Widget;
import net.tortuga.level.program.tiles.ProgTileBase;
import com.porcupine.coord.Coord;
/**
* Program shop slot
*
* @author Ondřej Hruška (MightyPork)
*/
public abstract class PgmShopBase extends Widget implements IDragSlot {
private static final Coord SIZE = new Coord(64, 64);
/** DND server */
protected DragDropServer server = null;
/** Stone in slot */
protected DragStone stone = null;
protected boolean mouseOver = false;
protected int createdStones = 0;
@Override
public boolean hasStone()
{
return stone != null && (createdStones == 0 || !stone.getStoneBase().isSingleInstance());
}
/**
* Shop slot base
*/
public PgmShopBase() {
setMargins(0, 0, 0, 0);
}
@Override
@Unimplemented
public void deleteStone()
{}
@Override
public boolean isShopSlot()
{
return true;
}
public void setShopStone(ProgTileBase stone)
{
this.stone = new DragStone(stone);
}
/**
* Set drag'n'drop server
*
* @param server the server
* @return this
*/
public PgmShopBase setServer(DragDropServer server)
{
this.server = server;
server.registerSlot(this);
return this;
}
@Override
public final void render(Coord mouse)
{
Coord center = rect.getCenter();
renderSlotBackground(center);
if (hasStone()) {
getStoneInSlot().render(center);
}
}
/**
* Render slot background texture
*
* @param center center coord
*/
public abstract void renderSlotBackground(Coord center);
@Override
public Widget onScroll(Coord pos, int scroll)
{
return null;
}
@Override
public Widget onKey(int key, char chr, boolean down)
{
return null;
}
@Override
public void calcChildSizes()
{
setMinSize(SIZE);
rect.setTo(minSize);
}
@Override
public DragStone getStoneInSlot()
{
return stone;
}
@Override
public boolean acceptsStone(IDragStone stone)
{
return true; // trash for all
}
@Override
public boolean putStone(IDragStone stone)
{
// trash function
server.notifySlotsStoneDestroyed(stone);
return true;
}
@Override
public void returnStone(IDragStone stone)
{
// discard it
server.notifySlotsStoneDestroyed(stone);
}
@Override
@NeedsOverride
public void onStoneCreated(DragStone stone)
{
if (stone.equals(this.stone)) {
createdStones++;
}
}
@Override
@NeedsOverride
public void onStoneDestroyed(DragStone stone)
{
if (stone.equals(this.stone)) {
createdStones--;
}
}
@Override
public Widget onMouseButton(Coord pos, int button, boolean down)
{
return null;
}
@Override
public void handleStaticInputs(Coord pos)
{
super.handleStaticInputs(pos);
mouseOver = isMouseOver(pos);
}
@Override
public DragStone grabStone()
{
if (hasStone()) {
server.notifySlotsStoneCreated(stone);
return stone.copy();
}
return null;
}
@Override
public boolean isMouseOver()
{
return mouseOver && isVisible() && isEnabled();
}
}