added search for attack
This commit is contained in:
83
package-lock.json
generated
83
package-lock.json
generated
@@ -12,13 +12,13 @@
|
||||
"simple-svelte-autocomplete": "^2.5.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@sveltejs/vite-plugin-svelte": "^2.0.0",
|
||||
"@sveltejs/vite-plugin-svelte": "^2.0.2",
|
||||
"@tauri-apps/cli": "^1.2.3",
|
||||
"@tsconfig/svelte": "^3.0.0",
|
||||
"@types/node": "^18.7.10",
|
||||
"svelte": "^3.54.0",
|
||||
"svelte-check": "^3.0.0",
|
||||
"svelte-preprocess": "^5.0.0",
|
||||
"svelte": "^3.55.1",
|
||||
"svelte-check": "^3.0.2",
|
||||
"svelte-preprocess": "^5.0.1",
|
||||
"tslib": "^2.4.1",
|
||||
"typescript": "^4.6.4",
|
||||
"vite": "^4.0.0"
|
||||
@@ -1395,18 +1395,18 @@
|
||||
"integrity": "sha512-wC0RzbmWhMMAqJ3PK+4sBSAHZl+Y/Qz7KDk1Wp5Fnxj+PJvOXWCIAOi5FLQZGrIMl82YKvFErzEtOCmfNOMUJg=="
|
||||
},
|
||||
"node_modules/sorcery": {
|
||||
"version": "0.10.0",
|
||||
"resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.10.0.tgz",
|
||||
"integrity": "sha512-R5ocFmKZQFfSTstfOtHjJuAwbpGyf9qjQa1egyhvXSbM7emjrtLXtGdZsDJDABC85YBfVvrOiGWKSYXPKdvP1g==",
|
||||
"version": "0.11.0",
|
||||
"resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.11.0.tgz",
|
||||
"integrity": "sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@jridgewell/sourcemap-codec": "^1.4.14",
|
||||
"buffer-crc32": "^0.2.5",
|
||||
"minimist": "^1.2.0",
|
||||
"sander": "^0.5.0",
|
||||
"sourcemap-codec": "^1.3.0"
|
||||
"sander": "^0.5.0"
|
||||
},
|
||||
"bin": {
|
||||
"sorcery": "bin/index.js"
|
||||
"sorcery": "bin/sorcery"
|
||||
}
|
||||
},
|
||||
"node_modules/source-map-js": {
|
||||
@@ -1418,13 +1418,6 @@
|
||||
"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": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
|
||||
@@ -1450,18 +1443,18 @@
|
||||
}
|
||||
},
|
||||
"node_modules/svelte": {
|
||||
"version": "3.55.0",
|
||||
"resolved": "https://registry.npmjs.org/svelte/-/svelte-3.55.0.tgz",
|
||||
"integrity": "sha512-uGu2FVMlOuey4JoKHKrpZFkoYyj0VLjJdz47zX5+gVK5odxHM40RVhar9/iK2YFRVxvfg9FkhfVlR0sjeIrOiA==",
|
||||
"version": "3.55.1",
|
||||
"resolved": "https://registry.npmjs.org/svelte/-/svelte-3.55.1.tgz",
|
||||
"integrity": "sha512-S+87/P0Ve67HxKkEV23iCdAh/SX1xiSfjF1HOglno/YTbSTW7RniICMCofWGdJJbdjw3S+0PfFb1JtGfTXE0oQ==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">= 8"
|
||||
}
|
||||
},
|
||||
"node_modules/svelte-check": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-3.0.1.tgz",
|
||||
"integrity": "sha512-7YpHYWv6V2qhcvVeAlXixUPAlpLCXB1nZEQK0EItB3PtuYmENhKclbc5uKSJTodTwWR1y+4stKGcbH30k6A3Yw==",
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-3.0.2.tgz",
|
||||
"integrity": "sha512-DkhKhV0Jt0gh7q9DBB26+J2Vfb9y4/4JWxnbkXBZha7542LOhwvj3edJFjyJ+xjdaXyInZ+YRRYc3V6wytP2ew==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@jridgewell/trace-mapping": "^0.3.17",
|
||||
@@ -1493,9 +1486,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/svelte-preprocess": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.0.0.tgz",
|
||||
"integrity": "sha512-q7lpa7i2FBu8Pa+G0MmuQQWETBwCKgsGmuq1Sf6n8q4uaG9ZLcLP0Y+etC6bF4sE6EbLxfiI38zV6RfPe3RSfg==",
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.0.1.tgz",
|
||||
"integrity": "sha512-0HXyhCoc9rsW4zGOgtInylC6qj259E1hpFnJMJWTf+aIfeqh4O/QHT31KT2hvPEqQfdjmqBR/kO2JDkkciBLrQ==",
|
||||
"dev": true,
|
||||
"hasInstallScript": true,
|
||||
"dependencies": {
|
||||
@@ -1503,7 +1496,7 @@
|
||||
"@types/sass": "^1.43.1",
|
||||
"detect-indent": "^6.1.0",
|
||||
"magic-string": "^0.27.0",
|
||||
"sorcery": "^0.10.0",
|
||||
"sorcery": "^0.11.0",
|
||||
"strip-indent": "^3.0.0"
|
||||
},
|
||||
"engines": {
|
||||
@@ -2500,15 +2493,15 @@
|
||||
"integrity": "sha512-wC0RzbmWhMMAqJ3PK+4sBSAHZl+Y/Qz7KDk1Wp5Fnxj+PJvOXWCIAOi5FLQZGrIMl82YKvFErzEtOCmfNOMUJg=="
|
||||
},
|
||||
"sorcery": {
|
||||
"version": "0.10.0",
|
||||
"resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.10.0.tgz",
|
||||
"integrity": "sha512-R5ocFmKZQFfSTstfOtHjJuAwbpGyf9qjQa1egyhvXSbM7emjrtLXtGdZsDJDABC85YBfVvrOiGWKSYXPKdvP1g==",
|
||||
"version": "0.11.0",
|
||||
"resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.11.0.tgz",
|
||||
"integrity": "sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@jridgewell/sourcemap-codec": "^1.4.14",
|
||||
"buffer-crc32": "^0.2.5",
|
||||
"minimist": "^1.2.0",
|
||||
"sander": "^0.5.0",
|
||||
"sourcemap-codec": "^1.3.0"
|
||||
"sander": "^0.5.0"
|
||||
}
|
||||
},
|
||||
"source-map-js": {
|
||||
@@ -2517,12 +2510,6 @@
|
||||
"integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
|
||||
"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": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
|
||||
@@ -2539,15 +2526,15 @@
|
||||
"dev": true
|
||||
},
|
||||
"svelte": {
|
||||
"version": "3.55.0",
|
||||
"resolved": "https://registry.npmjs.org/svelte/-/svelte-3.55.0.tgz",
|
||||
"integrity": "sha512-uGu2FVMlOuey4JoKHKrpZFkoYyj0VLjJdz47zX5+gVK5odxHM40RVhar9/iK2YFRVxvfg9FkhfVlR0sjeIrOiA==",
|
||||
"version": "3.55.1",
|
||||
"resolved": "https://registry.npmjs.org/svelte/-/svelte-3.55.1.tgz",
|
||||
"integrity": "sha512-S+87/P0Ve67HxKkEV23iCdAh/SX1xiSfjF1HOglno/YTbSTW7RniICMCofWGdJJbdjw3S+0PfFb1JtGfTXE0oQ==",
|
||||
"dev": true
|
||||
},
|
||||
"svelte-check": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-3.0.1.tgz",
|
||||
"integrity": "sha512-7YpHYWv6V2qhcvVeAlXixUPAlpLCXB1nZEQK0EItB3PtuYmENhKclbc5uKSJTodTwWR1y+4stKGcbH30k6A3Yw==",
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-3.0.2.tgz",
|
||||
"integrity": "sha512-DkhKhV0Jt0gh7q9DBB26+J2Vfb9y4/4JWxnbkXBZha7542LOhwvj3edJFjyJ+xjdaXyInZ+YRRYc3V6wytP2ew==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@jridgewell/trace-mapping": "^0.3.17",
|
||||
@@ -2568,16 +2555,16 @@
|
||||
"requires": {}
|
||||
},
|
||||
"svelte-preprocess": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.0.0.tgz",
|
||||
"integrity": "sha512-q7lpa7i2FBu8Pa+G0MmuQQWETBwCKgsGmuq1Sf6n8q4uaG9ZLcLP0Y+etC6bF4sE6EbLxfiI38zV6RfPe3RSfg==",
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.0.1.tgz",
|
||||
"integrity": "sha512-0HXyhCoc9rsW4zGOgtInylC6qj259E1hpFnJMJWTf+aIfeqh4O/QHT31KT2hvPEqQfdjmqBR/kO2JDkkciBLrQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/pug": "^2.0.6",
|
||||
"@types/sass": "^1.43.1",
|
||||
"detect-indent": "^6.1.0",
|
||||
"magic-string": "^0.27.0",
|
||||
"sorcery": "^0.10.0",
|
||||
"sorcery": "^0.11.0",
|
||||
"strip-indent": "^3.0.0"
|
||||
}
|
||||
},
|
||||
|
||||
@@ -15,13 +15,13 @@
|
||||
"simple-svelte-autocomplete": "^2.5.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@sveltejs/vite-plugin-svelte": "^2.0.0",
|
||||
"@sveltejs/vite-plugin-svelte": "^2.0.2",
|
||||
"@tauri-apps/cli": "^1.2.3",
|
||||
"@tsconfig/svelte": "^3.0.0",
|
||||
"@types/node": "^18.7.10",
|
||||
"svelte": "^3.54.0",
|
||||
"svelte-check": "^3.0.0",
|
||||
"svelte-preprocess": "^5.0.0",
|
||||
"svelte": "^3.55.1",
|
||||
"svelte-check": "^3.0.2",
|
||||
"svelte-preprocess": "^5.0.1",
|
||||
"tslib": "^2.4.1",
|
||||
"typescript": "^4.6.4",
|
||||
"vite": "^4.0.0"
|
||||
|
||||
@@ -3,9 +3,44 @@
|
||||
windows_subsystem = "windows"
|
||||
)]
|
||||
use wana_kana::to_katakana::*;
|
||||
use wana_kana::to_hiragana::*;
|
||||
mod 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]
|
||||
fn autosearch(keyword: &str) -> serde_json::Value {
|
||||
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!("[]"))
|
||||
}
|
||||
#[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 {
|
||||
let connection = sqlite::open("./pokemon.db").unwrap();
|
||||
let query = "SELECT * FROM pokemon WHERE id = ?";
|
||||
@@ -79,7 +150,7 @@ fn search(index: i64) -> SearchResult {
|
||||
}
|
||||
fn main() {
|
||||
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!())
|
||||
.expect("error while running tauri application");
|
||||
}
|
||||
|
||||
@@ -15,6 +15,16 @@ pub struct SearchResult {
|
||||
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)]
|
||||
pub struct Autosearch {
|
||||
pub id: i64,
|
||||
|
||||
@@ -1,7 +1,20 @@
|
||||
<script lang="ts">
|
||||
import { invoke } from "@tauri-apps/api/tauri";
|
||||
import AutoComplete from "simple-svelte-autocomplete";
|
||||
|
||||
export let player1Data;
|
||||
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_type = "attack";
|
||||
let attack_power = 0;
|
||||
@@ -12,6 +25,10 @@
|
||||
let defender;
|
||||
let atk_value;
|
||||
let def_value;
|
||||
if (!player1Data || !player2Data || !attackData || (!!attackData && ![1, 2].includes(attackData.category))) {
|
||||
console.log("skip");
|
||||
return;
|
||||
}
|
||||
if (attack_direction === "p1p2") {
|
||||
attacker = player1Data;
|
||||
defender = player2Data;
|
||||
@@ -19,7 +36,7 @@
|
||||
attacker = player2Data;
|
||||
defender = player1Data;
|
||||
}
|
||||
if (attack_type === "attack") {
|
||||
if (attackData.category === 1) {
|
||||
atk_value = attacker.atk;
|
||||
def_value = defender.def;
|
||||
} else {
|
||||
@@ -29,7 +46,7 @@
|
||||
// 計算で使用する値をひとまとめにしてみる
|
||||
let data = {
|
||||
level: 50, // 対戦時は基本的にレベル50なのでconstでも良さそう
|
||||
attack_power: attack_power,
|
||||
attack_power: attackData.power,
|
||||
atk_value: atk_value,
|
||||
def_value: def_value,
|
||||
|
||||
@@ -91,6 +108,18 @@
|
||||
function getMinDamage(data){
|
||||
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>
|
||||
<div class="calculator">
|
||||
<table>
|
||||
@@ -103,9 +132,17 @@
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><input type="radio" name="type" value="attack" bind:group={attack_type}> Attack</td>
|
||||
<td><input type="radio" name="type" value="special" bind:group={attack_type}> Special</td>
|
||||
<td>Attack Power: <input type="text" bind:value={attack_power}></td>
|
||||
<td>
|
||||
<AutoComplete
|
||||
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>Total Damage: {total_min_damage} ~ {total_max_damage}</td>
|
||||
</tr>
|
||||
|
||||
Reference in New Issue
Block a user