added item support and team registration #4

Open
hansoo wants to merge 14 commits from add-item-support into master
8 changed files with 185 additions and 38 deletions
Showing only changes of commit bfb1d6d3e8 - Show all commits

View File

@@ -156,7 +156,6 @@ fn search(index: i64) -> SearchResult {
}; };
learnset.push(row_result) learnset.push(row_result)
} }
println!("Get Thing2");
let query = "SELECT * FROM pokemon WHERE id = ?"; let query = "SELECT * FROM pokemon WHERE id = ?";
for row in connection for row in connection
.prepare(query) .prepare(query)

View File

@@ -1,19 +1,26 @@
<script lang="ts"> <script lang="ts">
import { invoke } from "@tauri-apps/api/tauri";
import MainWrapper from "./lib/MainWrapper.svelte"; import MainWrapper from "./lib/MainWrapper.svelte";
import DamageCalculator from "./lib/DamageCalculator.svelte"; import DamageCalculator from "./lib/DamageCalculator.svelte";
import "carbon-components-svelte/css/g80.css"; import "carbon-components-svelte/css/g80.css";
let player1Data; import type { ItemData } from "./model/ItemData";
let player2Data; import type { PokemonStatus } from "./model/PokemonStatus";
let attackId; let items: ItemData[] = [];
let player1Data: PokemonStatus | undefined;
let player2Data: PokemonStatus | undefined;
let attackId: number | undefined;
invoke("get_items").then((r: ItemData[]) => {
items = r;
});
</script> </script>
<main class="container"> <main class="container">
<div class="main-row"> <div class="main-row">
<div class="column-1"> <div class="column-1">
<MainWrapper bind:pokemonStatus={player1Data} bind:attackId/> <MainWrapper bind:pokemonStatus={player1Data} bind:attackId {items} />
</div> </div>
<div class="column-2"> <div class="column-2">
<MainWrapper bind:pokemonStatus={player2Data} bind:attackId /> <MainWrapper bind:pokemonStatus={player2Data} bind:attackId {items} />
</div> </div>
</div> </div>
<div class="row"> <div class="row">

View File

@@ -2,10 +2,10 @@
import { invoke } from "@tauri-apps/api/tauri"; import { invoke } from "@tauri-apps/api/tauri";
import AutoComplete from "simple-svelte-autocomplete"; import AutoComplete from "simple-svelte-autocomplete";
import attack_types from "../const/attack_types.json"; import attack_types from "../const/attack_types.json";
import type { PokemonData } from "../model/PokemonStatus"; import type { PokemonStatus } from "../model/PokemonStatus";
export let player1Data: PokemonData | undefined; export let player1Data: PokemonStatus | undefined;
export let player2Data: PokemonData | undefined; export let player2Data: PokemonStatus | undefined;
export let attackId: number | undefined; export let attackId: number | undefined;
let attackData; let attackData;
$: { $: {
@@ -394,6 +394,7 @@
bind:value={myValue} bind:value={myValue}
/> />
</td> </td>
<td>{ attackData ? attackData.name : "" }</td>
<td> <td>
<input type="button" value="Calculate" on:click={calculate_damage} /> <input type="button" value="Calculate" on:click={calculate_damage} />
</td> </td>

View File

@@ -1,11 +1,13 @@
<script lang="ts"> <script lang="ts">
import defense_types from "../const/defense_types.json"; import defense_types from "../const/defense_types.json";
import type { PokemonDBData } from "src/model/PokemonData"; import type { PokemonData } from "src/model/PokemonData";
import type { ItemData } from "../model/ItemData";
import { Accordion, AccordionItem } from "carbon-components-svelte"; import { Accordion, AccordionItem } from "carbon-components-svelte";
import PhysicalIcon from "../assets/buturi.png"; import PhysicalIcon from "../assets/buturi.png";
import SpecialIcon from "../assets/tokushu.png"; import SpecialIcon from "../assets/tokushu.png";
import BuffIcon from "../assets/henka.png"; import BuffIcon from "../assets/henka.png";
export let pokemonData: PokemonDBData | undefined; export let items: ItemData[];
export let pokemonData: PokemonData | undefined;
export let attackId: number | undefined; export let attackId: number | undefined;
function v_validator(v) { function v_validator(v) {
if (typeof v !== "number") { if (typeof v !== "number") {
@@ -64,6 +66,9 @@
return d; return d;
} }
$: { $: {
if (terastype[0] !== selected_terastype) {
selected_terastype = terastype[0];
}
// validator // validator
level = level_validator(level); level = level_validator(level);
hp_v = v_validator(hp_v); hp_v = v_validator(hp_v);
@@ -291,7 +296,7 @@
export let spdef_final = 0; export let spdef_final = 0;
export let spd_final = 0; export let spd_final = 0;
export let terastype = [0]; export let terastype = [0];
export let item = 0; export let item;
let level = 50; let level = 50;
let selected_terastype = 0; let selected_terastype = 0;
let selected_item = 0; let selected_item = 0;
@@ -326,13 +331,13 @@
<AccordionItem open title="基本情報"> <AccordionItem open title="基本情報">
<table class="pokemon-data"> <table class="pokemon-data">
<tr> <tr>
<td rowspan="4" class="picture" <td rowspan="4" class="picture">
><img <img
src={`data:image/png;base64,${pokemonData.thumbnail}`} src={`data:image/png;base64,${pokemonData.thumbnail}`}
alt={pokemonData.name} alt={pokemonData.name}
width="85%" width="100%"
/></td />
> </td>
<td class="pokemon-title">名前</td> <td class="pokemon-title">名前</td>
<td class="pokemon-name">{pokemonData.name}</td> <td class="pokemon-name">{pokemonData.name}</td>
</tr> </tr>
@@ -366,6 +371,11 @@
on:change={() => (item = selected_item)} on:change={() => (item = selected_item)}
> >
<option value={0}> なし </option> <option value={0}> なし </option>
{#each items as item}
<option value={item.id}>
{item.name}
</option>
{/each}
</select> </select>
</td> </td>
</tr> </tr>

View File

@@ -2,13 +2,32 @@
import { invoke } from "@tauri-apps/api/tauri"; import { invoke } from "@tauri-apps/api/tauri";
import AutoComplete from "simple-svelte-autocomplete"; import AutoComplete from "simple-svelte-autocomplete";
import DisplayData from "./DisplayData.svelte"; import DisplayData from "./DisplayData.svelte";
import type { PokemonData } from "../model/PokemonStatus"; import type { PokemonStatus } from "../model/PokemonStatus";
import type { PokemonDBData } from "src/model/PokemonData"; import type { PokemonDBData, PokemonData } from "src/model/PokemonData";
import type { ItemData, ItemEffect } from "../model/ItemData";
$: { $: {
if (myValue > 0 && myValue !== currentValue) { if (myValue > 0 && myValue !== currentValue) {
invoke("search", { index: myValue }).then((r) => { invoke("search", { index: myValue }).then((r: PokemonDBData) => {
currentValue = myValue; currentValue = myValue;
pokemonData = r as PokemonDBData; pokemonData = {
id: r.id,
name: r.name,
types: r.types,
thumbnail: r.thumbnail,
abilities: r.abilities,
hp: r.hp,
attack: r.attack,
defense: r.defense,
special_attack: r.special_attack,
special_defense: r.special_defense,
speed: r.speed,
learnset: r.learnset,
item: 0,
terastype: [0],
};
item = 0;
terastype = [0];
pokemonDataArray[index] = pokemonData;
console.log(pokemonData); console.log(pokemonData);
}); });
} }
@@ -21,13 +40,17 @@
spatk: spatk_final, spatk: spatk_final,
spdef: spdef_final, spdef: spdef_final,
spd: spd_final, spd: spd_final,
item: item,
}; };
console.log(pokemonStatus); console.log(pokemonStatus);
} }
export let attackId: number | undefined; export let attackId: number | undefined;
export let items: ItemData[];
let myValue; let myValue;
let index = 0;
let currentValue = 0; let currentValue = 0;
let pokemonData: PokemonDBData | undefined; let pokemonData: PokemonData | undefined;
let pokemonDataArray: PokemonData[] = [];
let terastype = [0]; let terastype = [0];
let hp_final = 0; let hp_final = 0;
let atk_final = 0; let atk_final = 0;
@@ -35,7 +58,8 @@
let spatk_final = 0; let spatk_final = 0;
let spdef_final = 0; let spdef_final = 0;
let spd_final = 0; let spd_final = 0;
export let pokemonStatus: PokemonData = { let item = 0;
export let pokemonStatus: PokemonStatus = {
types: [], types: [],
terastype: [0], terastype: [0],
hp: 0, hp: 0,
@@ -44,6 +68,7 @@
spatk: 0, spatk: 0,
spdef: 0, spdef: 0,
spd: 0, spd: 0,
item: 0,
}; };
async function getItems(keyword) { async function getItems(keyword) {
try { try {
@@ -70,6 +95,33 @@
/> />
</div> </div>
<div class="row-display"> <div class="row-display">
<div class="pokemon-button-div">
<table class="button-table">
{#each [0, 1, 2, 3, 4, 5] as i}
<tr>
<td>
<!-- svelte-ignore a11y-click-events-have-key-events -->
<div class="pokemon-button {i % 2 === 0 ? "odd" : "even"}" on:click={() => {
index = i;
pokemonData = pokemonDataArray[i];
}}>
{#if pokemonDataArray[i]}
<img
src={`data:image/png;base64,${pokemonDataArray[i].thumbnail}`}
alt={pokemonDataArray[i].name}
width="15%"
/>
{pokemonDataArray[i].name}
{:else}
No Pokemon
{/if}
</div>
</td>
</tr>
{/each}
</table>
</div>
<div class="display-data">
<DisplayData <DisplayData
{pokemonData} {pokemonData}
bind:terastype bind:terastype
@@ -80,13 +132,56 @@
bind:spdef_final bind:spdef_final
bind:spd_final bind:spd_final
bind:attackId bind:attackId
bind:item
{items}
/> />
</div> </div>
</div>
</div> </div>
<style> <style>
.row-display { .row-display {
height: 755px; height: 759px;
display: flex;
}
.button-table {
width: 200px;
}
.pokemon-button-div {
width: 200px;
border-right: 2px solid white;
}
.display-data {
width: 800px;
height: 759px;
overflow-y: scroll; overflow-y: scroll;
} }
.pokemon-button {
padding: 10px;
border-top-left-radius: 10px;
display: flex;
align-items: center;
justify-content: center;
height: 50px;
}
.odd {
color: black;
background-color: azure;
}
.odd:hover {
color: black;
background-color:aquamarine;
transition: background-color 1s ease;
cursor: pointer;
}
.even {
color: black;
background-color: beige;
}
.even:hover {
color: black;
background-color:burlywood;
transition: background-color 1s ease;
cursor: pointer;
}
</style> </style>

16
src/model/ItemData.ts Normal file
View File

@@ -0,0 +1,16 @@
export interface ItemData {
id: number;
name: string;
image: string;
effect?: ItemEffect,
}
export interface ItemEffect {
attack?: number;
defense?: number;
special_attack?: number;
special_defense?: number;
speed?: number;
condition?: string;
type?: number;
}

View File

@@ -12,6 +12,22 @@ export interface PokemonDBData {
speed: number; speed: number;
learnset: PokemonLearnsetDBData[]; learnset: PokemonLearnsetDBData[];
}; };
export interface PokemonData {
id: number;
name: string;
types: string;
thumbnail: string;
abilities: string;
hp: number;
attack: number;
defense: number;
special_attack: number;
special_defense: number;
speed: number;
learnset: PokemonLearnsetDBData[];
item: number;
terastype: number[];
};
export interface PokemonLearnsetDBData { export interface PokemonLearnsetDBData {
id: number; id: number;
learnset_id: number; learnset_id: number;

View File

@@ -1,4 +1,6 @@
export interface PokemonData { import type { ItemEffect } from "./ItemData";
export interface PokemonStatus {
types: number[], types: number[],
terastype: number[], terastype: number[],
hp: number, hp: number,
@@ -6,5 +8,6 @@ export interface PokemonData {
def: number, def: number,
spatk: number, spatk: number,
spdef: number, spdef: number,
spd: number spd: number,
item: number,
}; };