Continued work on deck builder.

This commit is contained in:
marcins78@gmail.com
2011-09-04 17:51:59 +00:00
parent cde5ac4b11
commit e7b71b2249
2 changed files with 162 additions and 7 deletions

View File

@@ -22,6 +22,7 @@ public class DefaultCardCollection implements CardCollection {
List<CardType> cardTypes = getEnumFilter(CardType.values(), CardType.class, "cardType", Arrays.asList(CardType.values()), filterParams);
List<Keyword> keywords = getEnumFilter(Keyword.values(), Keyword.class, "keyword", Collections.<Keyword>emptyList(), filterParams);
Integer siteNumber = getSiteNumber(filterParams);
Map<String, Integer> result = new LinkedHashMap<String, Integer>();
for (Map.Entry<String, LotroCardBlueprint> stringLotroCardBlueprintEntry : _cards.entrySet()) {
@@ -29,11 +30,20 @@ public class DefaultCardCollection implements CardCollection {
LotroCardBlueprint blueprint = stringLotroCardBlueprintEntry.getValue();
if (cardTypes.contains(blueprint.getCardType()))
if (containsAllKeywords(blueprint, keywords))
if (siteNumber == null || blueprint.getSiteNumber() == siteNumber.intValue())
result.put(blueprintId, _cardsCount.get(blueprintId));
}
return result;
}
private Integer getSiteNumber(String[] filterParams) {
for (String filterParam : filterParams) {
if (filterParam.startsWith("siteNumber:"))
return Integer.parseInt(filterParam.substring("siteNumber:".length()));
}
return null;
}
private boolean containsAllKeywords(LotroCardBlueprint blueprint, List<Keyword> keywords) {
for (Keyword keyword : keywords) {
if (!blueprint.hasKeyword(keyword))

View File

@@ -1,18 +1,131 @@
var GempLotrDeckBuildingUI = Class.extend({
deckDiv: null,
ringBearerDiv: null,
ringBearerGroup: null,
ringDiv: null,
ringGroup: null,
siteDivs: null,
siteGroups: null,
collectionDiv: null,
collectionGroup: null,
normalCollectionDiv: null,
normalCollectionGroup: null,
specialCollectionDiv: null,
specialCollectionGroup: null,
loadCollectionFunc: null,
selectionFunc: null,
init: function() {
var that = this;
this.deckDiv = $("#deckDiv");
this.collectionDiv = $("#collectionDiv");
this.collectionGroup = new NormalCardGroup(null, function(card) {
return (card.zone == "collection");
this.normalCollectionDiv = $("<div></div>");
this.normalCollectionDiv.css
this.normalCollectionGroup = new NormalCardGroup(null, this.normalCollectionDiv, function(card) {
return true;
});
this.collectionDiv.append(this.normalCollectionDiv);
this.specialCollectionDiv = $("<div></div>");
this.specialCollectionDiv.hide();
this.specialCollectionGroup = new NormalCardGroup(null, this.specialCollectionDiv, function(card) {
return true;
});
this.collectionDiv.append(this.specialCollectionDiv);
this.ringBearerDiv = $("<div>Ring Bearer</div>");
this.ringBearerDiv.click(
function() {
$(".card", that.ringBearerDiv).remove();
that.showPredefinedFilter("keyword:RING_BEARER", that.ringBearerDiv);
});
this.ringBearerGroup = new NormalCardGroup(null, this.ringBearerDiv, function(card) {
return true;
});
this.deckDiv.append(this.ringBearerDiv);
this.ringDiv = $("<div>Ring</div>");
this.ringDiv.click(
function() {
$(".card", that.ringDiv).remove();
that.showPredefinedFilter("cardType:THE_ONE_RING", that.ringDiv);
});
this.ringGroup = new NormalCardGroup(null, this.ringDiv, function(card) {
return true;
});
this.deckDiv.append(this.ringDiv);
this.siteDivs = new Array();
this.siteGroups = new Array();
for (var i = 1; i <= 9; i++) {
var siteDiv = $("<div>Site " + i + "</div>");
siteDiv.click(
(function (siteNumber, container) {
return function() {
$(".card", container).remove();
that.showPredefinedFilter("cardType:SITE siteNumber:" + siteNumber, container);
};
})(i, siteDiv));
this.deckDiv.append(siteDiv);
this.siteGroups.push(new NormalCardGroup(null, siteDiv, function(card) {
return true;
}));
this.siteDivs.push(siteDiv);
}
this.drawDeckDiv = $("<div></div>");
this.drawDeckGroup = new NormalCardGroup(null, this.drawDeckDiv, function(card) {
return true;
});
this.deckDiv.append(this.drawDeckDiv);
this.selectionFunc = this.addCardToDeck;
$("body").click(function (event) {
var tar = $(event.target);
if (tar.hasClass("borderOverlay")) {
var selectedCardElem = tar.parent();
if (event.which == 1) {
if (event.shiftKey) {
// that.displayCardInfo(selectedCardElem.data("card"));
} else if (selectedCardElem.hasClass("addableCard")) {
that.selectionFunc(selectedCardElem.data("card").blueprintId);
} else if (selectedCardElem.hasClass("removableCard")) {
selectedCardElem.remove();
that.layoutUI();
}
}
}
return false;
});
},
addCardToContainer: function(blueprintId, container) {
var card = new Card(blueprintId, "deck", "deckCardId", "player");
var cardDiv = createCardDiv(card.imageUrl, null);
cardDiv.data("card", card);
container.append(cardDiv);
this.layoutUI();
return cardDiv;
},
showPredefinedFilter: function(filter, container) {
this.normalCollectionDiv.hide();
this.specialCollectionDiv.show();
this.loadCollectionFunc("default", filter, 0, 18);
this.selectionFunc = function(blueprintId) {
this.addCardToContainer(blueprintId, container);
this.specialCollectionDiv.hide();
this.normalCollectionDiv.show();
this.selectionFunc = this.addCardToDeck;
};
},
addCardToDeck: function(blueprintId) {
var div = this.addCardToContainer(blueprintId, this.drawDeckDiv)
div.addClass("removableCard");
},
setLoadCollectionFunc: function(func) {
@@ -26,6 +139,11 @@ var GempLotrDeckBuildingUI = Class.extend({
displayCollection: function(xml) {
var root = xml.documentElement;
if (root.tagName == "collection") {
if (this.normalCollectionDiv.is(":visible"))
this.normalCollectionDiv.html("");
else
this.specialCollectionDiv.html("");
var cards = root.getElementsByTagName("card");
for (var i = 0; i < cards.length; i++) {
var cardElem = cards[i];
@@ -34,16 +152,43 @@ var GempLotrDeckBuildingUI = Class.extend({
var card = new Card(blueprintId, "collection", "collection" + i, "player");
var cardDiv = createCardDiv(card.imageUrl, null);
cardDiv.data("card", card);
this.collectionDiv.append(cardDiv);
cardDiv.addClass("addableCard");
if (this.normalCollectionDiv.is(":visible"))
this.normalCollectionDiv.append(cardDiv);
else
this.specialCollectionDiv.append(cardDiv);
}
this.collectionGroup.layoutCards();
this.normalCollectionGroup.layoutCards();
this.specialCollectionGroup.layoutCards();
}
},
layoutUI: function() {
var deckHeight = this.deckDiv.height();
var rowHeight = Math.floor(deckHeight / 5);
var sitesWidth = Math.floor(1.5 * deckHeight / 5);
this.collectionGroup.setBounds(0, 0, this.collectionDiv.width(), this.collectionDiv.height());
this.ringBearerDiv.css({ position: "absolute", left: 0, top: 0, width: Math.floor(sitesWidth / 2), height: rowHeight });
this.ringBearerGroup.setBounds(0, 0, Math.floor(sitesWidth / 2), rowHeight);
this.ringDiv.css({ position: "absolute", left: Math.floor(sitesWidth / 2), top: 0, width: Math.floor(sitesWidth / 2), height: rowHeight });
this.ringGroup.setBounds(0, 0, Math.floor(sitesWidth / 2), rowHeight);
for (var i = 0; i < 4; i++) {
this.siteDivs[i].css({ position: "absolute", left: 0, top: rowHeight * (i + 1), width: sitesWidth, height: rowHeight });
this.siteGroups[i].setBounds(0, 0, sitesWidth, rowHeight);
}
for (var i = 4; i < 9; i++) {
this.siteDivs[i].css({ position: "absolute", left: sitesWidth, top: rowHeight * (i - 4), width: sitesWidth, height: rowHeight });
this.siteGroups[i].setBounds(0, 0, sitesWidth, rowHeight);
}
this.drawDeckDiv.css({ position: "absolute", left: sitesWidth * 2, top: 0, width: this.deckDiv.width() - sitesWidth * 2, height: deckHeight });
this.drawDeckGroup.setBounds(0, 0, this.deckDiv.width() - sitesWidth * 2, deckHeight);
this.normalCollectionDiv.css({ position: "absolute", left: 0, top: 0, width: this.collectionDiv.width(), height: this.collectionDiv.height() })
this.specialCollectionDiv.css({ position: "absolute", left: 0, top: 0, width: this.collectionDiv.width(), height: this.collectionDiv.height() })
this.normalCollectionGroup.setBounds(0, 0, this.collectionDiv.width(), this.collectionDiv.height());
this.specialCollectionGroup.setBounds(0, 0, this.collectionDiv.width(), this.collectionDiv.height());
},
processError: function (xhr, ajaxOptions, thrownError) {