diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index c2b3acf..f4713f6 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -202,7 +202,7 @@ fn increase_attack_usage(index: i64) { fn search_learnset(index: i64) -> Vec { let connection = sqlite::open("./pokemon.db").unwrap(); let mut learnset: Vec = vec![]; - let move_query = "SELECT pl.id, pl.learnset_id, l.name, l.types, l.power, l.category, pl.usage FROM pokemon__learnset pl JOIN learnset l on pl.learnset_id = l.id WHERE pl.pokemon_id = ? ORDER BY usage DESC"; + let move_query = "SELECT pl.id, pl.learnset_id, l.name, l.types, l.power, l.category, l.priority, pl.usage FROM pokemon__learnset pl JOIN learnset l on pl.learnset_id = l.id WHERE pl.pokemon_id = ? ORDER BY usage DESC"; for row in connection .prepare(move_query) .unwrap() @@ -218,6 +218,7 @@ fn search_learnset(index: i64) -> Vec { types: serde_json::from_str(row.read::<&str, _>("types")).unwrap_or(vec![0]), power: row.read::("power"), category: row.read::("category"), + priority: row.read::("priority"), usage: row.read::("usage"), }; learnset.push(row_result) diff --git a/src-tauri/src/model.rs b/src-tauri/src/model.rs index 4fb634b..89e3fb8 100644 --- a/src-tauri/src/model.rs +++ b/src-tauri/src/model.rs @@ -26,6 +26,7 @@ pub struct PokemonDataLearnset { pub types: Vec, pub power: i64, pub category: i64, + pub priority: i64, pub usage: i64, } #[derive(Serialize, Deserialize, Debug, Clone)] diff --git a/src/lib/DisplayData.svelte b/src/lib/DisplayData.svelte index 030a2f4..82b8972 100644 --- a/src/lib/DisplayData.svelte +++ b/src/lib/DisplayData.svelte @@ -54,21 +54,26 @@ { id: 17 }, { id: 18 }, ]; - function d_validator(d) { + function d_validator(d, prev) { if (typeof d !== "number") { return null; } - if (d > 252) { - return 252; + let result = 0; + if (d > prev) { + result = Math.ceil(d / 4) * 4; + } else { + result = Math.floor(d / 4) * 4; } - if (d < 0) { - return 0; - } - return d; + return Math.min(Math.max(result, 0), 252); } + let hp_d_prev = 0; + let attack_d_prev = 0; + let defense_d_prev = 0; + let special_attack_d_prev = 0; + let special_defense_d_prev = 0; + let speed_d_prev = 0; $: { if (pokemonData) { - console.log(pokemonData) if (init_flag) { selected_terastype = pokemonData.terastype[0]; init_flag = false; @@ -76,7 +81,9 @@ if (pokemonData.item !== selected_item) { selected_item = pokemonData.item; } - total_move_usage = pokemonData.learnset.map((v) => v.usage).reduce((partialSum, a) => partialSum + a, 0); + total_move_usage = pokemonData.learnset + .map((v) => v.usage) + .reduce((partialSum, a) => partialSum + a, 0); // validator level = level_validator(level); pokemonData.hp_v = v_validator(pokemonData.hp_v); @@ -87,14 +94,29 @@ pokemonData.special_defense_v ); pokemonData.speed_v = v_validator(pokemonData.speed_v); - pokemonData.hp_d = d_validator(pokemonData.hp_d); - pokemonData.attack_d = d_validator(pokemonData.attack_d); - pokemonData.defense_d = d_validator(pokemonData.defense_d); - pokemonData.special_attack_d = d_validator(pokemonData.special_attack_d); - pokemonData.special_defense_d = d_validator( - pokemonData.special_defense_d + + hp_d_prev = pokemonData.hp_d = d_validator(pokemonData.hp_d, hp_d_prev); + + attack_d_prev = pokemonData.attack_d = d_validator( + pokemonData.attack_d, + attack_d_prev + ); + defense_d_prev = pokemonData.defense_d = d_validator( + pokemonData.defense_d, + defense_d_prev + ); + special_attack_d_prev = pokemonData.special_attack_d = d_validator( + pokemonData.special_attack_d, + special_attack_d_prev + ); + special_defense_d_prev = pokemonData.special_defense_d = d_validator( + pokemonData.special_defense_d, + special_defense_d_prev + ); + speed_d_prev = pokemonData.speed_d = d_validator( + pokemonData.speed_d, + speed_d_prev ); - pokemonData.speed_d = d_validator(pokemonData.speed_d); // 性格補正 0.9/1/1.1 let atk_p = 1; let def_p = 1; @@ -320,14 +342,14 @@ let selected_terastype = 0; let selected_item = 0; let init_flag = true; - let filter_move = ''; + let filter_move = ""; function calculate_hp(stat, v, d) { // floor({(種族値+個体値)×2+min(63,floor(floor(1+√努力値)÷4))}×レベル÷100)+レベル+10 return Math.floor((stat * 2 + v + d / 4) * (level / 100) + level + 10); } function other_stats(stat, v, d, p) { // floor({(種族値+個体値)×2+min(63,floor(floor(1+√努力値)÷4))}×レベル÷100)+5 - return Math.floor(((stat * 2 + v + d / 4) * (level / 100) + 5) * p); + return Math.floor(((stat * 2 + v + d / 4 - 1) * (level / 100) + 5) * p); } let abilities = []; let abilities_description = []; @@ -931,35 +953,44 @@ - + {#each pokemonData.learnset as learnset} - {#if filter_move === '' || learnset.name.includes(filter_move)} - { - console.log("passing" + learnset.name); - attackId = learnset.learnset_id; - await invoke("increase_attack_usage", { index: learnset.id }); - pokemonData.learnset = await invoke("search_learnset", { - index: pokemonData.id, - }); - }} - > - - - - - - + {#if filter_move === "" || learnset.name.includes(filter_move)} + { + console.log("passing" + learnset.name); + attackId = learnset.learnset_id; + await invoke("increase_attack_usage", { + index: learnset.id, + }); + pokemonData.learnset = await invoke("search_learnset", { + index: pokemonData.id, + }); + }} + > + + + + + + + {/if} {/each}
- a - {@html generate_type(learnset.types)}{learnset.name}{learnset.power}{total_move_usage === 0 ? 0 : Math.round(learnset.usage/total_move_usage*10000)/100}%
+ a + {@html generate_type(learnset.types)}{learnset.name}{learnset.power}{learnset.priority}{total_move_usage === 0 + ? 0 + : Math.round( + (learnset.usage / total_move_usage) * 10000 + ) / 100}%
diff --git a/src/model/PokemonData.ts b/src/model/PokemonData.ts index dd4b2c1..bd36125 100644 --- a/src/model/PokemonData.ts +++ b/src/model/PokemonData.ts @@ -62,5 +62,6 @@ export interface PokemonLearnsetDBData { types: number[]; power: number; category: number; + priority: number; usage: number; }