use of com.janfic.games.computercombat.model.Deck in project computercombat by janfic.
the class DecksScreen method populateDecks.
private void populateDecks() {
decks.clearChildren();
List<Deck> playerDecks = SQLAPI.getSingleton().getPlayerDecks(game.getCurrentProfile().getUID());
for (Deck deck : playerDecks) {
DeckActor d = new DeckActor(deck, skin);
d.setColor(Color.LIGHT_GRAY);
d.addListener(new ClickListener() {
@Override
public void clicked(InputEvent event, float x, float y) {
if (selectedDeck != null) {
selectedDeck.unselect();
}
deleteButton.setColor(Color.WHITE);
deleteButton.setDisabled(false);
selectedDeck = d;
selectedDeck.select();
updateDeckProgress();
updateDeckCards();
}
});
decks.add(d).row();
}
}
use of com.janfic.games.computercombat.model.Deck in project computercombat by janfic.
the class SQLAPI method getPlayerDecks.
public List<Deck> getPlayerDecks(String uid) {
System.out.println("[SERVER][MYSQL]: Querying for Player Decks Data");
List<Deck> decks = new ArrayList<>();
try {
String sql = "SELECT * FROM deck\n" + "WHERE deck.profile_id = '" + uid + "';";
Statement statement = connection.createStatement();
ResultSet set = statement.executeQuery(sql);
while (set.next()) {
int deckID = set.getInt("deck.id");
decks.add(getDeck(deckID, uid));
}
} catch (Exception e) {
e.printStackTrace();
}
return decks;
}
use of com.janfic.games.computercombat.model.Deck in project computercombat by janfic.
the class DecksScreen method show.
@Override
public void show() {
this.stageCamera = new OrthographicCamera(1920 / 4, 1080 / 4);
this.isPopup = false;
this.stage = ComputerCombatGame.makeNewStage(stageCamera);
Profile profile = game.getCurrentProfile();
software = SQLAPI.getSingleton().getPlayerOwnedCards(profile.getUID());
Gdx.input.setInputProcessor(stage);
filterWindow = new FilterWindowActor(game, skin);
table = new Table();
table.setFillParent(true);
table.defaults().space(3);
table.pad(2);
Table titleTable = new Table(skin);
titleTable.setBackground("border");
Label title = new Label("Decks", skin);
title.setAlignment(Align.center);
TextButton backButton = new TextButton("Back", skin);
backButton.addListener(new ClickListener() {
@Override
public void clicked(InputEvent event, float x, float y) {
game.popScreen();
}
});
titleTable.add(backButton);
titleTable.add(title).growX().row();
decksTable = new Table(skin);
decksTable.defaults().space(3);
Label decksTitle = new Label("Decks", skin, "title");
decksTitle.setAlignment(Align.center);
decks = new Table();
decks.defaults().space(5).height(60).width(70);
populateDecks();
ScrollPane decksScroll = new ScrollPane(decks, skin);
decksScroll.setFadeScrollBars(false);
decksScroll.addListener(new InputListener() {
@Override
public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) {
stage.setScrollFocus(decksScroll);
}
});
createButton = new TextButton("Create", skin);
createButton.addListener(new ClickListener() {
@Override
public void clicked(InputEvent event, float x, float y) {
Window window = new Window("Create New Deck", skin);
window.setSize(stage.getWidth() / 2, stage.getHeight() / 2);
window.setPosition(stage.getWidth() / 4, stage.getHeight() / 4);
Table table = new Table();
TextButton doneButton = new TextButton("Done", skin);
TextButton cancelButton = new TextButton("Cancel", skin);
TextField deckNameField = new TextField("", skin);
doneButton.addListener(new ClickListener() {
@Override
public void clicked(InputEvent event, float x, float y) {
Deck deck = new Deck(deckNameField.getText());
SQLAPI.getSingleton().savePlayerDeck(deck, game.getCurrentProfile().getUID());
game.getCurrentProfile().getDecks().add(deck);
populateDecks();
window.remove();
isPopup = false;
}
});
cancelButton.addListener(new ClickListener() {
@Override
public void clicked(InputEvent event, float x, float y) {
window.remove();
isPopup = false;
}
});
table.add(new Label("Enter New Deck Name:", skin)).center().expand().row();
table.add(deckNameField).expand().row();
table.add(doneButton).growX().row();
table.add(cancelButton).growX().row();
window.add(table).grow();
isPopup = true;
stage.addActor(window);
}
});
deleteButton = new TextButton("Delete", skin);
deleteButton.setColor(Color.LIGHT_GRAY);
deleteButton.setDisabled(true);
deleteButton.addListener(new ClickListener() {
@Override
public void clicked(InputEvent event, float x, float y) {
if (selectedDeck == null) {
return;
}
Window window = new Window("Delete Deck", skin);
window.setSize(stage.getWidth() / 2, stage.getHeight() / 2);
window.setPosition(stage.getWidth() / 4, stage.getHeight() / 4);
Table table = new Table();
TextButton doneButton = new TextButton("Delete Deck", skin);
TextButton cancelButton = new TextButton("Cancel", skin);
doneButton.addListener(new ClickListener() {
@Override
public void clicked(InputEvent event, float x, float y) {
if (selectedDeck == null) {
return;
}
game.getCurrentProfile().getDecks().remove(selectedDeck.getDeck());
SQLAPI.getSingleton().deletePlayerDeck(selectedDeck.getDeck(), game.getCurrentProfile().getUID());
selectedDeck = null;
deckCards.clearChildren();
populateDecks();
window.remove();
deleteButton.setColor(Color.LIGHT_GRAY);
isPopup = false;
}
});
cancelButton.addListener(new ClickListener() {
@Override
public void clicked(InputEvent event, float x, float y) {
window.remove();
isPopup = false;
}
});
Label l = new Label("Are you sure you want to delete deck: \"" + selectedDeck.getDeck().getName() + "\"?\nThis action cannot be undone!", skin);
l.setAlignment(Align.center);
l.setWrap(true);
table.add(l).grow().row();
table.add(doneButton).growX().row();
table.add(cancelButton).growX().row();
window.add(table).grow();
isPopup = true;
stage.addActor(window);
}
});
decksTable.add(decksTitle).growX().row();
decksTable.add(decksScroll).grow().row();
decksTable.add(createButton).growX().row();
decksTable.add(deleteButton).growX().row();
deckTable = new Table(skin);
deckTable.defaults().space(3);
Label cardsTitle = new Label("Cards", skin, "title");
cardsTitle.setAlignment(Align.center);
deckSize = new ProgressBar(0, 8, 1, false, skin);
deckSize.setWidth(100);
Stack deckSizeStack = new Stack();
deckSizeStack.add(deckSize);
Table deckSizeOverlay = new Table();
deckSizeArea = new OverlayTextLabelArea<DeckActor>(skin, selectedDeck) {
@Override
public String updateLabel(DeckActor dataObject) {
if (dataObject != null) {
int amount = dataObject.getDeck().getCardCount(-1);
deckSize.setValue(dataObject.getDeck().getCardCount(-1));
return "" + dataObject.getDeck().getCardCount(-1);
} else {
return "-";
}
}
};
deckSizeOverlay.add(deckSizeArea).expand().fillX().width(9).height(9);
deckSizeStack.add(deckSizeOverlay);
deckCards = new Table();
deckCards.defaults().space(5);
ScrollPane deckCardsPane = new ScrollPane(deckCards, skin);
deckCardsPane.setFadeScrollBars(false);
deckCardsPane.addListener(new InputListener() {
@Override
public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) {
stage.setScrollFocus(deckCardsPane);
}
});
TextButton saveButton = new TextButton("Save", skin);
saveButton.addListener(new ClickListener() {
@Override
public void clicked(InputEvent event, float x, float y) {
if (selectedDeck != null) {
int amount = selectedDeck.getDeck().getCardCount(-1);
if (amount != 8) {
Window window = new Window("Invalid Deck", skin);
window.setSize(stage.getWidth() / 2f, stage.getHeight() / 2f);
window.setPosition(stage.getWidth() / 4f, stage.getHeight() / 4f);
Label info = new Label("The selected deck will be saved. But it is invalid for play due because it has " + amount + " cards.\n Decks must have exactly 8 cards.", skin);
info.setWrap(true);
info.setAlignment(Align.center);
TextButton okay = new TextButton("Okay", skin);
okay.addListener(new ClickListener() {
@Override
public void clicked(InputEvent event, float x, float y) {
window.remove();
SQLAPI.getSingleton().savePlayerDeck(selectedDeck.getDeck(), game.getCurrentProfile().getUID());
saveButton.addAction(Actions.sequence(Actions.color(Color.GREEN), Actions.color(Color.WHITE, 2)));
}
});
window.add(info).grow().row();
window.add(okay).growX().row();
stage.addActor(window);
} else {
SQLAPI.getSingleton().savePlayerDeck(selectedDeck.getDeck(), game.getCurrentProfile().getUID());
saveButton.addAction(Actions.sequence(Actions.color(Color.GREEN), Actions.color(Color.WHITE, 2)));
}
}
}
});
deckTable.add(cardsTitle).growX().row();
deckTable.add(deckSizeStack).width(100).row();
deckTable.add(deckCardsPane).grow().row();
deckTable.add(saveButton).growX().row();
collectionTable = new Table(skin);
collectionTable.defaults().space(3);
Table titleRow = new Table(skin);
titleRow.setBackground("border");
Label collectionTitle = new Label("Collection", skin);
collectionTitle.setAlignment(Align.center);
TextButton filterButton = new TextButton("Filter", skin);
filterButton.addListener(new ClickListener() {
@Override
public void clicked(InputEvent event, float x, float y) {
filterWindow.setSize(4 * stage.getWidth() / 5, 4 * stage.getHeight() / 5);
filterWindow.setPosition(stage.getWidth() / 10, stage.getHeight() / 10);
filterWindow.addApplyButtonListener(new ClickListener() {
@Override
public void clicked(InputEvent event, float x, float y) {
buildCollection();
}
});
filterButton.getStage().addActor(filterWindow);
}
});
titleRow.add(collectionTitle).growX();
titleRow.add(filterButton);
collection = new Table(skin);
collection.defaults().space(5).growY();
ScrollPane collectionPane = new ScrollPane(collection, skin);
collectionPane.setFadeScrollBars(false);
collectionPane.addListener(new InputListener() {
@Override
public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) {
stage.setScrollFocus(collectionPane);
}
});
collectionTable.add(titleRow).growX().row();
collectionTable.add(collectionPane).grow().row();
table.add(titleTable).growX().colspan(3).row();
table.add(decksTable).width(Value.percentWidth(0.20f, table)).growY();
table.add(deckTable).width(Value.percentWidth(0.25f, table)).growY();
table.add(collectionTable).grow().row();
stage.addActor(table);
this.deckToCollectionDragAndDrop = new DragAndDrop();
this.collectionToDeckDragAndDrop = new DragAndDrop();
deckToCollectionDragAndDrop.addTarget(new Target(collectionPane) {
@Override
public boolean drag(Source source, Payload payload, float x, float y, int pointer) {
return true;
}
@Override
public void drop(Source source, Payload payload, float x, float y, int pointer) {
if (selectedDeck == null) {
return;
}
Card card = (Card) payload.getObject();
selectedDeck.getDeck().removeCard(card, 1);
updateDeckCards();
}
});
collectionToDeckDragAndDrop.addTarget(new Target(deckCardsPane) {
@Override
public boolean drag(Source source, Payload payload, float x, float y, int pointer) {
return true;
}
@Override
public void drop(Source source, Payload payload, float x, float y, int pointer) {
if (selectedDeck == null) {
return;
}
Card card = (Card) payload.getObject();
if (card.getID() == 0) {
// prevent adding computer to deck
return;
}
if (selectedDeck.getDeck().getCardCount(card.getID()) < software.get(card)) {
selectedDeck.getDeck().addCard(card, 1);
updateDeckCards();
}
}
});
buildCollection();
}
use of com.janfic.games.computercombat.model.Deck in project computercombat by janfic.
the class QueueScreen method populateDecks.
public void populateDecks() {
game.getCurrentProfile().getDecks().clear();
game.getCurrentProfile().getDecks().addAll(SQLAPI.getSingleton().getPlayerDecks(game.getCurrentProfile().getUID()));
decks.clearChildren();
for (Deck deck : game.getCurrentProfile().getDecks()) {
DeckActor d = new DeckActor(deck, skin);
d.setColor(Color.LIGHT_GRAY);
d.addListener(new ClickListener() {
@Override
public void clicked(InputEvent event, float x, float y) {
if (selectedDeck != null) {
selectedDeck.unselect();
}
if (d.getDeck().getCardCount(-1) != 8) {
Window window = new Window("Invalid Deck", skin);
window.setSize(stage.getWidth() / 2f, stage.getHeight() / 2f);
window.setPosition(stage.getWidth() / 4f, stage.getHeight() / 4f);
Label info = new Label("This is an invalid deck and cannot be played with: Invalid amount of cards.", skin);
info.setWrap(true);
info.setAlignment(Align.center);
TextButton okay = new TextButton("Okay", skin);
okay.addListener(new ClickListener() {
@Override
public void clicked(InputEvent event, float x, float y) {
window.remove();
}
});
window.add(info).grow().row();
window.add(okay).growX().row();
stage.addActor(window);
} else {
selectedDeck = d;
selectedDeck.select();
}
}
});
decks.add(d).row();
}
}
use of com.janfic.games.computercombat.model.Deck in project computercombat by janfic.
the class SQLAPI method getDeck.
public Deck getDeck(int deckID, String uid) {
try {
String sql = "SELECT * FROM deck\n" + "WHERE deck.profile_id = '" + uid + "' AND deck.id = '" + deckID + "';";
Statement statement = connection.createStatement();
ResultSet set = statement.executeQuery(sql);
if (set.next() == false) {
return null;
}
Deck deck = new Deck(set.getString("deck.name"), deckID);
sql = "SELECT * FROM deck_has_card \n" + "JOIN card ON deck_has_card.card_id = card.id\n" + "JOIN ability ON card.ability_id = ability.id\n" + "JOIN join_components ON join_components.card = card.id\n" + "JOIN collection ON card.collection_id = collection.id\n" + "WHERE deck_has_card.deck_id = '" + deckID + "';";
set = statement.executeQuery(sql);
boolean areRowsLeft = set.next();
while (areRowsLeft) {
Card c = readCardFromSet(set, uid);
int amount = set.getInt("deck_has_card.amount");
deck.addCard(c, amount);
areRowsLeft = set.next();
}
return deck;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
Aggregations