use of de.gg.game.model.entities.Player in project ProjektGG by eskalon.
the class PlayerFactory method createPlayerCharacter.
/**
* Creates a player.
*
* @param characterId
* @param icon
* @param profession
* @param residenceIndex
* @param productionBuildingIndex
* @param agilitySkill
* @param bargainSkill
* @param combatSkill
* @param craftingSkill
* @param rhetoricalSkill
* @param stealthSkill
* @return the player entity.
*/
public static Player createPlayerCharacter(short characterId, PlayerIcon icon, Profession profession, short residenceIndex, short productionBuildingIndex, int agilitySkill, int bargainSkill, int combatSkill, int craftingSkill, int rhetoricalSkill, int stealthSkill) {
Player p = new Player();
p.setAvailableAp(4);
p.setCurrentlyPlayedCharacterId(characterId);
p.setIcon(icon);
p.getLearnedProfessions().add(profession);
p.getOwnedBuidings().add(residenceIndex);
p.getOwnedBuidings().add(productionBuildingIndex);
p.getSkills().setAgilitySkill(agilitySkill);
p.getSkills().setBargainSkill(bargainSkill);
p.getSkills().setCombatSkill(combatSkill);
p.getSkills().setCraftingSkill(craftingSkill);
p.getSkills().setRhetoricalSkill(rhetoricalSkill);
p.getSkills().setStealthSkill(stealthSkill);
return p;
}
use of de.gg.game.model.entities.Player in project ProjektGG by eskalon.
the class GameServer method onClientHandshake.
@Override
protected synchronized void onClientHandshake(Connection con, ClientHandshakeRequest msg) {
Short id = connections.get(con);
LobbyPlayer p;
if (!serverSetup.getVersion().equals(msg.getVersion())) {
Log.info("Server", "Kick: Version mismatch (%s)", msg.getVersion());
con.sendTCP(new FailedHandshakeResponse(Lang.get("dialog.connecting_failed.version_mismatch")));
con.close();
return;
}
if (savedGame != null) {
short foundId = -1;
for (Entry<Short, String> e : savedGame.clientIdentifiers.entrySet()) {
if (e.getValue().equals(msg.getHostname())) {
foundId = e.getKey();
break;
}
}
if (foundId == -1) {
Log.info("Server", "Kick: Client isn't part of this loaded save game");
con.sendTCP(new FailedHandshakeResponse(Lang.get("dialog.connecting_failed.not_in_save")));
con.close();
return;
} else {
if ((id == HOST_PLAYER_NETWORK_ID && foundId != HOST_PLAYER_NETWORK_ID) || (foundId == HOST_PLAYER_NETWORK_ID && id != HOST_PLAYER_NETWORK_ID)) {
// Host has hanged changed
Log.info("Server", "Kick: The host of a loaded save game cannot be changed");
con.sendTCP(new FailedHandshakeResponse(Lang.get("dialog.connecting_failed.cannot_change_host")));
con.close();
// Server gets closed if need be
return;
}
Log.info("Server", "Client was recognized as part of this loaded save game");
Player oldPlayer = savedGame.world.getPlayer(foundId);
Character oldCharacter = savedGame.world.getCharacter(oldPlayer.getCurrentlyPlayedCharacterId());
p = new LobbyPlayer(oldCharacter.getName(), oldCharacter.getSurname(), oldPlayer.getIcon(), -1, oldCharacter.isMale());
}
} else {
Log.info("Server", "Client %d was registered as new player", id);
p = PlayerUtils.getRandomPlayerWithUnusedProperties(playerStubs, players.values());
}
players.put(id, p);
// Inform the other clients
resultListener.onPlayerJoined(id, p);
// Establish RMI connection (part 1)
objectSpace.addConnection(con);
Log.info("Server", "RMI connection to client established");
// Perform the handshake
con.sendTCP(new SuccessfulHandshakeResponse(id));
}
use of de.gg.game.model.entities.Player in project ProjektGG by eskalon.
the class GameBallotScreen method onNewBallot.
@Subscribe
private void onNewBallot(NewBallotEvent ev) {
if (ev.getNewBallot() == null) {
application.getScreenManager().pushScreen("map", "circle_open");
return;
}
World world = application.getClient().getSession().getWorld();
Player localPlayer = application.getClient().getLocalPlayer();
optionTable.clear();
voterTable.clear();
buttons.clear();
infoText.setText(ev.getNewBallot().getInfoText());
// Display the voters
voterTable.add(new Label(Lang.get("screen.vote.voters"), skin, "title")).padBottom(12).row();
for (short s : ev.getNewBallot().getVoters()) {
// PositionType posT = world.getCharacter(s).getPosition();
boolean isLocalPlayer = s == application.getClient().getLocalPlayer().getCurrentlyPlayedCharacterId();
voterTable.add(new CharacterComponent(skin, world.getCharacter(s), isLocalPlayer ? -1 : application.getClient().getOpinionOfOtherCharacter(s))).left().padBottom(25).row();
}
// Display the options (if the player can vote)
if (ev.getNewBallot().getVoters().contains(localPlayer.getCurrentlyPlayedCharacterId())) {
for (BallotOption option : ev.getNewBallot().getOptions()) {
ImageTextButton button = new OffsettableImageTextButton(Lang.get(option), skin, 5);
button.addListener(new ButtonClickListener(application.getSoundManager()) {
@Override
protected void onClick() {
application.getClient().getActionHandler().castVote(option.getValue());
for (Button b : buttons) {
b.setDisabled(true);
b.setTouchable(Touchable.disabled);
}
}
});
buttons.add(button);
if (option.isCharacter() && option.getValue() != application.getClient().getLocalPlayer().getCurrentlyPlayedCharacterId()) {
// PositionType posT = world.getCharacters()
// .get((short) option.getValue()).getPosition();
optionTable.add(new CharacterComponent(skin, world.getCharacter((short) option.getValue()), application.getClient().getOpinionOfOtherCharacter((short) option.getValue()))).right().padBottom(8).row();
}
optionTable.add(button).right().padBottom(15).row();
}
}
}
use of de.gg.game.model.entities.Player in project ProjektGG by eskalon.
the class GameMapScreen method setUIValues.
@Override
protected void setUIValues() {
GameSession session = application.getClient().getSession();
World world = session.getWorld();
Player player = application.getClient().getLocalPlayer();
if (pushParams != null) {
// Is a new game
gameRenderer.resetCamera();
selectionInputController.setWorld(world);
gameSpeedInputProcessor.setClientActionHandler(application.getClient().getActionHandler());
iconButton.getStyle().imageUp = skin.getDrawable(player.getIcon().getShieldDrawableName());
}
selectionInputController.resetSelection();
movementInputController.resetInput();
dateLabel.setText(Lang.get("screen.map.time", GameClock.getSeason(session.getCurrentRound()), GameClock.getYear(session.getCurrentRound())));
}
use of de.gg.game.model.entities.Player in project ProjektGG by eskalon.
the class GameMapScreen method create.
@Override
protected void create() {
super.create();
camera = new CameraWrapper(67, application.getWidth(), application.getHeight());
camera.setPosition(application.getWidth() / 2, application.getHeight() / 2, 0);
postProcessor = new PostProcessingPipeline(application.getWidth(), application.getHeight(), true);
pausePostProcessingEffect = new ColorBlendEffect(application.getUICamera(), new Color(0.4F, 0.4F, 0.4F, 0.4F));
gameRenderer = new GameRenderer(camera.getCamera(), fragmentShader.getString());
selectionInputController = new MapSelectionInputController(application.getEventBus(), camera.getCamera());
addInputProcessor(selectionInputController);
movementInputController = new MapMovementInputController(camera, application.getSettings());
addInputProcessor(movementInputController);
gameSpeedInputProcessor = new GameSpeedInputProcessor(application.getSettings());
addInputProcessor(gameSpeedInputProcessor);
// CHARACTER DIALOG
BasicDialog characterMenuDialog = new BasicDialog(Lang.get("screen.map.character_config"), skin, "big");
ImageTextButton closeCharacterMenuButton = new ImageTextButton(Lang.get("ui.generic.close"), skin);
closeCharacterMenuButton.addListener(new ButtonClickListener(application.getSoundManager()) {
@Override
protected void onClick() {
characterMenuDialog.hide();
}
});
Table characterMenuTable = new Table();
Table changeableCharacterMenuTable = new Table();
ImageTextButton characterMenuTab1Button = new ImageTextButton(Lang.get("screen.map.character_config.character"), skin);
ImageTextButton characterMenuTab2Button = new ImageTextButton(Lang.get("screen.map.character_config.privileges"), skin);
characterMenuTab1Button.addListener(new ButtonClickListener(application.getSoundManager()) {
@Override
protected void onClick() {
// CHARACTER & FAMILY
changeableCharacterMenuTable.clear();
changeableCharacterMenuTable.add(new Label(Lang.get("screen.map.character_config.name"), skin, "dark")).padBottom(50).row();
changeableCharacterMenuTable.add(new Label(Lang.get("screen.map.character_config.family"), skin, "dark")).row();
changeableCharacterMenuTable.add(new Label(Lang.get("screen.map.character_config.find_so"), skin, "dark"));
}
});
characterMenuTab2Button.addListener(new ButtonClickListener(application.getSoundManager()) {
@Override
protected void onClick() {
// PRIVILEGES
changeableCharacterMenuTable.clear();
changeableCharacterMenuTable.add(new Label(Lang.get("screen.map.character_config.privileges_list"), skin, "dark")).row();
if (application.getClient().getLocalPlayerCharacter().getPosition() != null) {
// TODO Position privileges
// TODO Impeachment
ImageTextButton kickButton = new ImageTextButton(Lang.get("screen.map.character_config.privilege.impeach"), skin);
kickButton.addListener(new ButtonClickListener(application.getSoundManager()) {
@Override
protected void onClick() {
short mayor = application.getClient().getSession().getWorld().getPosition(PositionType.MAYOR).getCurrentHolder();
if (mayor != -1)
application.getClient().getActionHandler().arrangeImpeachmentVote(mayor, (param) -> {
if ((Boolean) param == true) {
SimpleTextDialog.createAndShow(stage, skin, Lang.get("screen.map.character_config.privilege.success"), Lang.get("ui.generic.wip"));
} else {
SimpleTextDialog.createAndShow(stage, skin, Lang.get("ui.generic.error"), Lang.get("ui.generic.rmi_error"));
}
});
}
});
changeableCharacterMenuTable.add(kickButton);
}
}
});
Table characterMenuTabTable = new Table();
characterMenuTabTable.add(characterMenuTab1Button).padRight(5);
characterMenuTabTable.add(characterMenuTab2Button);
characterMenuTable.add(characterMenuTabTable).padRight(30).padBottom(15).center().top().row();
characterMenuTable.add(changeableCharacterMenuTable).padBottom(15).top().height(315).row();
characterMenuTable.add(closeCharacterMenuButton).padRight(30).center().top();
characterMenuDialog.add(characterMenuTable).pad(30);
// PLAYER ICON
iconButton = new ImageButton(skin.getDrawable(PlayerIcon.values()[0].getShieldDrawableName()));
iconButton.addListener(new ButtonClickListener(application.getSoundManager()) {
@Override
protected void onClick() {
characterMenuDialog.show(stage);
characterMenuDialog.setPosition(0, 103);
}
});
Table iconTable = new Table();
iconTable.setBackground(skin.getDrawable("icon_background"));
iconTable.add(iconButton).padLeft(8).padRight(10).padBottom(1);
// INFO STUFF
Table infoTable = new Table();
// Gold
Table goldTable = new Table();
goldTable.setBackground(skin.getDrawable("info_background"));
goldTable.add(new Image(skin.getDrawable("icon_gold_coin"))).left().top().padLeft(4).padBottom(2).padRight(4);
goldTable.add(new Label("19 Gulden", skin, "dark")).padBottom(5).expandX().left().top();
// Name
Table nameTable = new Table();
nameTable.setBackground(skin.getDrawable("info_background"));
nameTable.add(new Label("Freiherr Franz von Woyzeck", skin, "big_dark")).padBottom(2).expandX().left();
// Notifications
Table notificationTable = new Table();
infoTable.add(goldTable).row();
infoTable.add(nameTable).left().row();
infoTable.add(notificationTable).left().padLeft(2).padTop(2).row();
// DATE STUFF
Table dateTimeTable = new Table();
// Date
Table dateTable = new Table();
dateLabel = new Label("", skin, "dark");
dateTable.setBackground(skin.getDrawable("date_background"));
dateTable.add(dateLabel).padLeft(9).padBottom(5).expandX().left();
// Clock
Table clockTable = new Table();
clockTable.setBackground(skin.getDrawable("clock_background"));
dateTimeTable.add(dateTable).row();
dateTimeTable.add(clockTable).right();
// MISC
Table miscTable = new Table();
Table misc2Table = new Table();
// Inventory
ImageButton inventoryButton = new ImageButton(skin, "inventory");
// Book
ImageButton bookButton = new ImageButton(skin, "leaning_book");
// Minimap
Table minimapTable = new Table();
minimapTable.setBackground(skin.getDrawable("minimap_test"));
misc2Table.add(inventoryButton).padRight(2);
misc2Table.add(bookButton).padTop(2).row();
miscTable.add(misc2Table).right().row();
miscTable.add(minimapTable);
mainTable.setSkin(skin);
mainTable.setFillParent(true);
mainTable.add(iconTable).top().left();
mainTable.add(infoTable).top().left();
mainTable.add(dateTimeTable).right().expandX().row();
mainTable.add("").fill();
mainTable.add("").expand().fill();
mainTable.add(miscTable).expandY().bottom().right();
// PAUSE DIALOG
pauseDialog = new BasicDialog("", skin) {
@Override
protected void result(Object object) {
pauseShown = false;
postProcessor.removeEffect(pausePostProcessingEffect);
if (object == (Integer) 1) {
application.getScreenManager().pushScreen("settings", "blendingTransition");
} else {
Log.info("Client", "Verbindung wird getrennt");
final GameClient client = application.getClient();
final GameServer server = application.getServer();
// Set stuff to null to stop updates
application.setClient(null);
application.setServer(null);
ThreadHandler.getInstance().executeRunnable(() -> {
client.disconnect();
if (server != null) {
server.stop();
}
});
DiscordGGHandler.getInstance().setMenuPresence();
application.getScreenManager().pushScreen("main_menu", null);
}
}
};
pauseDialog.button(Lang.get("screen.map.pause.settings"), 1).button(Lang.get("screen.map.pause.disconnect"), 2);
houseSelectionDialog = new BasicDialog("", skin);
houseSelectionDialog.button("Test");
stage.addListener(new InputListener() {
@Override
public boolean keyDown(InputEvent event, int keycode) {
if (keycode == Keys.ESCAPE) {
if (pauseShown) {
pauseDialog.hide();
postProcessor.removeEffect(pausePostProcessingEffect);
} else {
pauseDialog.show(stage);
postProcessor.addEffect(pausePostProcessingEffect);
}
pauseShown = !pauseShown;
return true;
}
return false;
}
});
}
Aggregations