Fix bug where UI wasn't detecting 7-letter word bonus
This commit is contained in:
parent
733feecfe3
commit
cdfd8b5ee9
2 changed files with 26 additions and 9 deletions
17
src/game.rs
17
src/game.rs
|
@ -47,6 +47,13 @@ pub struct WordResult {
|
||||||
score: u32,
|
score: u32,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Serialize, Deserialize, Tsify)]
|
||||||
|
#[tsify(from_wasm_abi)]
|
||||||
|
pub struct ScoreResult {
|
||||||
|
words: Vec<WordResult>,
|
||||||
|
total: u32,
|
||||||
|
}
|
||||||
|
|
||||||
pub struct PlayerStates(pub Vec<PlayerState>);
|
pub struct PlayerStates(pub Vec<PlayerState>);
|
||||||
impl PlayerStates {
|
impl PlayerStates {
|
||||||
pub fn get_player_state(&self, name: &str) -> Option<&PlayerState> {
|
pub fn get_player_state(&self, name: &str) -> Option<&PlayerState> {
|
||||||
|
@ -143,7 +150,7 @@ impl Game {
|
||||||
&self.dictionary
|
&self.dictionary
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn receive_play(&mut self, player: &str, tray_tile_locations: Vec<Option<PlayedTile>>, commit_move: bool) -> Result<Vec<WordResult>, String> {
|
pub fn receive_play(&mut self, player: &str, tray_tile_locations: Vec<Option<PlayedTile>>, commit_move: bool) -> Result<ScoreResult, String> {
|
||||||
|
|
||||||
let mut board_instance = self.get_board().clone();
|
let mut board_instance = self.get_board().clone();
|
||||||
let mut tray = self.player_states.get_tray(player).unwrap().clone();
|
let mut tray = self.player_states.get_tray(player).unwrap().clone();
|
||||||
|
@ -176,6 +183,7 @@ impl Game {
|
||||||
|
|
||||||
|
|
||||||
let x = board_instance.calculate_scores(self.get_dictionary())?;
|
let x = board_instance.calculate_scores(self.get_dictionary())?;
|
||||||
|
let total_score = x.1;
|
||||||
|
|
||||||
let words: Vec<WordResult> = x.0.iter()
|
let words: Vec<WordResult> = x.0.iter()
|
||||||
.map(|(word, score)| {
|
.map(|(word, score)| {
|
||||||
|
@ -189,7 +197,7 @@ impl Game {
|
||||||
|
|
||||||
if commit_move {
|
if commit_move {
|
||||||
let mut player_state = self.player_states.get_player_state_mut(player).unwrap();
|
let mut player_state = self.player_states.get_player_state_mut(player).unwrap();
|
||||||
player_state.score += x.1;
|
player_state.score += total_score;
|
||||||
player_state.tray = tray;
|
player_state.tray = tray;
|
||||||
|
|
||||||
board_instance.fix_tiles();
|
board_instance.fix_tiles();
|
||||||
|
@ -197,7 +205,10 @@ impl Game {
|
||||||
self.fill_trays()
|
self.fill_trays()
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(words)
|
Ok(ScoreResult {
|
||||||
|
words,
|
||||||
|
total: total_score,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn exchange_tiles(&mut self, player: &str, tray_tile_locations: Vec<bool>) -> Result<Tray, String> {
|
pub fn exchange_tiles(&mut self, player: &str, tray_tile_locations: Vec<bool>) -> Result<Tray, String> {
|
||||||
|
|
|
@ -1,5 +1,13 @@
|
||||||
import * as React from "react";
|
import * as React from "react";
|
||||||
import {GameWasm, Letter as LetterData, MyResult, PlayedTile, PlayerAndScore, Tray, WordResult} from "word_grid";
|
import {
|
||||||
|
GameWasm,
|
||||||
|
Letter as LetterData,
|
||||||
|
MyResult,
|
||||||
|
PlayedTile,
|
||||||
|
PlayerAndScore,
|
||||||
|
ScoreResult,
|
||||||
|
Tray
|
||||||
|
} from "word_grid";
|
||||||
import {
|
import {
|
||||||
LocationType,
|
LocationType,
|
||||||
matchCoordinate,
|
matchCoordinate,
|
||||||
|
@ -169,7 +177,7 @@ export function Game(props: {wasm: GameWasm, settings: Settings}) {
|
||||||
return null;
|
return null;
|
||||||
});
|
});
|
||||||
|
|
||||||
const result: MyResult<Array<WordResult> | string> = props.wasm.receive_play("Player", playedTiles, confirmedScorePoints > -1);
|
const result: MyResult<ScoreResult | string> = props.wasm.receive_play("Player", playedTiles, confirmedScorePoints > -1);
|
||||||
console.log({result});
|
console.log({result});
|
||||||
|
|
||||||
if(result.response_type === "ERR") {
|
if(result.response_type === "ERR") {
|
||||||
|
@ -184,10 +192,8 @@ export function Game(props: {wasm: GameWasm, settings: Settings}) {
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
let total_points = 0;
|
const score_result = result.value as ScoreResult;
|
||||||
for (let word_result of (result.value as Array<WordResult>)) {
|
const total_points = score_result.total;
|
||||||
total_points += word_result.score;
|
|
||||||
}
|
|
||||||
|
|
||||||
let msg: string;
|
let msg: string;
|
||||||
if (confirmedScorePoints > -1) {
|
if (confirmedScorePoints > -1) {
|
||||||
|
|
Loading…
Reference in a new issue