package org.codecranachan.asteroidpush.base.ui.workshop;
import org.codecranachan.asteroidpush.base.ResourceLoader;
import org.codecranachan.asteroidpush.base.ui.widget.BasicWidget;
import org.codecranachan.asteroidpush.base.ui.widget.Widget;
import org.codecranachan.asteroidpush.base.workshop.BlueprintCollection;
import org.codecranachan.asteroidpush.base.workshop.Manipulator;
import org.codecranachan.asteroidpush.base.workshop.PartCatalogue;
import org.codecranachan.asteroidpush.base.workshop.PartSelector;
import org.codecranachan.asteroidpush.base.workshop.WorkshopCoordinator;
import org.codecranachan.asteroidpush.content.DefaultCatalogue;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Input;
import org.newdawn.slick.geom.Rectangle;
import org.newdawn.slick.state.StateBasedGame;
public class WorkshopUi extends BasicWidget {
private WorkshopUiLayout layout;
private WorkshopCoordinator coordinator;
private CreateBlueprintButton createBlueprintButton;
private Widget manipulatorWidget;
static String defaultFontName = "resources/Alfphabet-IV.ttf";
public WorkshopUi(BlueprintCollection collection, ResourceLoader loader) {
layout = new WorkshopUiLayout();
coordinator = createCoordinator(collection);
manipulatorWidget = new ManipulatorWidget(coordinator, loader);
createBlueprintButton = new CreateBlueprintButton(coordinator,
loader.loadFont(defaultFontName, 15));
updateBlueprintWidget();
layout.setCatalogueWidget(new SelectorWidget(coordinator, loader
.loadFont(defaultFontName, 15)));
layout.setSelectionWidget(new StartTestRunButton(coordinator, loader
.loadFont(defaultFontName, 15)));
}
private WorkshopCoordinator createCoordinator(BlueprintCollection collection) {
Manipulator manipulator = new Manipulator();
PartSelector selector = new PartSelector();
PartCatalogue catalogue = new DefaultCatalogue();
selector.addPartFactories(catalogue.getPartFactories());
return new WorkshopCoordinator(manipulator, selector, collection);
}
public void resize(Rectangle frame) {
updateBlueprintWidget();
layout.resize(frame);
}
public void render(Graphics g) {
layout.render(g);
}
public void update(GameContainer container, StateBasedGame game, int delta) {
layout.update(container, game, delta);
}
public void setHover(float x, float y) {
layout.setHover(x, y);
}
public void resetHover() {
layout.resetHover();
}
public void mousePressed(int button, int x, int y) {
layout.mousePressed(button, x, y);
}
public void keyPressed(int key) {
switch (key) {
case Input.KEY_LEFT:
case Input.KEY_SPACE:
coordinator.rotatePartLeft();
break;
case Input.KEY_RIGHT:
coordinator.rotatePartRight();
break;
case Input.KEY_F1:
case Input.KEY_F2:
case Input.KEY_F3:
case Input.KEY_F4:
case Input.KEY_F5:
case Input.KEY_F6:
case Input.KEY_F7:
case Input.KEY_F8:
case Input.KEY_F9:
case Input.KEY_F10:
case Input.KEY_F11:
case Input.KEY_F12:
break;
}
}
private void updateBlueprintWidget() {
if (coordinator.getManipulatedBlueprint() == null) {
layout.setBlueprintWidget(createBlueprintButton);
} else {
layout.setBlueprintWidget(manipulatorWidget);
}
}
}