Commit 751c6865 authored by fallenstardust's avatar fallenstardust Committed by GitHub

Merge pull request #41 from mercury233/patch-search

update search card
parents 5af2c0e7 deb9f402
......@@ -20,6 +20,7 @@ import cn.garymb.ygomobile.ui.plus.VUiKit;
import ocgcore.CardManager;
import ocgcore.DataManager;
import ocgcore.LimitManager;
import ocgcore.StringManager;
import ocgcore.data.Card;
import ocgcore.data.LimitList;
import ocgcore.enums.CardType;
......@@ -28,6 +29,7 @@ import ocgcore.enums.LimitType;
public class CardLoader implements ICardLoader {
private LimitManager mLimitManager;
private CardManager mCardManager;
private StringManager mStringManager;
private Context context;
private CallBack mCallBack;
private LimitList mLimitList;
......@@ -48,6 +50,7 @@ public class CardLoader implements ICardLoader {
this.context = context;
mLimitManager = DataManager.get().getLimitManager();
mCardManager = DataManager.get().getCardManager();
mStringManager = DataManager.get().getStringManager();
mLimitList = mLimitManager.getTopLimit();
}
......@@ -133,7 +136,7 @@ public class CardLoader implements ICardLoader {
for (int i = 0; i < count; i++) {
Card card = cards.valueAt(i);
if (searchInfo == null || searchInfo.check(card)) {
if (searchInfo != null && card.Name.equals(searchInfo.word)) {
if (searchInfo != null && card.Name.equalsIgnoreCase(searchInfo.keyWord1)) {
cards.remove(i);
tmp.add(card);
} else if (card.isType(CardType.Monster)) {
......@@ -206,13 +209,13 @@ public class CardLoader implements ICardLoader {
String atk, String def, long pscale,
long setcode, long category, long ot, int linkKey, long... types) {
CardSearchInfo searchInfo = new CardSearchInfo();
if (!TextUtils.isEmpty(prefixWord) && !TextUtils.isEmpty(suffixWord)) {
searchInfo.prefixWord = prefixWord;
searchInfo.suffixWord = suffixWord;
} else if (!TextUtils.isEmpty(prefixWord)) {
searchInfo.word = prefixWord;
} else if (!TextUtils.isEmpty(suffixWord)) {
searchInfo.word = suffixWord;
if (!TextUtils.isEmpty(prefixWord)) {
searchInfo.keyWord1 = prefixWord;
searchInfo.keyWordSetcode1 = mStringManager.getSetCode(prefixWord);
}
if (!TextUtils.isEmpty(suffixWord)) {
searchInfo.keyWord2 = suffixWord;
searchInfo.keyWordSetcode2 = mStringManager.getSetCode(suffixWord);
}
searchInfo.attribute = (int) attribute;
searchInfo.level = (int) level;
......
......@@ -9,7 +9,7 @@ import ocgcore.enums.CardType;
class CardSearchInfo {
//名字或者描述
String word, prefixWord, suffixWord;
String keyWord1, keyWord2;
int attribute;
int level, ot, pscale = -1;
long race, category;
......@@ -17,11 +17,33 @@ class CardSearchInfo {
int linkKey;
List<Integer> inCards;
long[] types;
long setcode;
long setcode, keyWordSetcode1, keyWordSetcode2;
CardSearchInfo() {
}
public static boolean containsIgnoreCase(String src, String what) {
// https://stackoverflow.com/a/25379180
final int length = what.length();
if (length == 0)
return true; // Empty string is contained
final char firstLo = Character.toLowerCase(what.charAt(0));
final char firstUp = Character.toUpperCase(what.charAt(0));
for (int i = src.length() - length; i >= 0; i--) {
// Quick check before calling the more expensive regionMatches() method:
final char ch = src.charAt(i);
if (ch != firstLo && ch != firstUp)
continue;
if (src.regionMatches(true, i, what, 0, length))
return true;
}
return false;
}
List<Integer> getInCards() {
return inCards;
}
......@@ -30,37 +52,21 @@ class CardSearchInfo {
if (inCards != null && !inCards.contains(Integer.valueOf(card.Code))) {
return false;
}
if (!TextUtils.isEmpty(word)) {
if (TextUtils.isDigitsOnly(word) && word.length() >= 5) {
if (!TextUtils.isEmpty(keyWord1)) {
if (TextUtils.isDigitsOnly(keyWord1) && keyWord1.length() >= 5) {
//code
long code = Long.parseLong(word);
long code = Long.parseLong(keyWord1);
return card.Code == code || card.Alias == code;
} else if (!((card.Name != null && card.Name.contains(word))
|| (card.Desc != null && card.Desc.contains(word)))) {
} else if (!((card.Name != null && containsIgnoreCase(card.Name, keyWord1))
|| (card.Desc != null && containsIgnoreCase(card.Desc, keyWord1))
|| (keyWordSetcode1 > 0 && card.isSetCode(keyWordSetcode1)))) {
return false;
}
} else if (!TextUtils.isEmpty(prefixWord) && !TextUtils.isEmpty(suffixWord)) {
boolean has = false;
int i1 = -1, i2 = -1, i3, i4;
if (card.Name != null) {
i1 = card.Name.indexOf(prefixWord);
i2 = card.Name.indexOf(suffixWord);
if (i1 >= 0 && i2 >= 0) {
has = true;
}
}
if (!has) {
if (card.Desc != null) {
i3 = card.Desc.indexOf(prefixWord);
i4 = card.Desc.indexOf(suffixWord);
if ((i3 >= 0 && i4 >= 0)
|| (i3 >= 0 && i2 >= 0)
|| (i1 >= 0 && i4 >= 0)) {
has = true;
}
}
}
if (!has) {
}
if (!TextUtils.isEmpty(keyWord2)) {
if (!((card.Name != null && containsIgnoreCase(card.Name, keyWord2))
|| (card.Desc != null && containsIgnoreCase(card.Desc, keyWord2))
|| (keyWordSetcode2 > 0 && card.isSetCode(keyWordSetcode2)))) {
return false;
}
}
......
......@@ -179,6 +179,17 @@ public class StringManager implements Closeable {
return String.format("0x%x", key);
}
public long getSetCode(String key) {
for (int i = 0; i < mCardSets.size(); i++) {
CardSet cardSet = mCardSets.get(i);
String[] setNames = cardSet.getName().split("\\|");
if(setNames[0].equalsIgnoreCase(key)){
return cardSet.getCode();
}
}
return 0;
}
public String getSystemString(int key) {
return mSystem.get(Integer.valueOf(key));
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment