From 1feca2f3f55de48cee12dc6c75a512ef7c144311 Mon Sep 17 00:00:00 2001 From: "marcins78@gmail.com" Date: Thu, 3 Nov 2011 20:16:57 +0000 Subject: [PATCH] - Deck builder now allows to sort cards by name (default), twilight cost, strength and vitality. - "Legolas, Elven Comrade" now gives the strength penalty correctly to the minion. --- .../lotro/cards/set4/dwarven/Card4_049.java | 6 +- .../lotro/cards/set4/elven/Card4_074.java | 4 +- .../lotro/game/DefaultCardCollection.java | 129 +++++++++++++++--- .../src/main/webapp/deckBuild.html | 8 ++ .../gemp-lotr-web/src/main/webapp/game.html | 1 + .../src/main/webapp/includes/changeLog.html | 2 + .../src/main/webapp/js/deckBuildingUi.js | 14 +- 7 files changed, 142 insertions(+), 22 deletions(-) diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/dwarven/Card4_049.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/dwarven/Card4_049.java index cde31bd57..77a534a59 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/dwarven/Card4_049.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/dwarven/Card4_049.java @@ -44,11 +44,11 @@ public class Card4_049 extends AbstractCompanion { action.appendEffect( new ChooseActiveCardEffect(self, playerId, "Choose unbound companion", Filters.unboundCompanion) { @Override - protected void cardSelected(LotroGame game, PhysicalCard card) { - int bonus = (card.getBlueprint().getName().equals("Legolas")) ? 2 : 1; + protected void cardSelected(LotroGame game, PhysicalCard companion) { + int bonus = (companion.getBlueprint().getName().equals("Legolas")) ? 2 : 1; action.insertEffect( new AddUntilEndOfPhaseModifierEffect( - new StrengthModifier(self, Filters.sameCard(card), bonus), Phase.SKIRMISH)); + new StrengthModifier(self, Filters.sameCard(companion), bonus), Phase.SKIRMISH)); } }); return Collections.singletonList(action); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/elven/Card4_074.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/elven/Card4_074.java index dd5520773..07008e7bd 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/elven/Card4_074.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/elven/Card4_074.java @@ -50,10 +50,10 @@ public class Card4_074 extends AbstractCompanion { action.insertEffect( new ChooseActiveCardEffect(self, playerId, "Choose minion skirmishing companion", Filters.type(CardType.MINION), Filters.inSkirmishAgainst(Filters.sameCard(card))) { @Override - protected void cardSelected(LotroGame game, PhysicalCard card) { + protected void cardSelected(LotroGame game, PhysicalCard minion) { action.insertEffect( new AddUntilEndOfPhaseModifierEffect( - new StrengthModifier(self, Filters.sameCard(self), bonus), Phase.SKIRMISH)); + new StrengthModifier(self, Filters.sameCard(minion), bonus), Phase.SKIRMISH)); } }); } diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/DefaultCardCollection.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/DefaultCardCollection.java index 12a0235b4..de82cdc59 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/DefaultCardCollection.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/DefaultCardCollection.java @@ -10,6 +10,101 @@ public class DefaultCardCollection implements MutableCardCollection { private Map _counts = new TreeMap(new CardBlueprintIdComparator()); private Map _cards = new TreeMap(); private LotroCardBlueprintLibrary _library; + private static final Comparator NAME_COMPARATOR = new Comparator() { + @Override + public int compare(Item o1, Item o2) { + if (o1.getType() == o2.getType()) { + if (o1.getType() == Item.Type.PACK) + return o1.getBlueprintId().compareTo(o2.getBlueprintId()); + else + return o1.getCardBlueprint().getName().compareTo(o2.getCardBlueprint().getName()); + } else { + if (o1.getType() == Item.Type.PACK) + return -1; + else + return 1; + } + } + }; + + private static final Comparator TWILIGHT_COMPARATOR = new Comparator() { + @Override + public int compare(Item o1, Item o2) { + if (o1.getType() == o2.getType()) { + if (o1.getType() == Item.Type.PACK) + return o1.getBlueprintId().compareTo(o2.getBlueprintId()); + else { + int twilightResult = o1.getCardBlueprint().getTwilightCost() - o2.getCardBlueprint().getTwilightCost(); + if (twilightResult == 0) + return NAME_COMPARATOR.compare(o1, o2); + return twilightResult; + } + } else { + if (o1.getType() == Item.Type.PACK) + return -1; + else + return 1; + } + } + }; + + private static final Comparator STRENGTH_COMPARATOR = new Comparator() { + @Override + public int compare(Item o1, Item o2) { + if (o1.getType() == o2.getType()) { + if (o1.getType() == Item.Type.PACK) + return o1.getBlueprintId().compareTo(o2.getBlueprintId()); + else { + int strengthResult = getStrengthSafely(o1.getCardBlueprint()) - getStrengthSafely(o2.getCardBlueprint()); + if (strengthResult == 0) + return NAME_COMPARATOR.compare(o1, o2); + return strengthResult; + } + } else { + if (o1.getType() == Item.Type.PACK) + return -1; + else + return 1; + } + } + + private int getStrengthSafely(LotroCardBlueprint blueprint) { + try { + return blueprint.getStrength(); + } catch (UnsupportedOperationException exp) { + return Integer.MAX_VALUE; + } + } + }; + + private static final Comparator VITALITY_COMPARATOR = new Comparator() { + @Override + public int compare(Item o1, Item o2) { + if (o1.getType() == o2.getType()) { + if (o1.getType() == Item.Type.PACK) + return o1.getBlueprintId().compareTo(o2.getBlueprintId()); + else { + int strengthResult = getVitalitySafely(o1.getCardBlueprint()) - getVitalitySafely(o2.getCardBlueprint()); + if (strengthResult == 0) + return NAME_COMPARATOR.compare(o1, o2); + return strengthResult; + } + } else { + if (o1.getType() == Item.Type.PACK) + return -1; + else + return 1; + } + } + + private int getVitalitySafely(LotroCardBlueprint blueprint) { + try { + return blueprint.getVitality(); + } catch (UnsupportedOperationException exp) { + return Integer.MAX_VALUE; + } + } + }; public DefaultCardCollection(LotroCardBlueprintLibrary library) { _library = library; @@ -68,22 +163,16 @@ public class DefaultCardCollection implements MutableCardCollection { result.add(new Item(Item.Type.CARD, count, blueprintId, blueprint)); } } - Collections.sort(result, new Comparator() { - @Override - public int compare(Item o1, Item o2) { - if (o1.getType() == o2.getType()) { - if (o1.getType() == Item.Type.PACK) - return o1.getBlueprintId().compareTo(o2.getBlueprintId()); - else - return o1.getCardBlueprint().getName().compareTo(o2.getCardBlueprint().getName()); - } else { - if (o1.getType() == Item.Type.PACK) - return -1; - else - return 1; - } - } - }); + String sort = getSort(filterParams); + if (sort != null && sort.equals("twilight")) + Collections.sort(result, TWILIGHT_COMPARATOR); + else if (sort != null && sort.equals("strength")) + Collections.sort(result, STRENGTH_COMPARATOR); + else if (sort != null && sort.equals("vitality")) + Collections.sort(result, VITALITY_COMPARATOR); + else + Collections.sort(result, NAME_COMPARATOR); + return result; } @@ -120,6 +209,14 @@ public class DefaultCardCollection implements MutableCardCollection { return null; } + private String getSort(String[] filterParams) { + for (String filterParam : filterParams) { + if (filterParam.startsWith("sort:")) + return filterParam.substring("sort:".length()); + } + return null; + } + private boolean containsAllKeywords(LotroCardBlueprint blueprint, List keywords) { for (Keyword keyword : keywords) { if (blueprint == null || !blueprint.hasKeyword(keyword)) diff --git a/gemp-lotr/gemp-lotr-web/src/main/webapp/deckBuild.html b/gemp-lotr/gemp-lotr-web/src/main/webapp/deckBuild.html index 2409993ca..d72126787 100644 --- a/gemp-lotr/gemp-lotr-web/src/main/webapp/deckBuild.html +++ b/gemp-lotr/gemp-lotr-web/src/main/webapp/deckBuild.html @@ -52,6 +52,14 @@ width: 100px; } + #fullFiltering select { + font-size: 80%; + } + + #fullFiltering input { + font-size: 80%; + } + #filtering select { font-size: 80%; } diff --git a/gemp-lotr/gemp-lotr-web/src/main/webapp/game.html b/gemp-lotr/gemp-lotr-web/src/main/webapp/game.html index 22ff2b0fa..5725f5f9e 100644 --- a/gemp-lotr/gemp-lotr-web/src/main/webapp/game.html +++ b/gemp-lotr/gemp-lotr-web/src/main/webapp/game.html @@ -199,6 +199,7 @@ body { } .gameMessage { + padding-top: 2px; font-size: 80%; } diff --git a/gemp-lotr/gemp-lotr-web/src/main/webapp/includes/changeLog.html b/gemp-lotr/gemp-lotr-web/src/main/webapp/includes/changeLog.html index ba142945d..d17b45a85 100644 --- a/gemp-lotr/gemp-lotr-web/src/main/webapp/includes/changeLog.html +++ b/gemp-lotr/gemp-lotr-web/src/main/webapp/includes/changeLog.html @@ -3,6 +3,8 @@ - Deck builder now allows to filter sites, rings and ring-bearers on set/block. - Deck builder now allows to filter deck cards based on their printed keywords. - Deck builder now allows to filter by words in card name. +- Deck builder now allows to sort cards by name (default), twilight cost, strength and vitality. +- "Legolas, Elven Comrade" now gives the strength penalty correctly to the minion. 2 Nov. 2011 - "O Elbereth! Gilthoniel!" should correctly give the option to cancel a skirmish with Nazgul when used in skirmish diff --git a/gemp-lotr/gemp-lotr-web/src/main/webapp/js/deckBuildingUi.js b/gemp-lotr/gemp-lotr-web/src/main/webapp/js/deckBuildingUi.js index 2a1599960..4a4183865 100644 --- a/gemp-lotr/gemp-lotr-web/src/main/webapp/js/deckBuildingUi.js +++ b/gemp-lotr/gemp-lotr-web/src/main/webapp/js/deckBuildingUi.js @@ -146,6 +146,13 @@ var GempLotrDeckBuildingUI = Class.extend({ + "" + ""); this.fullFilterDiv.append(""); + this.fullFilterDiv.append(""); this.collectionDiv.append(this.fullFilterDiv); this.filterDiv = $("
"); @@ -224,6 +231,7 @@ var GempLotrDeckBuildingUI = Class.extend({ $("#set").change(fullFilterChanged); $("#cardName").change(fullFilterChanged); + $("#sort").change(fullFilterChanged); var filterOut = function() { that.filter = that.calculateNormalFilter(); @@ -606,6 +614,10 @@ var GempLotrDeckBuildingUI = Class.extend({ if (setNo != "") setNo = " set:" + setNo; + var sort = $("#sort option:selected").prop("value"); + if (sort != "") + sort = " sort:" + sort; + var cardName = $("#cardName").val(); if (cardName == "Card name") cardName = ""; @@ -616,7 +628,7 @@ var GempLotrDeckBuildingUI = Class.extend({ cardName += " name:" + cardNameElems[i]; } - return setNo + cardName; + return setNo + sort + cardName; }, calculateNormalFilter: function() {