Commit 69a54386 authored by fallenstardust's avatar fallenstardust

添加genesys与传统禁卡表模式切换

parent 298ec401
...@@ -632,6 +632,23 @@ public class AppsSettings { ...@@ -632,6 +632,23 @@ public class AppsSettings {
mSharedPreferences.getString(Constants.PREF_LAST_LIMIT, Constants.PREF_DEF_LAST_LIMIT) : limitName; mSharedPreferences.getString(Constants.PREF_LAST_LIMIT, Constants.PREF_DEF_LAST_LIMIT) : limitName;
} }
public void setLastGenesysLimit(String limitName) {
App.get().saveSetting("lastGenesysLimit", limitName);
mSharedPreferences.putString(Constants.PREF_LAST_GENESYS_LIMIT, limitName);
}
public String getLastGenesysLimit() {
String limitName = App.get().getSetting("lastGenesysLimit");
return limitName == null || TextUtils.isEmpty(limitName) ?
mSharedPreferences.getString(Constants.PREF_LAST_GENESYS_LIMIT, Constants.PREF_DEF_LAST_GENESYS_LIMIT) : limitName;
}
public void setGenesysMode(int value) {
App.get().saveIntSetting("lastGenesysMode", value);
mSharedPreferences.putInt(Constants.PREF_LAST_GENESYS_MODE, value);
}
public int getGenesysMode () {
return mSharedPreferences.getInt(Constants.PREF_LAST_GENESYS_MODE, Constants.PREF_DEF_LAST_GENESYS_MODE);
}
/** /**
* 获得(最后)上次打开的卡组的绝对路径 * 获得(最后)上次打开的卡组的绝对路径
......
...@@ -9,7 +9,11 @@ public interface Constants { ...@@ -9,7 +9,11 @@ public interface Constants {
boolean DEBUG = BuildConfig.DEBUG; boolean DEBUG = BuildConfig.DEBUG;
String PREF_START = "game_pref_"; String PREF_START = "game_pref_";
String PREF_LAST_LIMIT = "pref_last_limit"; String PREF_LAST_LIMIT = "pref_last_limit";
String PREF_LAST_GENESYS_MODE = "pref_last_genesys_mode";
int PREF_DEF_LAST_GENESYS_MODE = 0;//0代表传统禁限模式,1代表Genesys模式
String PREF_DEF_LAST_LIMIT = ""; String PREF_DEF_LAST_LIMIT = "";
String PREF_LAST_GENESYS_LIMIT = "pref_last_genesys_limit";
String PREF_DEF_LAST_GENESYS_LIMIT = "";
String PREF_LAST_DECK_PATH = "pref_last_deck_path"; String PREF_LAST_DECK_PATH = "pref_last_deck_path";
String PREF_LAST_YDK = "pref_last_ydk"; String PREF_LAST_YDK = "pref_last_ydk";
String PREF_DEF_LAST_YDK = "new"; String PREF_DEF_LAST_YDK = "new";
......
...@@ -33,6 +33,7 @@ public class CardLoader implements ICardSearcher { ...@@ -33,6 +33,7 @@ public class CardLoader implements ICardSearcher {
private final CardManager mCardManager; private final CardManager mCardManager;
private CallBack mCallBack; private CallBack mCallBack;
private LimitList mLimitList; private LimitList mLimitList;
private LimitList mGenesys_LimitList;
private static final String TAG = CardLoader.class.getSimpleName(); private static final String TAG = CardLoader.class.getSimpleName();
private final static boolean DEBUG = false; private final static boolean DEBUG = false;
...@@ -52,14 +53,21 @@ public class CardLoader implements ICardSearcher { ...@@ -52,14 +53,21 @@ public class CardLoader implements ICardSearcher {
// 读取上次使用的LimitList,如果有非空值存在且和禁卡表列表中有相同名称对应,则使用,否则设置第一个禁卡表 // 读取上次使用的LimitList,如果有非空值存在且和禁卡表列表中有相同名称对应,则使用,否则设置第一个禁卡表
mLimitList = mLimitManager.getLastLimit() != null ? mLimitManager.getLastLimit() : mLimitManager.getTopLimit(); mLimitList = mLimitManager.getLastLimit() != null ? mLimitManager.getLastLimit() : mLimitManager.getTopLimit();
mGenesys_LimitList = mLimitManager.getLastGenesysLimit() != null ? mLimitManager.getLastGenesysLimit() : mLimitManager.getGenesysTopLimit();
} }
@Override @Override
public void setLimitList(LimitList limitList) { public void setLimitList(LimitList limitList) {
if (limitList != null) {
if(limitList.getCreditLimits() != null) {
mGenesys_LimitList = limitList;
AppsSettings.get().setLastGenesysLimit(limitList.getName());
} else {
mLimitList = limitList; mLimitList = limitList;
if (limitList != null)
AppsSettings.get().setLastLimit(limitList.getName()); AppsSettings.get().setLastLimit(limitList.getName());
} }
}
}
/** /**
* @param ids * @param ids
...@@ -98,12 +106,23 @@ public class CardLoader implements ICardSearcher { ...@@ -98,12 +106,23 @@ public class CardLoader implements ICardSearcher {
loadData(null, null); loadData(null, null);
} }
/**
* 获取限制列表
* 这即是ICardSearcher的getLimitList()映射的方法
* @return 返回当前对象的限制列表,非空
*/
@Override @Override
public @NonNull public @NonNull
LimitList getLimitList() { LimitList getLimitList() {
return mLimitList; return mLimitList;
} }
@Override
public @NonNull
LimitList getGenesysLimitList() {
return mGenesys_LimitList;
}
public SparseArray<Card> readAllCardCodes() { public SparseArray<Card> readAllCardCodes() {
if (DEBUG) { if (DEBUG) {
SparseArray<Card> tmp = new SparseArray<>(); SparseArray<Card> tmp = new SparseArray<>();
......
...@@ -7,4 +7,5 @@ public interface ICardSearcher extends ICardLoader{ ...@@ -7,4 +7,5 @@ public interface ICardSearcher extends ICardLoader{
void onReset(); void onReset();
void setLimitList(LimitList limit); void setLimitList(LimitList limit);
LimitList getLimitList(); LimitList getLimitList();
LimitList getGenesysLimitList();
} }
...@@ -15,6 +15,7 @@ import android.widget.CheckBox; ...@@ -15,6 +15,7 @@ import android.widget.CheckBox;
import android.widget.CompoundButton; import android.widget.CompoundButton;
import android.widget.EditText; import android.widget.EditText;
import android.widget.Spinner; import android.widget.Spinner;
import android.widget.Switch;
import android.widget.TextView.OnEditorActionListener; import android.widget.TextView.OnEditorActionListener;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -49,9 +50,11 @@ public class CardSearcher implements View.OnClickListener { ...@@ -49,9 +50,11 @@ public class CardSearcher implements View.OnClickListener {
private final EditText keyWord; private final EditText keyWord;
private final CheckBox chk_multi_keyword; private final CheckBox chk_multi_keyword;
private final Spinner otSpinner; private final Spinner otSpinner;
private final Switch genesys_Switch;
private final Spinner limitSpinner; private final Spinner limitSpinner;
private final Spinner genesys_limitSpinner; private final Spinner genesys_limitSpinner;
private final Spinner limitListSpinner; private final Spinner limitListSpinner;
private final Spinner genesys_limitListSpinner;
private final Spinner typeSpinner; private final Spinner typeSpinner;
private final Spinner typeMonsterSpinner; private final Spinner typeMonsterSpinner;
private final Spinner typeMonsterSpinner2; private final Spinner typeMonsterSpinner2;
...@@ -90,9 +93,11 @@ public class CardSearcher implements View.OnClickListener { ...@@ -90,9 +93,11 @@ public class CardSearcher implements View.OnClickListener {
keyWord = findViewById(R.id.edt_word1); keyWord = findViewById(R.id.edt_word1);
chk_multi_keyword = findViewById(R.id.chk_multi_keyword); chk_multi_keyword = findViewById(R.id.chk_multi_keyword);
otSpinner = findViewById(R.id.sp_ot); otSpinner = findViewById(R.id.sp_ot);
genesys_Switch = findViewById(R.id.sw_genesys_mode);//genesys模式开关
limitSpinner = findViewById(R.id.sp_limit); limitSpinner = findViewById(R.id.sp_limit);
genesys_limitSpinner = findViewById(R.id.sp_genesys_limit);//初始化genesys禁限选项布局 genesys_limitSpinner = findViewById(R.id.sp_genesys_limit);//初始化genesys禁限选项布局
limitListSpinner = findViewById(R.id.sp_limit_list); limitListSpinner = findViewById(R.id.sp_limit_list);
genesys_limitListSpinner = findViewById(R.id.sp_genesys_limit_list);//初始化genesys禁卡表布局
typeSpinner = findViewById(R.id.sp_type_card); typeSpinner = findViewById(R.id.sp_type_card);
typeMonsterSpinner = findViewById(R.id.sp_type_monster); typeMonsterSpinner = findViewById(R.id.sp_type_monster);
typeMonsterSpinner2 = findViewById(R.id.sp_type_monster2); typeMonsterSpinner2 = findViewById(R.id.sp_type_monster2);
...@@ -206,23 +211,30 @@ public class CardSearcher implements View.OnClickListener { ...@@ -206,23 +211,30 @@ public class CardSearcher implements View.OnClickListener {
} }
}); });
genesys_Switch.setOnCheckedChangeListener((buttonView, isChecked) -> {
if (isChecked) {
genesys_limitListSpinner.setVisibility(View.VISIBLE);
genesys_limitSpinner.setVisibility(View.VISIBLE);
limitListSpinner.setVisibility(View.GONE);
limitSpinner.setVisibility(View.GONE);
} else {
genesys_limitListSpinner.setVisibility(View.GONE);
genesys_limitSpinner.setVisibility(View.GONE);
limitListSpinner.setVisibility(View.VISIBLE);
limitSpinner.setVisibility(View.VISIBLE);
}
genesys_Switch.setText(isChecked ? "起源赛制模式" : "传统禁限模式");
mSettings.setGenesysMode(isChecked ? 1 : 0);
});
limitListSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { limitListSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override @Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
long value = getSelect(limitListSpinner); long value = getSelect(limitListSpinner);
if (value <= 0) { if (value <= 0) {
reset(limitSpinner); reset(limitSpinner);
reset(genesys_limitSpinner);
} }
LimitList limit = mLimitManager.getLimit(getSelectText(limitListSpinner)); LimitList limit = mLimitManager.getLimit(getSelectText(limitListSpinner));
if (limit.getName().toLowerCase().contains("genesys")) {
genesys_limitSpinner.setVisibility(View.VISIBLE);
limitSpinner.setVisibility(View.GONE);
} else {
genesys_limitSpinner.setVisibility(View.GONE);
limitSpinner.setVisibility(View.VISIBLE);
}
mICardSearcher.setLimitList(limit); mICardSearcher.setLimitList(limit);
//同时通知整个界面都显示该禁卡表的禁限情况 //同时通知整个界面都显示该禁卡表的禁限情况
mCallBack.setLimit(limit); mCallBack.setLimit(limit);
...@@ -240,6 +252,31 @@ public class CardSearcher implements View.OnClickListener { ...@@ -240,6 +252,31 @@ public class CardSearcher implements View.OnClickListener {
} }
return false; // 返回false以允许正常的spinner行为继续 return false; // 返回false以允许正常的spinner行为继续
}); });
genesys_limitListSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
long value = getSelect(genesys_limitListSpinner);
if (value <= 0) {
reset(genesys_limitSpinner);
}
LimitList genesyslimit = mLimitManager.getLimit(getSelectText(genesys_limitListSpinner));
mICardSearcher.setLimitList(genesyslimit);
//同时通知整个界面都显示该禁卡表的禁限情况
mCallBack.setLimit(genesyslimit);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
genesys_limitListSpinner.setOnTouchListener((v, event) -> {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
refreshGenesysLimitListSpinnerItems(genesys_limitListSpinner);
}
return false; // 返回false以允许正常的spinner行为继续
});
typeSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { typeSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override @Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
...@@ -331,6 +368,7 @@ public class CardSearcher implements View.OnClickListener { ...@@ -331,6 +368,7 @@ public class CardSearcher implements View.OnClickListener {
initLimitSpinners(limitSpinner);//初始化常规禁限选项:禁止、限制、准限制 initLimitSpinners(limitSpinner);//初始化常规禁限选项:禁止、限制、准限制
initLimitGenesysSpinners(genesys_limitSpinner);//初始化Genesys禁限选项:Genesys、禁止 initLimitGenesysSpinners(genesys_limitSpinner);//初始化Genesys禁限选项:Genesys、禁止
initLimitListSpinners(limitListSpinner); initLimitListSpinners(limitListSpinner);
initGenesysLimitListSpinners(genesys_limitSpinner);
initTypeSpinners(typeSpinner, new CardType[]{CardType.None, CardType.Monster, CardType.Spell, CardType.Trap}); initTypeSpinners(typeSpinner, new CardType[]{CardType.None, CardType.Monster, CardType.Spell, CardType.Trap});
initTypeSpinners(typeMonsterSpinner, new CardType[]{CardType.None, CardType.Normal, CardType.Effect, CardType.Fusion, CardType.Ritual, initTypeSpinners(typeMonsterSpinner, new CardType[]{CardType.None, CardType.Normal, CardType.Effect, CardType.Fusion, CardType.Ritual,
CardType.Synchro, CardType.Pendulum, CardType.Xyz, CardType.Link, CardType.Spirit, CardType.Union, CardType.Synchro, CardType.Pendulum, CardType.Xyz, CardType.Link, CardType.Spirit, CardType.Union,
...@@ -460,7 +498,50 @@ public class CardSearcher implements View.OnClickListener { ...@@ -460,7 +498,50 @@ public class CardSearcher implements View.OnClickListener {
} }
} }
private void initGenesysLimitListSpinners(Spinner spinner) {
// 创建一个列表用于存储下拉选项
List<SimpleSpinnerItem> items = new ArrayList<>();
// 获取所有禁卡表名称列表
List<String> genesys_limit_names = mLimitManager.getGenesysLimitNames();
// 初始化选中项索引为-1(表示未选中)
int index = -1;
// 获取禁卡表总数
int genesys_count = mLimitManager.getGenesysCount();
// 当前选中的禁卡表,初始化为null
LimitList cur = null;
// 如果卡片搜索器不为null,则获取当前使用的禁卡表
if (mICardSearcher != null) {
cur = mICardSearcher.getGenesysLimitList();
}
// 添加默认选项"禁卡表"
items.add(new SimpleSpinnerItem(0, getString(R.string.label_limitlist)));
// 遍历所有禁卡表
for (int i = 0; i < genesys_count; i++) {
// 计算选项索引(从1开始)
int j = i + 1;
// 获取禁卡表名称
String name = genesys_limit_names.get(i);
// 创建并添加禁卡表选项到列表
items.add(new SimpleSpinnerItem(j, name));
// 如果当前禁卡表不为null且名称匹配,则记录选中索引
if (cur != null && TextUtils.equals(cur.getName(), name)) {
index = j;
}
}
// 创建适配器用于绑定数据到Spinner
SimpleSpinnerAdapter adapter = new SimpleSpinnerAdapter(mContext);
// 设置文字颜色为白色
adapter.setColor(Color.WHITE);
// 设置适配器的数据源
adapter.set(items);
// 将适配器设置给Spinner
spinner.setAdapter(adapter);
// 如果找到了匹配的禁卡表,则设置Spinner的选中项
Log.w(TAG, "index:" + index);
if (index >= 0) {
spinner.setSelection(index);
}
}
private void refreshLimitListSpinnerItems(Spinner spinner) { private void refreshLimitListSpinnerItems(Spinner spinner) {
// 首先清除所有现有的item // 首先清除所有现有的item
if (spinner.getAdapter() != null && spinner.getAdapter() instanceof SimpleSpinnerAdapter) { if (spinner.getAdapter() != null && spinner.getAdapter() instanceof SimpleSpinnerAdapter) {
...@@ -472,6 +553,17 @@ public class CardSearcher implements View.OnClickListener { ...@@ -472,6 +553,17 @@ public class CardSearcher implements View.OnClickListener {
initLimitListSpinners(spinner); initLimitListSpinners(spinner);
} }
private void refreshGenesysLimitListSpinnerItems(Spinner spinner) {
// 首先清除所有现有的item
if (spinner.getAdapter() != null && spinner.getAdapter() instanceof SimpleSpinnerAdapter) {
//清空选项
((SimpleSpinnerAdapter) spinner.getAdapter()).clear();
//重新加载禁卡表,获取可能存在的变动后情况
mLimitManager.load();
}
initGenesysLimitListSpinners(spinner);
}
private void initPscaleSpinners(Spinner spinner) { private void initPscaleSpinners(Spinner spinner) {
List<SimpleSpinnerItem> items = new ArrayList<>(); List<SimpleSpinnerItem> items = new ArrayList<>();
...@@ -667,7 +759,7 @@ public class CardSearcher implements View.OnClickListener { ...@@ -667,7 +759,7 @@ public class CardSearcher implements View.OnClickListener {
// if (limitListSpinner.getAdapter().getCount() > 1) {//因为禁卡表选择记录已变为保存形式,所以这里不再重置为第一个禁卡表 // if (limitListSpinner.getAdapter().getCount() > 1) {//因为禁卡表选择记录已变为保存形式,所以这里不再重置为第一个禁卡表
// limitListSpinner.setSelection(1); // limitListSpinner.setSelection(1);
// } // }
reset(limitSpinner); reset(limitSpinner.getVisibility() == View.VISIBLE ? limitSpinner : genesys_limitSpinner);
reset(typeSpinner); reset(typeSpinner);
reset(typeSpellSpinner); reset(typeSpellSpinner);
reset(typeTrapSpinner); reset(typeTrapSpinner);
......
...@@ -30,9 +30,13 @@ import ocgcore.data.LimitList; ...@@ -30,9 +30,13 @@ import ocgcore.data.LimitList;
public class LimitManager implements Closeable { public class LimitManager implements Closeable {
/* key为时间,如“2023.7” ,value为禁止卡、限制卡、准限制卡的列表 */ /* key为时间,如“2023.7” ,value为禁止卡、限制卡、准限制卡的列表 */
private final Map<String, LimitList> mLimitLists = new HashMap<>(); private final Map<String, LimitList> mLimitLists = new HashMap<>();
// Genesys禁卡表单独整合为一个列表
private final Map<String, LimitList> mGenesys_LimitLists = new HashMap<>();
/* 只存储key的列表,其元素形如“2023.7” */ /* 只存储key的列表,其元素形如“2023.7” */
private final List<String> mLimitNames = new ArrayList<>(); private final List<String> mLimitNames = new ArrayList<>();
private final List<String> mGenesys_LimitNames = new ArrayList<>();
private int mCount; private int mCount;
private int mGenesys_Count;
public LimitManager() { public LimitManager() {
...@@ -41,24 +45,38 @@ public class LimitManager implements Closeable { ...@@ -41,24 +45,38 @@ public class LimitManager implements Closeable {
@Override @Override
public void close() { public void close() {
mLimitNames.clear(); mLimitNames.clear();
mGenesys_LimitNames.clear();
mLimitLists.clear(); mLimitLists.clear();
mGenesys_LimitLists.clear();
} }
public int getCount() { public int getCount() {
return mCount; return mCount;
} }
public int getGenesysCount() {
return mGenesys_Count;
}
public Map<String, LimitList> getLimitLists() { public Map<String, LimitList> getLimitLists() {
return mLimitLists; return mLimitLists;
} }
public Map<String, LimitList> getGenesys_LimitLists() {
return mGenesys_LimitLists;
}
public List<String> getLimitNames() { public List<String> getLimitNames() {
return mLimitNames; return mLimitNames;
} }
public List<String> getGenesysLimitNames() {
return mGenesys_LimitNames;
}
public LimitList getLimit(String name) { public LimitList getLimit(String name) {
return mLimitLists.get(name); return mLimitLists.get(name);
} }
public LimitList getGenesysLimit(String name) {
return mGenesys_LimitLists.get(name);
}
public LimitList getLastLimit() { public LimitList getLastLimit() {
if (mLimitNames.isEmpty()) { if (mLimitNames.isEmpty()) {
...@@ -69,6 +87,15 @@ public class LimitManager implements Closeable { ...@@ -69,6 +87,15 @@ public class LimitManager implements Closeable {
return lastLimitName == null || TextUtils.isEmpty(lastLimitName) ? getTopLimit() : getLimit(lastLimitName); return lastLimitName == null || TextUtils.isEmpty(lastLimitName) ? getTopLimit() : getLimit(lastLimitName);
} }
public LimitList getLastGenesysLimit() {
if (mGenesys_LimitNames.isEmpty()) {
return null;
}
// 读取上次使用的LimitList,如果有非空值存在且和禁卡表列表中有相同名称对应,则使用,否则设置第一个禁卡表
String lastLimitName = AppsSettings.get().getLastGenesysLimit();
return lastLimitName == null || TextUtils.isEmpty(lastLimitName) ? getGenesysTopLimit() : getGenesysLimit(lastLimitName);
}
public LimitList getTopLimit() { public LimitList getTopLimit() {
if (mLimitNames.isEmpty()) { if (mLimitNames.isEmpty()) {
return null; return null;
...@@ -76,6 +103,13 @@ public class LimitManager implements Closeable { ...@@ -76,6 +103,13 @@ public class LimitManager implements Closeable {
return mLimitLists.get(mLimitNames.get(0)); return mLimitLists.get(mLimitNames.get(0));
} }
public LimitList getGenesysTopLimit() {
if (mGenesys_LimitNames.isEmpty()) {
return null;
}
return mGenesys_LimitLists.get(mGenesys_LimitNames.get(0));
}
/** /**
* 加载禁卡表lflist.conf数据 * 加载禁卡表lflist.conf数据
* *
...@@ -85,10 +119,11 @@ public class LimitManager implements Closeable { ...@@ -85,10 +119,11 @@ public class LimitManager implements Closeable {
// 清理旧数据,不让缓存干扰读取结果 // 清理旧数据,不让缓存干扰读取结果
mLimitLists.clear(); mLimitLists.clear();
mLimitNames.clear(); mLimitNames.clear();
mGenesys_LimitLists.clear();
mGenesys_LimitNames.clear();
boolean expansion_rs2 = true; boolean expansion_rs2 = true;
boolean expansion_zip_rs1 = true; boolean expansion_zip_rs1 = true;
boolean default_res3 = true; boolean default_res3 = true;
boolean default_genesys_res4 = true;
// 如果需要读取扩展包数据,则加载扩展包中的限制文件 // 如果需要读取扩展包数据,则加载扩展包中的限制文件
if (AppsSettings.get().isReadExpansions()) { if (AppsSettings.get().isReadExpansions()) {
...@@ -116,7 +151,7 @@ public class LimitManager implements Closeable { ...@@ -116,7 +151,7 @@ public class LimitManager implements Closeable {
} }
} }
// 2.读取扩展卡文件夹中的lflist.conf文件 // 2.读取扩展卡文件夹中的lflist.conf文件
if (file.isFile() && file.getName().equals(Constants.CORE_LIMIT_PATH)) { if (file.isFile() && file.getName().contains(Constants.CORE_LIMIT_PATH)) {
expansion_rs2 = loadFile(file); expansion_rs2 = loadFile(file);
} }
} }
...@@ -125,15 +160,15 @@ public class LimitManager implements Closeable { ...@@ -125,15 +160,15 @@ public class LimitManager implements Closeable {
// 3.加载主资源路径(ygocore文件夹)下的lflist.conf文件对象,这是内置默认文件 // 3.加载主资源路径(ygocore文件夹)下的lflist.conf文件对象,这是内置默认文件
File ygocore_lflist = new File(AppsSettings.get().getResourcePath(), Constants.CORE_LIMIT_PATH); File ygocore_lflist = new File(AppsSettings.get().getResourcePath(), Constants.CORE_LIMIT_PATH);
default_res3 = loadFile(ygocore_lflist); default_res3 = loadFile(ygocore_lflist);
File genesys_lflist = new File(AppsSettings.get().getExpansionsPath(), Constants.CORE_GENESYS_LIMIT_PATH);
default_genesys_res4 = loadFile(genesys_lflist);
// 4.添加一个空卡表N/A(为了和ygopro显示一致才这么写) 无禁限 // 4.添加一个空卡表N/A(为了和ygopro显示一致才这么写) 无禁限
mLimitLists.put("N/A", new LimitList("N/A")); mLimitLists.put("N/A", new LimitList("N/A"));
mLimitNames.add("N/A"); mLimitNames.add("N/A");
mGenesys_LimitLists.put("N/A", new LimitList("N/A"));
mGenesys_LimitNames.add("N/A");
++mCount; ++mCount;
return expansion_zip_rs1 && expansion_rs2 && default_res3 && default_genesys_res4; return expansion_zip_rs1 && expansion_rs2 && default_res3;
} }
/** /**
...@@ -163,8 +198,13 @@ public class LimitManager implements Closeable { ...@@ -163,8 +198,13 @@ public class LimitManager implements Closeable {
if (line.startsWith("!")) { if (line.startsWith("!")) {
name = line.substring(1); name = line.substring(1);
tmp = new LimitList(name); tmp = new LimitList(name);
if (name.toLowerCase().contains("genesys")) {
mGenesys_LimitLists.put(name, tmp);
mGenesys_LimitNames.add(name);
} else {
mLimitLists.put(name, tmp); mLimitLists.put(name, tmp);
mLimitNames.add(name); mLimitNames.add(name);
}
} else if (line.startsWith("$")) { } else if (line.startsWith("$")) {
// 去掉$前缀并按空格分割 // 去掉$前缀并按空格分割
String[] words = line.substring(1).trim().split("[\t| ]+"); String[] words = line.substring(1).trim().split("[\t| ]+");
...@@ -180,7 +220,7 @@ public class LimitManager implements Closeable { ...@@ -180,7 +220,7 @@ public class LimitManager implements Closeable {
String[] words = line.trim().split("[\t| ]+"); String[] words = line.trim().split("[\t| ]+");
if (words.length >= 2) { if (words.length >= 2) {
if (words[1].equals("$genesys")) { if (words[1].equals("$genesys")) {
tmp.addCredits(toNumber(words[0]), toNumber(words[2]));//保存genesys行的卡牌id和信用分值 tmp.addCredits(toNumber(words[0]), toNumber(words[2]));//保存genesys行的卡牌id和点数
} else { } else {
int id = toNumber(words[0]); int id = toNumber(words[0]);
int count = toNumber(words[1]); int count = toNumber(words[1]);
...@@ -210,6 +250,7 @@ public class LimitManager implements Closeable { ...@@ -210,6 +250,7 @@ public class LimitManager implements Closeable {
// 更新限制列表计数 // 更新限制列表计数
mCount = mLimitLists.size(); mCount = mLimitLists.size();
mGenesys_Count = mGenesys_LimitLists.size();
Log.e("LimitManager", "限制列表数量:" + mCount); Log.e("LimitManager", "限制列表数量:" + mCount);
return true; return true;
} }
...@@ -241,8 +282,13 @@ public class LimitManager implements Closeable { ...@@ -241,8 +282,13 @@ public class LimitManager implements Closeable {
if (line.startsWith("!")) { if (line.startsWith("!")) {
name = line.substring(1); name = line.substring(1);
tmp = new LimitList(name); tmp = new LimitList(name);
if (name.toLowerCase().contains("genesys")) {
mGenesys_LimitLists.put(name, tmp);
mGenesys_LimitNames.add(name);
} else {
mLimitLists.put(name, tmp); mLimitLists.put(name, tmp);
mLimitNames.add(name); mLimitNames.add(name);
}
} else if (line.startsWith("$")) { } else if (line.startsWith("$")) {
// 去掉$前缀并按空格分割 // 去掉$前缀并按空格分割
String[] words = line.substring(1).trim().split("[\t| ]+"); String[] words = line.substring(1).trim().split("[\t| ]+");
...@@ -257,7 +303,7 @@ public class LimitManager implements Closeable { ...@@ -257,7 +303,7 @@ public class LimitManager implements Closeable {
String[] words = line.trim().split("[\t| ]+"); String[] words = line.trim().split("[\t| ]+");
if (words.length >= 2) { if (words.length >= 2) {
if (words[1].equals("$genesys")) { if (words[1].equals("$genesys")) {
tmp.addCredits(toNumber(words[0]), toNumber(words[2]));//保存genesys行的卡牌id和信用分值 tmp.addCredits(toNumber(words[0]), toNumber(words[2]));//保存genesys行的卡牌id和点数
} else { } else {
int id = toNumber(words[0]); int id = toNumber(words[0]);
int count = toNumber(words[1]); int count = toNumber(words[1]);
...@@ -285,6 +331,9 @@ public class LimitManager implements Closeable { ...@@ -285,6 +331,9 @@ public class LimitManager implements Closeable {
IOUtils.close(in); IOUtils.close(in);
} }
mCount = mLimitLists.size(); mCount = mLimitLists.size();
mGenesys_Count = mGenesys_LimitLists.size();
Log.e("LimitManager", "限制列表数量:" + mCount);
Log.e("LimitManager", "Genesys限制列表数量:" + mGenesys_Count);
return true; return true;
} }
......
...@@ -81,6 +81,14 @@ public class PackManager implements Closeable { ...@@ -81,6 +81,14 @@ public class PackManager implements Closeable {
return true; return true;
} }
/**
* 处理文件并提取其中的ID列表
* 该方法读取指定文件,解析其中的数字ID(跳过以#开头的注释行),
* 并将有效的ID添加到packList中
*
* @param file 需要处理的文件对象
* @throws IOException 文件读取过程中可能抛出的IO异常
*/
private void processFile(File file) throws IOException { private void processFile(File file) throws IOException {
List<Integer> ids = new ArrayList<>(); List<Integer> ids = new ArrayList<>();
try (FileInputStream inputStream = new FileInputStream(file); try (FileInputStream inputStream = new FileInputStream(file);
...@@ -99,6 +107,7 @@ public class PackManager implements Closeable { ...@@ -99,6 +107,7 @@ public class PackManager implements Closeable {
Log.w(TAG, "Skipping invalid line in file " + file.getName() + ": " + line); Log.w(TAG, "Skipping invalid line in file " + file.getName() + ": " + line);
} }
} }
// 将解析出的ID列表添加到packList中,如果ID列表不为空
if (!ids.isEmpty()) { if (!ids.isEmpty()) {
packList.add(new AbstractMap.SimpleEntry<>(file.getName(), ids)); packList.add(new AbstractMap.SimpleEntry<>(file.getName(), ids));
} }
......
...@@ -17,8 +17,8 @@ import ocgcore.enums.LimitType; ...@@ -17,8 +17,8 @@ import ocgcore.enums.LimitType;
*/ */
public class LimitList { public class LimitList {
private String name = "?"; private String name = "?";
private Integer credit_limits;//GeneSys模式特有的总分 private Integer credit_limits;//GeneSys模式特有的上限
private Map<Integer, Integer> credits;//GeneSys模式特有的单张卡ID和其信用分 private Map<Integer, Integer> credits;//GeneSys模式特有的单张卡ID和其点数
/** /**
* 0 * 0
*/ */
......
...@@ -49,6 +49,21 @@ ...@@ -49,6 +49,21 @@
</LinearLayout> </LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="@dimen/label_width_small"
android:orientation="horizontal">
<Switch
android:id="@+id/sw_genesys_mode"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:gravity="center"
android:text="切换为起源(GENESYS)赛制模式" />
</LinearLayout>
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="@dimen/label_width_small" android:layout_height="@dimen/label_width_small"
...@@ -62,19 +77,27 @@ ...@@ -62,19 +77,27 @@
android:layout_weight="1" /> android:layout_weight="1" />
<androidx.appcompat.widget.AppCompatSpinner <androidx.appcompat.widget.AppCompatSpinner
android:id="@+id/sp_limit" android:id="@+id/sp_genesys_limit_list"
style="@style/itemSpinnerStyle" style="@style/itemSpinnerStyle"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="1" android:layout_weight="1"
android:visibility="gone"/> android:visibility="gone" />
<androidx.appcompat.widget.AppCompatSpinner
android:id="@+id/sp_limit"
style="@style/itemSpinnerStyle"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" />
<androidx.appcompat.widget.AppCompatSpinner <androidx.appcompat.widget.AppCompatSpinner
android:id="@+id/sp_genesys_limit" android:id="@+id/sp_genesys_limit"
style="@style/itemSpinnerStyle" style="@style/itemSpinnerStyle"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="1" android:layout_weight="1"
android:visibility="gone"/> android:visibility="gone" />
</LinearLayout> </LinearLayout>
<LinearLayout <LinearLayout
...@@ -249,8 +272,8 @@ ...@@ -249,8 +272,8 @@
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginRight="10dp" android:layout_marginLeft="10dp"
android:layout_marginLeft="10dp"> android:layout_marginRight="10dp">
<androidx.appcompat.widget.AppCompatEditText <androidx.appcompat.widget.AppCompatEditText
android:id="@+id/edt_word1" android:id="@+id/edt_word1"
...@@ -269,11 +292,11 @@ ...@@ -269,11 +292,11 @@
android:id="@+id/chk_multi_keyword" android:id="@+id/chk_multi_keyword"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:layout_marginLeft="10dp" android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginBottom="30dp" android:layout_marginBottom="30dp"
android:textSize="10sp" android:text="@string/settings_key_words_split"
android:text="@string/settings_key_words_split"/> android:textSize="10sp" />
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
......
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