added search for attack

This commit is contained in:
2023-01-21 19:16:57 +09:00
parent a5dfd5bf88
commit c363f88242
5 changed files with 163 additions and 58 deletions

83
package-lock.json generated
View File

@@ -12,13 +12,13 @@
"simple-svelte-autocomplete": "^2.5.1" "simple-svelte-autocomplete": "^2.5.1"
}, },
"devDependencies": { "devDependencies": {
"@sveltejs/vite-plugin-svelte": "^2.0.0", "@sveltejs/vite-plugin-svelte": "^2.0.2",
"@tauri-apps/cli": "^1.2.3", "@tauri-apps/cli": "^1.2.3",
"@tsconfig/svelte": "^3.0.0", "@tsconfig/svelte": "^3.0.0",
"@types/node": "^18.7.10", "@types/node": "^18.7.10",
"svelte": "^3.54.0", "svelte": "^3.55.1",
"svelte-check": "^3.0.0", "svelte-check": "^3.0.2",
"svelte-preprocess": "^5.0.0", "svelte-preprocess": "^5.0.1",
"tslib": "^2.4.1", "tslib": "^2.4.1",
"typescript": "^4.6.4", "typescript": "^4.6.4",
"vite": "^4.0.0" "vite": "^4.0.0"
@@ -1395,18 +1395,18 @@
"integrity": "sha512-wC0RzbmWhMMAqJ3PK+4sBSAHZl+Y/Qz7KDk1Wp5Fnxj+PJvOXWCIAOi5FLQZGrIMl82YKvFErzEtOCmfNOMUJg==" "integrity": "sha512-wC0RzbmWhMMAqJ3PK+4sBSAHZl+Y/Qz7KDk1Wp5Fnxj+PJvOXWCIAOi5FLQZGrIMl82YKvFErzEtOCmfNOMUJg=="
}, },
"node_modules/sorcery": { "node_modules/sorcery": {
"version": "0.10.0", "version": "0.11.0",
"resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.10.0.tgz", "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.11.0.tgz",
"integrity": "sha512-R5ocFmKZQFfSTstfOtHjJuAwbpGyf9qjQa1egyhvXSbM7emjrtLXtGdZsDJDABC85YBfVvrOiGWKSYXPKdvP1g==", "integrity": "sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@jridgewell/sourcemap-codec": "^1.4.14",
"buffer-crc32": "^0.2.5", "buffer-crc32": "^0.2.5",
"minimist": "^1.2.0", "minimist": "^1.2.0",
"sander": "^0.5.0", "sander": "^0.5.0"
"sourcemap-codec": "^1.3.0"
}, },
"bin": { "bin": {
"sorcery": "bin/index.js" "sorcery": "bin/sorcery"
} }
}, },
"node_modules/source-map-js": { "node_modules/source-map-js": {
@@ -1418,13 +1418,6 @@
"node": ">=0.10.0" "node": ">=0.10.0"
} }
}, },
"node_modules/sourcemap-codec": {
"version": "1.4.8",
"resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
"integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
"deprecated": "Please use @jridgewell/sourcemap-codec instead",
"dev": true
},
"node_modules/strip-indent": { "node_modules/strip-indent": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
@@ -1450,18 +1443,18 @@
} }
}, },
"node_modules/svelte": { "node_modules/svelte": {
"version": "3.55.0", "version": "3.55.1",
"resolved": "https://registry.npmjs.org/svelte/-/svelte-3.55.0.tgz", "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.55.1.tgz",
"integrity": "sha512-uGu2FVMlOuey4JoKHKrpZFkoYyj0VLjJdz47zX5+gVK5odxHM40RVhar9/iK2YFRVxvfg9FkhfVlR0sjeIrOiA==", "integrity": "sha512-S+87/P0Ve67HxKkEV23iCdAh/SX1xiSfjF1HOglno/YTbSTW7RniICMCofWGdJJbdjw3S+0PfFb1JtGfTXE0oQ==",
"dev": true, "dev": true,
"engines": { "engines": {
"node": ">= 8" "node": ">= 8"
} }
}, },
"node_modules/svelte-check": { "node_modules/svelte-check": {
"version": "3.0.1", "version": "3.0.2",
"resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-3.0.1.tgz", "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-3.0.2.tgz",
"integrity": "sha512-7YpHYWv6V2qhcvVeAlXixUPAlpLCXB1nZEQK0EItB3PtuYmENhKclbc5uKSJTodTwWR1y+4stKGcbH30k6A3Yw==", "integrity": "sha512-DkhKhV0Jt0gh7q9DBB26+J2Vfb9y4/4JWxnbkXBZha7542LOhwvj3edJFjyJ+xjdaXyInZ+YRRYc3V6wytP2ew==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@jridgewell/trace-mapping": "^0.3.17", "@jridgewell/trace-mapping": "^0.3.17",
@@ -1493,9 +1486,9 @@
} }
}, },
"node_modules/svelte-preprocess": { "node_modules/svelte-preprocess": {
"version": "5.0.0", "version": "5.0.1",
"resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.0.0.tgz", "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.0.1.tgz",
"integrity": "sha512-q7lpa7i2FBu8Pa+G0MmuQQWETBwCKgsGmuq1Sf6n8q4uaG9ZLcLP0Y+etC6bF4sE6EbLxfiI38zV6RfPe3RSfg==", "integrity": "sha512-0HXyhCoc9rsW4zGOgtInylC6qj259E1hpFnJMJWTf+aIfeqh4O/QHT31KT2hvPEqQfdjmqBR/kO2JDkkciBLrQ==",
"dev": true, "dev": true,
"hasInstallScript": true, "hasInstallScript": true,
"dependencies": { "dependencies": {
@@ -1503,7 +1496,7 @@
"@types/sass": "^1.43.1", "@types/sass": "^1.43.1",
"detect-indent": "^6.1.0", "detect-indent": "^6.1.0",
"magic-string": "^0.27.0", "magic-string": "^0.27.0",
"sorcery": "^0.10.0", "sorcery": "^0.11.0",
"strip-indent": "^3.0.0" "strip-indent": "^3.0.0"
}, },
"engines": { "engines": {
@@ -2500,15 +2493,15 @@
"integrity": "sha512-wC0RzbmWhMMAqJ3PK+4sBSAHZl+Y/Qz7KDk1Wp5Fnxj+PJvOXWCIAOi5FLQZGrIMl82YKvFErzEtOCmfNOMUJg==" "integrity": "sha512-wC0RzbmWhMMAqJ3PK+4sBSAHZl+Y/Qz7KDk1Wp5Fnxj+PJvOXWCIAOi5FLQZGrIMl82YKvFErzEtOCmfNOMUJg=="
}, },
"sorcery": { "sorcery": {
"version": "0.10.0", "version": "0.11.0",
"resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.10.0.tgz", "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.11.0.tgz",
"integrity": "sha512-R5ocFmKZQFfSTstfOtHjJuAwbpGyf9qjQa1egyhvXSbM7emjrtLXtGdZsDJDABC85YBfVvrOiGWKSYXPKdvP1g==", "integrity": "sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw==",
"dev": true, "dev": true,
"requires": { "requires": {
"@jridgewell/sourcemap-codec": "^1.4.14",
"buffer-crc32": "^0.2.5", "buffer-crc32": "^0.2.5",
"minimist": "^1.2.0", "minimist": "^1.2.0",
"sander": "^0.5.0", "sander": "^0.5.0"
"sourcemap-codec": "^1.3.0"
} }
}, },
"source-map-js": { "source-map-js": {
@@ -2517,12 +2510,6 @@
"integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
"dev": true "dev": true
}, },
"sourcemap-codec": {
"version": "1.4.8",
"resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
"integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
"dev": true
},
"strip-indent": { "strip-indent": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
@@ -2539,15 +2526,15 @@
"dev": true "dev": true
}, },
"svelte": { "svelte": {
"version": "3.55.0", "version": "3.55.1",
"resolved": "https://registry.npmjs.org/svelte/-/svelte-3.55.0.tgz", "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.55.1.tgz",
"integrity": "sha512-uGu2FVMlOuey4JoKHKrpZFkoYyj0VLjJdz47zX5+gVK5odxHM40RVhar9/iK2YFRVxvfg9FkhfVlR0sjeIrOiA==", "integrity": "sha512-S+87/P0Ve67HxKkEV23iCdAh/SX1xiSfjF1HOglno/YTbSTW7RniICMCofWGdJJbdjw3S+0PfFb1JtGfTXE0oQ==",
"dev": true "dev": true
}, },
"svelte-check": { "svelte-check": {
"version": "3.0.1", "version": "3.0.2",
"resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-3.0.1.tgz", "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-3.0.2.tgz",
"integrity": "sha512-7YpHYWv6V2qhcvVeAlXixUPAlpLCXB1nZEQK0EItB3PtuYmENhKclbc5uKSJTodTwWR1y+4stKGcbH30k6A3Yw==", "integrity": "sha512-DkhKhV0Jt0gh7q9DBB26+J2Vfb9y4/4JWxnbkXBZha7542LOhwvj3edJFjyJ+xjdaXyInZ+YRRYc3V6wytP2ew==",
"dev": true, "dev": true,
"requires": { "requires": {
"@jridgewell/trace-mapping": "^0.3.17", "@jridgewell/trace-mapping": "^0.3.17",
@@ -2568,16 +2555,16 @@
"requires": {} "requires": {}
}, },
"svelte-preprocess": { "svelte-preprocess": {
"version": "5.0.0", "version": "5.0.1",
"resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.0.0.tgz", "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.0.1.tgz",
"integrity": "sha512-q7lpa7i2FBu8Pa+G0MmuQQWETBwCKgsGmuq1Sf6n8q4uaG9ZLcLP0Y+etC6bF4sE6EbLxfiI38zV6RfPe3RSfg==", "integrity": "sha512-0HXyhCoc9rsW4zGOgtInylC6qj259E1hpFnJMJWTf+aIfeqh4O/QHT31KT2hvPEqQfdjmqBR/kO2JDkkciBLrQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"@types/pug": "^2.0.6", "@types/pug": "^2.0.6",
"@types/sass": "^1.43.1", "@types/sass": "^1.43.1",
"detect-indent": "^6.1.0", "detect-indent": "^6.1.0",
"magic-string": "^0.27.0", "magic-string": "^0.27.0",
"sorcery": "^0.10.0", "sorcery": "^0.11.0",
"strip-indent": "^3.0.0" "strip-indent": "^3.0.0"
} }
}, },

View File

@@ -15,13 +15,13 @@
"simple-svelte-autocomplete": "^2.5.1" "simple-svelte-autocomplete": "^2.5.1"
}, },
"devDependencies": { "devDependencies": {
"@sveltejs/vite-plugin-svelte": "^2.0.0", "@sveltejs/vite-plugin-svelte": "^2.0.2",
"@tauri-apps/cli": "^1.2.3", "@tauri-apps/cli": "^1.2.3",
"@tsconfig/svelte": "^3.0.0", "@tsconfig/svelte": "^3.0.0",
"@types/node": "^18.7.10", "@types/node": "^18.7.10",
"svelte": "^3.54.0", "svelte": "^3.55.1",
"svelte-check": "^3.0.0", "svelte-check": "^3.0.2",
"svelte-preprocess": "^5.0.0", "svelte-preprocess": "^5.0.1",
"tslib": "^2.4.1", "tslib": "^2.4.1",
"typescript": "^4.6.4", "typescript": "^4.6.4",
"vite": "^4.0.0" "vite": "^4.0.0"

View File

@@ -3,9 +3,44 @@
windows_subsystem = "windows" windows_subsystem = "windows"
)] )]
use wana_kana::to_katakana::*; use wana_kana::to_katakana::*;
use wana_kana::to_hiragana::*;
mod model; mod model;
use model::*; use model::*;
#[tauri::command]
fn autosearch_move(keyword: &str) -> serde_json::Value {
let connection = sqlite::open("./pokemon.db").unwrap();
let query = "SELECT * FROM learnset WHERE name like ? or name like ? or name like ? LIMIT 5";
let mut result: Vec<Autosearch> = vec![];
let aste_keyword = format!("%{}%", keyword.to_lowercase());
let katakana = format!("%{}%", to_katakana(keyword));
let hiragana = format!("%{}%", to_hiragana(keyword));
println!("{} - {}", katakana, hiragana);
for row in connection
.prepare(query)
.unwrap()
.into_iter()
.bind((1, aste_keyword.as_str()))
.unwrap()
.bind((2, katakana.as_str()))
.unwrap()
.bind((3, hiragana.as_str()))
.unwrap()
.map(|row| row.unwrap())
{
let row_result = Autosearch {
id: row.read::<i64, _>("id"),
name: format!(
"{}",
row.read::<&str, _>("name").to_string()
),
};
result.push(row_result);
}
println!("{:?}", result);
serde_json::to_value(result).unwrap_or(serde_json::json!("[]"))
}
#[tauri::command] #[tauri::command]
fn autosearch(keyword: &str) -> serde_json::Value { fn autosearch(keyword: &str) -> serde_json::Value {
let connection = sqlite::open("./pokemon.db").unwrap(); let connection = sqlite::open("./pokemon.db").unwrap();
@@ -37,6 +72,42 @@ fn autosearch(keyword: &str) -> serde_json::Value {
serde_json::to_value(result).unwrap_or(serde_json::json!("[]")) serde_json::to_value(result).unwrap_or(serde_json::json!("[]"))
} }
#[tauri::command] #[tauri::command]
fn search_move(index: i64) -> MoveSearchResult {
let connection = sqlite::open("./pokemon.db").unwrap();
let query = "SELECT * FROM learnset WHERE id = ?";
for row in connection
.prepare(query)
.unwrap()
.into_iter()
.bind((1, index))
.unwrap()
.map(|row| row.unwrap())
{
let row_result = MoveSearchResult {
id: row.read::<i64, _>("id"),
name: row.read::<&str, _>("name").to_string(),
types: row.read::<&str, _>("types").to_string(),
power: row.read::<i64, _>("power"),
category: row.read::<i64, _>("category"),
priority: row.read::<i64, _>("priority"),
condition: match row.read::<Option<&str>, _>("condition") {
Some(t) => Some(t.to_string()),
_ => None,
},
};
return row_result
}
return MoveSearchResult {
id: 0,
name: "Wrong".to_string(),
types: "[0]".to_string(),
power: 0,
category: 0,
priority: 0,
condition: None,
}
}
#[tauri::command]
fn search(index: i64) -> SearchResult { fn search(index: i64) -> SearchResult {
let connection = sqlite::open("./pokemon.db").unwrap(); let connection = sqlite::open("./pokemon.db").unwrap();
let query = "SELECT * FROM pokemon WHERE id = ?"; let query = "SELECT * FROM pokemon WHERE id = ?";
@@ -79,7 +150,7 @@ fn search(index: i64) -> SearchResult {
} }
fn main() { fn main() {
tauri::Builder::default() tauri::Builder::default()
.invoke_handler(tauri::generate_handler![autosearch, search]) .invoke_handler(tauri::generate_handler![autosearch_move, search_move, autosearch, search])
.run(tauri::generate_context!()) .run(tauri::generate_context!())
.expect("error while running tauri application"); .expect("error while running tauri application");
} }

View File

@@ -15,6 +15,16 @@ pub struct SearchResult {
pub thumbnail: String, pub thumbnail: String,
} }
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct MoveSearchResult {
pub id: i64,
pub name: String,
pub types: String,
pub power: i64,
pub category: i64,
pub priority: i64,
pub condition: Option<String>,
}
#[derive(Serialize, Deserialize, Debug, Clone)] #[derive(Serialize, Deserialize, Debug, Clone)]
pub struct Autosearch { pub struct Autosearch {
pub id: i64, pub id: i64,

View File

@@ -1,7 +1,20 @@
<script lang="ts"> <script lang="ts">
import { invoke } from "@tauri-apps/api/tauri";
import AutoComplete from "simple-svelte-autocomplete";
export let player1Data; export let player1Data;
export let player2Data; export let player2Data;
let attackData;
$: {
if (myValue > 0 && myValue !== currentValue) {
invoke("search_move", { index: myValue }).then((r) => {
currentValue = myValue;
attackData = r;
console.log(attackData);
});
}
}
let attack_direction = "p1p2"; let attack_direction = "p1p2";
let attack_type = "attack"; let attack_type = "attack";
let attack_power = 0; let attack_power = 0;
@@ -12,6 +25,10 @@
let defender; let defender;
let atk_value; let atk_value;
let def_value; let def_value;
if (!player1Data || !player2Data || !attackData || (!!attackData && ![1, 2].includes(attackData.category))) {
console.log("skip");
return;
}
if (attack_direction === "p1p2") { if (attack_direction === "p1p2") {
attacker = player1Data; attacker = player1Data;
defender = player2Data; defender = player2Data;
@@ -19,7 +36,7 @@
attacker = player2Data; attacker = player2Data;
defender = player1Data; defender = player1Data;
} }
if (attack_type === "attack") { if (attackData.category === 1) {
atk_value = attacker.atk; atk_value = attacker.atk;
def_value = defender.def; def_value = defender.def;
} else { } else {
@@ -29,7 +46,7 @@
// 計算で使用する値をひとまとめにしてみる // 計算で使用する値をひとまとめにしてみる
let data = { let data = {
level: 50, // 対戦時は基本的にレベル50なのでconstでも良さそう level: 50, // 対戦時は基本的にレベル50なのでconstでも良さそう
attack_power: attack_power, attack_power: attackData.power,
atk_value: atk_value, atk_value: atk_value,
def_value: def_value, def_value: def_value,
@@ -91,6 +108,18 @@
function getMinDamage(data){ function getMinDamage(data){
return Math.trunc(data.maxDamage * 85/100); return Math.trunc(data.maxDamage * 85/100);
} }
async function getItems(keyword) {
try {
let result = await invoke("autosearch_move", { keyword });
// console.log(result);
return result;
} catch (e) {
console.log(e);
return [];
}
}
let myValue;
let currentValue = 0;
</script> </script>
<div class="calculator"> <div class="calculator">
<table> <table>
@@ -103,9 +132,17 @@
</td> </td>
</tr> </tr>
<tr> <tr>
<td><input type="radio" name="type" value="attack" bind:group={attack_type}> Attack</td> <td>
<td><input type="radio" name="type" value="special" bind:group={attack_type}> Special</td> <AutoComplete
<td>Attack Power: <input type="text" bind:value={attack_power}></td> showClear={true}
searchFunction="{getItems}"
delay="200"
localFiltering={false}
labelFieldName="name"
valueFieldName="id"
bind:value="{myValue}"
/>
</td>
<td><input type="button" value="Calculate" on:click={calculate_damage}></td> <td><input type="button" value="Calculate" on:click={calculate_damage}></td>
<td>Total Damage: {total_min_damage} ~ {total_max_damage}</td> <td>Total Damage: {total_min_damage} ~ {total_max_damage}</td>
</tr> </tr>