package com.fdangelo.circleworld.gui; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.ui.Label; import com.badlogic.gdx.scenes.scene2d.ui.Table; import com.badlogic.gdx.scenes.scene2d.ui.TextButton; import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener; import com.badlogic.gdx.utils.StringBuilder; import com.esotericsoftware.tablelayout.Value; import com.fdangelo.circleworld.GameLogic; import com.fdangelo.circleworld.gui.core.Screen; import com.fdangelo.circleworld.universeengine.Universe; import com.fdangelo.circleworld.universeengine.objects.UniverseObject; import com.fdangelo.circleworld.universeview.objects.AvatarInputMode; import com.fdangelo.circleworld.universeview.objects.AvatarViewInput; public class HudScreen extends Screen { private Label performance; private StringBuilder sb; private TextButton boardShipButton; private TextButton editButton; private AvatarMoveControlScreen avatarMoveControlScreen; private AvatarEditControlScreen avatarEditControlScreen; @Override protected void initScreen() { getScreenTable().left().top(); Table top = new Table(); getScreenTable().add(top).width(Value.percentWidth(1)); performance = new Label("", getDefaultSkin()); top.add(performance).top().left(); boardShipButton = new TextButton("BOARD SHIP", getDefaultSkin()); boardShipButton.addListener(new ChangeListener() { @Override public void changed(final ChangeEvent event, final Actor actor) { onBoardShipButtonClicked(); } }); editButton = new TextButton("EDIT", getDefaultSkin()); editButton.addListener(new ChangeListener() { @Override public void changed(ChangeEvent event, Actor actor) { onEditButtonClicked(); } }); top.add(editButton).top().right().width(200).height(100).expandX(); top.add(boardShipButton).top().right().width(200).height(100); avatarMoveControlScreen = new AvatarMoveControlScreen(); addSubscreen(avatarMoveControlScreen); avatarEditControlScreen = new AvatarEditControlScreen(); addSubscreen(avatarEditControlScreen); avatarMoveControlScreen.setVisible(true); avatarEditControlScreen.setVisible(false); sb = new StringBuilder(); } private void onEditButtonClicked() { if (AvatarViewInput.mode == AvatarInputMode.Edit) { AvatarViewInput.mode = AvatarInputMode.Move; avatarMoveControlScreen.setVisible(true); avatarEditControlScreen.setVisible(false); editButton.setText("EDIT"); } else { AvatarViewInput.mode = AvatarInputMode.Edit; avatarMoveControlScreen.setVisible(false); avatarEditControlScreen.setVisible(true); editButton.setText("EXIT EDIT"); } } private void onBoardShipButtonClicked() { UniverseObject ship = GameLogic.getInstace().getUniverseView().getShipView().getUniverseObject(); Universe universe = GameLogic.getInstace().getUniverseView().getUniverse(); switch (GameLogic.getInstace().getState()) { case PlayingAvatar: boardShipButton.setText("LEAVE SHIP"); GameLogic.getInstace().playerBoardShip(); break; case PlayingShip: final int clickedThingIndex = universe.findClosestRenderedThing(ship.getPositionX(), ship.getPositionY(), 30.0f); if (clickedThingIndex >= 0) { boardShipButton.setText("BOARD SHIP"); GameLogic.getInstace().playerLeaveShip(universe.getPlanet((short) clickedThingIndex)); } break; default: // Nothing break; } } @Override protected void onUpdate(final float deltaTime) { updatePerformance(); } private final void updatePerformance() { // int totalRenderCalls = guistage.getSpriteBatch().renderCalls + // gamelogic.getStage().getSpriteBatch().renderCalls; final int totalRenderCalls = -1; sb.length = 0; sb.append("FPS: ").append(Gdx.graphics.getFramesPerSecond()).append(" Used Memory: ").append(Gdx.app.getJavaHeap() / 1024).append("kb Used Native: ") .append(Gdx.app.getNativeHeap() / 1024).append("kb Render Calls: ").append(totalRenderCalls); performance.setText(sb); } }