/** * */ package logbook.dto; import java.util.HashMap; import java.util.Map; import javax.json.JsonArray; import javax.json.JsonObject; import logbook.constants.AppConstants; import logbook.data.Data; /** * 消費した or 増えた 資源・アイテムを表します * @author Nekopanda */ public class ResourceItemDto { /** fuel, ammo, metal, bauxite */ private final int[] baseMaterials = new int[4]; private final Map<Integer, UseItemDto> items = new HashMap<Integer, UseItemDto>(); public ResourceItemDto() { } public void loadBaseMaterialsFromString(String[] data, int offset) { for (int i = 0; i < 4; ++i) { this.baseMaterials[i] = Integer.valueOf(data[i + offset]); } } public void loadBaseMaterialsFromField(Data data) { this.baseMaterials[0] = Integer.valueOf(data.getField("api_item1")); this.baseMaterials[1] = Integer.valueOf(data.getField("api_item2")); this.baseMaterials[2] = Integer.valueOf(data.getField("api_item3")); this.baseMaterials[3] = Integer.valueOf(data.getField("api_item4")); } /** JSONの配列で表された資源を読み取る。長さ4 と 長さ8 に対応 */ public void loadMaterialFronJson(JsonArray data) { this.baseMaterials[0] = data.getInt(0); this.baseMaterials[1] = data.getInt(1); this.baseMaterials[2] = data.getInt(2); this.baseMaterials[3] = data.getInt(3); if (data.size() >= 8) { this.setBurners(data.getInt(4)); this.setBuckets(data.getInt(5)); this.setResearchMaterials(data.getInt(6)); this.setScrew(data.getInt(7)); } } /** 遠征結果の獲得資源・アイテムを読み取る */ public void loadMissionResult(JsonObject apidata) { // baseMaterialsを読み取る this.loadMaterialFronJson(apidata.getJsonArray("api_get_material")); // UseItemを読み取る JsonArray jsonUseItemFlag = apidata.getJsonArray("api_useitem_flag"); for (int i = 0; i < 2; ++i) { int useItemFlag = jsonUseItemFlag.getInt(i); if (useItemFlag > 0) { JsonObject jsonGetItem = apidata.getJsonObject("api_get_item" + (i + 1)); int itemId = jsonGetItem.getInt("api_useitem_id"); if (itemId <= 0) { itemId = useItemFlag; } int itemCount = jsonGetItem.getInt("api_useitem_count"); this.items.put(itemId, new UseItemDto(itemId, itemCount)); } } } /** クエスト結果の獲得資源・アイテムを読み取る */ public void loadQuestClear(JsonObject apidata) { // baseMaterialsを読み取る this.loadMaterialFronJson(apidata.getJsonArray("api_material")); // UseItemを読み取る JsonArray bounus = apidata.getJsonArray("api_bounus"); for (int i = 0; i < bounus.size(); ++i) { JsonObject item = bounus.getJsonObject(i); int type = item.getInt("api_type"); if (type == 1) { // 1以外は知らん int itemId = item.getJsonObject("api_item").getInt("api_id"); int itemCount = item.getInt("api_count"); switch (itemId) { case 5: this.items.put(AppConstants.USEITEM_BURNER, new UseItemDto(AppConstants.USEITEM_BURNER, itemCount)); break; case 6: this.items.put(AppConstants.USEITEM_BUCKET, new UseItemDto(AppConstants.USEITEM_BUCKET, itemCount)); break; case 7: this.items.put(AppConstants.USEITEM_RESEARCH, new UseItemDto(AppConstants.USEITEM_RESEARCH, itemCount)); break; case 8: this.items.put(AppConstants.USEITEM_SCREW, new UseItemDto(AppConstants.USEITEM_SCREW, itemCount)); break; default: // 5-8以外は知らん break; } } } } public void setBurners(int amount) { this.items.put(AppConstants.USEITEM_BURNER, new UseItemDto(AppConstants.USEITEM_BURNER, amount)); } public void setBuckets(int amount) { this.items.put(AppConstants.USEITEM_BUCKET, new UseItemDto(AppConstants.USEITEM_BUCKET, amount)); } public void setResearchMaterials(int amount) { this.items.put(AppConstants.USEITEM_RESEARCH, new UseItemDto(AppConstants.USEITEM_RESEARCH, amount)); } public void setScrew(int amount) { this.items.put(AppConstants.USEITEM_SCREW, new UseItemDto(AppConstants.USEITEM_SCREW, amount)); } public void setItem(int id, int amount) { this.items.put(id, new UseItemDto(id, amount)); } public int getFuel() { return this.baseMaterials[0]; } public void setFuel(int fuel) { this.baseMaterials[0] = fuel; } public int getAmmo() { return this.baseMaterials[1]; } public void setAmmo(int ammo) { this.baseMaterials[1] = ammo; } public int getMetal() { return this.baseMaterials[2]; } public void setMetal(int metal) { this.baseMaterials[2] = metal; } public int getBauxite() { return this.baseMaterials[3]; } public void setBauxite(int bauxite) { this.baseMaterials[3] = bauxite; } public int getBurners() { UseItemDto item = this.items.get(AppConstants.USEITEM_BURNER); if (item == null) return 0; return item.getItemCount(); } public int getBuckets() { UseItemDto item = this.items.get(AppConstants.USEITEM_BUCKET); if (item == null) return 0; return item.getItemCount(); } public int getResearch() { UseItemDto item = this.items.get(AppConstants.USEITEM_RESEARCH); if (item == null) return 0; return item.getItemCount(); } public int getScrew() { UseItemDto item = this.items.get(AppConstants.USEITEM_SCREW); if (item == null) return 0; return item.getItemCount(); } public Map<Integer, UseItemDto> getItems() { return this.items; } public MaterialDto toMaterialDto() { MaterialDto ret = new MaterialDto(); return ret.obtained(this); } }