* Improved editor search function, fixed some problems with search for split card rules.

This commit is contained in:
LevelX2 2017-07-29 11:43:05 +02:00
parent 1ddd063928
commit 18cab46b05
6 changed files with 484 additions and 202 deletions

View file

@ -27,6 +27,9 @@
*/
package mage.cards;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import mage.abilities.Abilities;
import mage.abilities.AbilitiesImpl;
import mage.abilities.Ability;
@ -36,10 +39,6 @@ import mage.constants.SpellAbilityType;
import mage.constants.Zone;
import mage.game.Game;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
/**
*
* @author LevelX2

View file

@ -30,6 +30,8 @@ package mage.cards.repository;
import com.j256.ormlite.field.DataType;
import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;
import java.util.*;
import java.util.stream.Collectors;
import mage.ObjectColor;
import mage.abilities.Ability;
import mage.abilities.SpellAbility;
@ -41,16 +43,13 @@ import mage.constants.*;
import mage.util.SubTypeList;
import org.apache.log4j.Logger;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author North
*/
@DatabaseTable(tableName = "card")
public class CardInfo {
private static final int MAX_RULE_LENGTH = 700;
private static final int MAX_RULE_LENGTH = 750;
private static final String SEPARATOR = "@@@";
@DatabaseField(indexName = "name_index")
@ -157,13 +156,30 @@ public class CardInfo {
this.setManaCosts(card.getManaCost().getSymbols());
int length = 0;
for (String rule : card.getRules()) {
length += rule.length();
List<String> rulesList = new ArrayList<>();
if (card instanceof SplitCard) {
for (String rule : ((SplitCard) card).getLeftHalfCard().getRules()) {
length += rule.length();
rulesList.add(rule);
}
for (String rule : ((SplitCard) card).getRightHalfCard().getRules()) {
length += rule.length();
rulesList.add(rule);
}
for (String rule : card.getRules()) {
length += rule.length();
rulesList.add(rule);
}
} else {
for (String rule : card.getRules()) {
length += rule.length();
rulesList.add(rule);
}
}
if (length > MAX_RULE_LENGTH) {
length = 0;
ArrayList<String> shortRules = new ArrayList<>();
for (String rule : card.getRules()) {
for (String rule : rulesList) {
if (length + rule.length() + 3 <= MAX_RULE_LENGTH) {
shortRules.add(rule);
length += rule.length() + 3;
@ -175,7 +191,7 @@ public class CardInfo {
Logger.getLogger(CardInfo.class).warn("Card rule text was cut - cardname: " + card.getName());
this.setRules(shortRules);
} else {
this.setRules(card.getRules());
this.setRules(rulesList);
}
SpellAbility spellAbility = card.getSpellAbility();
@ -306,7 +322,7 @@ public class CardInfo {
public final SubTypeList getSubTypes() {
SubTypeList sl = new SubTypeList();
if(subtypes.trim().isEmpty()){
if (subtypes.trim().isEmpty()) {
return sl;
}
for (String s : subtypes.split(SEPARATOR)) {

View file

@ -28,7 +28,9 @@
package mage.filter.predicate.other;
import mage.cards.Card;
import mage.cards.SplitCard;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.filter.predicate.Predicate;
import mage.game.Game;
@ -39,9 +41,15 @@ import mage.game.Game;
public class CardTextPredicate implements Predicate<Card> {
private final String text;
private final boolean inNames;
private final boolean inTypes;
private final boolean inRules;
public CardTextPredicate(String text) {
public CardTextPredicate(String text, boolean inNames, boolean inTypes, boolean inRules) {
this.text = text;
this.inNames = inNames;
this.inTypes = inTypes;
this.inRules = inRules;
}
@Override
@ -50,7 +58,7 @@ public class CardTextPredicate implements Predicate<Card> {
return true;
}
// first check in card name
if (input.getName().toLowerCase().contains(text.toLowerCase())) {
if (inNames && input.getName().toLowerCase().contains(text.toLowerCase())) {
return true;
}
@ -60,17 +68,40 @@ public class CardTextPredicate implements Predicate<Card> {
boolean found = false;
if (!token.isEmpty()) {
// then try to find in rules
for (String rule : input.getRules(game)) {
if (rule.toLowerCase().contains(token)) {
found = true;
break;
if (inRules) {
if (input.isSplitCard()) {
for (String rule : ((SplitCard) input).getLeftHalfCard().getRules(game)) {
if (rule.toLowerCase().contains(token)) {
found = true;
break;
}
}
for (String rule : ((SplitCard) input).getRightHalfCard().getRules(game)) {
if (rule.toLowerCase().contains(token)) {
found = true;
break;
}
}
}
for (String rule : input.getRules(game)) {
if (rule.toLowerCase().contains(token)) {
found = true;
break;
}
}
}
for (SubType subType : input.getSubtype(game)) {
if (subType.toString().equalsIgnoreCase(token)) {
found = true;
break;
if (inTypes) {
for (SubType subType : input.getSubtype(game)) {
if (subType.toString().equalsIgnoreCase(token)) {
found = true;
break;
}
}
for (SuperType superType : input.getSuperType()) {
if (superType.toString().equalsIgnoreCase(token)) {
found = true;
break;
}
}
}
}