Search in sources :

Example 1 with Deck

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();
    }
}
Also used : Deck(com.janfic.games.computercombat.model.Deck) InputEvent(com.badlogic.gdx.scenes.scene2d.InputEvent) ClickListener(com.badlogic.gdx.scenes.scene2d.utils.ClickListener)

Example 2 with Deck

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;
}
Also used : Statement(java.sql.Statement) ArrayList(java.util.ArrayList) ResultSet(java.sql.ResultSet) Deck(com.janfic.games.computercombat.model.Deck) SQLIntegrityConstraintViolationException(java.sql.SQLIntegrityConstraintViolationException)

Example 3 with Deck

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();
}
Also used : Profile(com.janfic.games.computercombat.model.Profile) InputListener(com.badlogic.gdx.scenes.scene2d.InputListener) Actor(com.badlogic.gdx.scenes.scene2d.Actor) InputEvent(com.badlogic.gdx.scenes.scene2d.InputEvent) ClickListener(com.badlogic.gdx.scenes.scene2d.utils.ClickListener) OrthographicCamera(com.badlogic.gdx.graphics.OrthographicCamera) Deck(com.janfic.games.computercombat.model.Deck) Card(com.janfic.games.computercombat.model.Card) DragAndDrop(com.badlogic.gdx.scenes.scene2d.utils.DragAndDrop)

Example 4 with Deck

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();
    }
}
Also used : Window(com.badlogic.gdx.scenes.scene2d.ui.Window) TextButton(com.badlogic.gdx.scenes.scene2d.ui.TextButton) Label(com.badlogic.gdx.scenes.scene2d.ui.Label) Deck(com.janfic.games.computercombat.model.Deck) DeckActor(com.janfic.games.computercombat.actors.DeckActor) InputEvent(com.badlogic.gdx.scenes.scene2d.InputEvent) ClickListener(com.badlogic.gdx.scenes.scene2d.utils.ClickListener)

Example 5 with Deck

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;
    }
}
Also used : Statement(java.sql.Statement) ResultSet(java.sql.ResultSet) Deck(com.janfic.games.computercombat.model.Deck) SQLIntegrityConstraintViolationException(java.sql.SQLIntegrityConstraintViolationException) Card(com.janfic.games.computercombat.model.Card)

Aggregations

Deck (com.janfic.games.computercombat.model.Deck)7 Card (com.janfic.games.computercombat.model.Card)4 InputEvent (com.badlogic.gdx.scenes.scene2d.InputEvent)3 ClickListener (com.badlogic.gdx.scenes.scene2d.utils.ClickListener)3 ArrayList (java.util.ArrayList)3 Player (com.janfic.games.computercombat.model.Player)2 ResultSet (java.sql.ResultSet)2 SQLIntegrityConstraintViolationException (java.sql.SQLIntegrityConstraintViolationException)2 Statement (java.sql.Statement)2 OrthographicCamera (com.badlogic.gdx.graphics.OrthographicCamera)1 Actor (com.badlogic.gdx.scenes.scene2d.Actor)1 InputListener (com.badlogic.gdx.scenes.scene2d.InputListener)1 Label (com.badlogic.gdx.scenes.scene2d.ui.Label)1 TextButton (com.badlogic.gdx.scenes.scene2d.ui.TextButton)1 Window (com.badlogic.gdx.scenes.scene2d.ui.Window)1 DragAndDrop (com.badlogic.gdx.scenes.scene2d.utils.DragAndDrop)1 DeckActor (com.janfic.games.computercombat.actors.DeckActor)1 Component (com.janfic.games.computercombat.model.Component)1 Profile (com.janfic.games.computercombat.model.Profile)1 ConsumeProgressAnimation (com.janfic.games.computercombat.model.animations.ConsumeProgressAnimation)1