package com.kolakcc.loljclient.model; import java.awt.image.BufferedImage; import java.io.BufferedInputStream; import java.util.LinkedList; import javax.imageio.ImageIO; import com.almworks.sqlite4java.SQLiteConnection; import com.almworks.sqlite4java.SQLiteJob; import com.almworks.sqlite4java.SQLiteQueue; import com.almworks.sqlite4java.SQLiteStatement; import com.kolakcc.loljclient.util.FileSystem; public class Champion { int ID; String name; String displayName; String title; String iconPath; String portraitPath; String splashPath; String danceVideoPath; // o_o LinkedList<String> tags; String description; String quote; String quoteAuthor; int range; int movementSpeed; double armorBase; double armorLevel; int manaBase; int manaLevel; int criticalChanceBase; int criticalChanceLevel; double manaRegenBase; double manaRegenLevel; double healthRegenBase; double healthRegenLevel; int magicResistBase; double magicResistLevel; int healthBase; double healthLevel; double attackBase; double attackLevel; int ratingDefense; int ratingMagic; int ratingDifficulty; int ratingAttack; String tips; String opponentTips; String selectSoundPath; LinkedList<ChampionSkin> skins = new LinkedList<ChampionSkin>(); // Vector<RiotRecommendedItem> riotRecommendedItems = new // Vector<RiotRecommendedItem>(); private static LinkedList<Champion> champions; boolean rankedPlayEnabled; double purchaseDate; boolean active; boolean botEnabled; int winCountRemaining; double endDate; boolean freeToPlay; boolean freeToPlayReward; boolean owned; public static LinkedList<Champion> getChampions() { return champions; } private Champion() { } public static Champion getChampionFromID(int ID) { for (Champion c : champions) { if (c.ID == ID) { return c; } } new Exception("Champion #" + ID + " not found.").printStackTrace(); return null; } public static void initializeChampions() { if (champions == null) { SQLiteQueue queue = GameStatsDBWrapper.getQueue(); champions = new LinkedList<Champion>(); queue.execute(new SQLiteJob<Object>() { protected Object job(SQLiteConnection connection) throws Throwable { SQLiteStatement st = connection .prepare("SELECT * FROM champions"); while (st.step()) { Champion newChamp = new Champion(); int i = 0; // first column is id newChamp.ID = st.columnInt(i); i++; newChamp.name = st.columnString(i); i++; newChamp.displayName = st.columnString(i); i++; newChamp.title = st.columnString(i); i++; newChamp.iconPath = st.columnString(i); i++; newChamp.portraitPath = st.columnString(i); i++; newChamp.splashPath = st.columnString(i); i++; newChamp.danceVideoPath = st.columnString(i); i++; i++; // TODO: tags newChamp.description = st.columnString(i); i++; newChamp.quote = st.columnString(i); i++; newChamp.quoteAuthor = st.columnString(i); i++; newChamp.range = st.columnInt(i); i++; newChamp.movementSpeed = st.columnInt(i); i++; newChamp.armorBase = st.columnDouble(i); i++; newChamp.armorLevel = st.columnDouble(i); i++; newChamp.manaBase = st.columnInt(i); i++; newChamp.manaLevel = st.columnInt(i); i++; newChamp.criticalChanceBase = st.columnInt(i); i++; newChamp.criticalChanceLevel = st.columnInt(i); i++; newChamp.manaRegenBase = st.columnDouble(i); i++; newChamp.manaRegenLevel = st.columnDouble(i); i++; newChamp.healthRegenBase = st.columnDouble(i); i++; newChamp.healthRegenLevel = st.columnDouble(i); i++; newChamp.magicResistBase = st.columnInt(i); i++; newChamp.magicResistLevel = st.columnDouble(i); i++; newChamp.healthBase = st.columnInt(i); i++; newChamp.healthLevel = st.columnDouble(i); i++; newChamp.attackBase = st.columnDouble(i); i++; newChamp.attackLevel = st.columnDouble(i); i++; newChamp.ratingAttack = st.columnInt(i); i++; newChamp.ratingDefense = st.columnInt(i); i++; newChamp.ratingDifficulty = st.columnInt(i); i++; newChamp.ratingMagic = st.columnInt(i); i++; newChamp.tips = st.columnString(i); i++; newChamp.opponentTips = st.columnString(i); i++; newChamp.selectSoundPath = st.columnString(i); i++; SQLiteStatement skinsDB = connection .prepare("SELECT * FROM championskins WHERE championId = ?"); skinsDB.bind(1, newChamp.ID); while (skinsDB.step()) { ChampionSkin theSkin = new ChampionSkin(); i = 0; theSkin.ID = skinsDB.columnInt(i); i++; theSkin.isDefault = skinsDB.columnInt(i) == 1; i++; theSkin.order = skinsDB.columnInt(i); i++; theSkin.championID = skinsDB.columnInt(i); i++; theSkin.name = skinsDB.columnString(i); i++; theSkin.displayName = skinsDB.columnString(i); i++; theSkin.portraitPath = skinsDB.columnString(i); i++; theSkin.splashPath = skinsDB.columnString(i); i++; newChamp.skins.add(theSkin); } skinsDB.dispose(); /* * SQLiteStatement itemsDB = connection.prepare( * "SELECT * FROM championitems WHERE championId = ?"); * itemsDB.bind(1, newChamp.ID); while (itemsDB.step()) { * RiotRecommendedItem recItem = new RiotRecommendedItem(); * recItem.ID = itemsDB.columnInt(0); recItem.championID = * newChamp.ID; recItem.itemID = itemsDB.columnInt(2); * recItem.gameMode = itemsDB.columnString(3); * newChamp.riotRecommendedItems.add(recItem); } * itemsDB.dispose(); */ champions.add(newChamp); } st.dispose(); return null; } }).complete(); } } public double getArmorBase() { return this.armorBase; } public double getArmorLevel() { return this.armorLevel; } public double getAttackBase() { return this.attackBase; } public double getAttackLevel() { return this.attackLevel; } public int getCriticalChanceBase() { return this.criticalChanceBase; } public int getCriticalChanceLevel() { return this.criticalChanceLevel; } public String getDanceVideoPath() { return this.danceVideoPath; } public String getDescription() { return this.description; } public String getDisplayName() { return this.displayName; } public double getEndDate() { return this.endDate; } public int getHealthBase() { return this.healthBase; } public double getHealthLevel() { return this.healthLevel; } public double getHealthRegenBase() { return this.healthRegenBase; } public double getHealthRegenLevel() { return this.healthRegenLevel; } public BufferedImage getIcon() throws Exception { return ImageIO.read(FileSystem.getRADSFile("assets/images/champions/"+this.iconPath)); } public String getIconPath() { return this.iconPath; } public int getID() { return this.ID; } public int getMagicResistBase() { return this.magicResistBase; } public double getMagicResistLevel() { return this.magicResistLevel; } public int getManaBase() { return this.manaBase; } public int getManaLevel() { return this.manaLevel; } public double getManaRegenBase() { return this.manaRegenBase; } public double getManaRegenLevel() { return this.manaRegenLevel; } public int getMovementSpeed() { return this.movementSpeed; } public String getName() { return this.name; } public String getOpponentTips() { return this.opponentTips; } public String getPortraitPath() { return this.portraitPath; } public double getPurchaseDate() { return this.purchaseDate; } public String getQuote() { return this.quote; } public String getQuoteAuthor() { return this.quoteAuthor; } public int getRange() { return this.range; } public int getRatingAttack() { return this.ratingAttack; } public int getRatingDefense() { return this.ratingDefense; } public int getRatingDifficulty() { return this.ratingDifficulty; } public int getRatingMagic() { return this.ratingMagic; } public BufferedInputStream getSelectionAudio() throws Exception { return RADSAirClientWrapper.getBIS("/assets/sounds/en_US/champions/" + this.name + ".mp3"); } public String getSelectSoundPath() { return this.selectSoundPath; } public LinkedList<ChampionSkin> getSkins() { return this.skins; } /* * public Vector<RiotRecommendedItem> getRiotRecommendedItems() { return * riotRecommendedItems; } */ public String getSplashPath() { return this.splashPath; } public LinkedList<String> getTags() { return this.tags; } public String getTips() { return this.tips; } public String getTitle() { return this.title; } public int getWinCountRemaining() { return this.winCountRemaining; } public boolean isActive() { return this.active; } public boolean isBotEnabled() { return this.botEnabled; } public boolean isFreeToPlay() { return this.freeToPlay; } public boolean isFreeToPlayReward() { return this.freeToPlayReward; } public boolean isOwned() { return this.owned; } public boolean isRankedPlayEnabled() { return this.rankedPlayEnabled; } public void setActive(boolean active) { this.active = active; } public void setBotEnabled(boolean botEnabled) { this.botEnabled = botEnabled; } public void setEndDate(double endDate) { this.endDate = endDate; } public void setFreeToPlay(boolean freeToPlay) { this.freeToPlay = freeToPlay; } public void setFreeToPlayReward(boolean freeToPlayReward) { this.freeToPlayReward = freeToPlayReward; } public void setOwned(boolean owned) { this.owned = owned; } public void setPurchaseDate(double purchaseDate) { this.purchaseDate = purchaseDate; } public void setRankedPlayEnabled(boolean rankedPlayEnabled) { this.rankedPlayEnabled = rankedPlayEnabled; } public void setWinCountRemaining(int winCountRemaining) { this.winCountRemaining = winCountRemaining; } }