Added deck search and more hotkeys🔍

This commit is contained in:
Seoxi Ryouko
2025-02-28 06:24:45 -06:00
parent be5a969600
commit 67057773ae
5 changed files with 149 additions and 20 deletions

View File

@ -58,6 +58,9 @@ enum Event {
Unkill(Uuid, bool),
TransferDeadCard(Uuid, bool),
UntapAll(Player),
ViewDeck(Player),
Yoink(Player),
YoinkMill(Uuid),
}
#[derive(Serialize, Clone, Debug)]
@ -168,6 +171,32 @@ pub fn draw(game_state: &mut GameState, count: usize, player: Player) {
);
}
pub fn yoink(game_state: &mut GameState, deck_index: usize, player: Player) {
let player_hand = match player {
Player::A => &mut game_state.hands[0],
_ => &mut game_state.hands[1],
};
game_state.events.push(CountedEvent {
id: game_state.events.len(),
event: Event::Yoink(player.clone()),
});
player_hand.cards.push(game_state.deck.remove(deck_index).unwrap());
}
pub fn yoink_mill(game_state: &mut GameState, deck_index: usize, shadow: bool) {
let card = game_state.deck.remove(deck_index).unwrap();
game_state.events.push(CountedEvent {
id: game_state.events.len(),
event: Event::YoinkMill(card.clone()),
});
if shadow {
game_state.shadow_realm.push(card);
} else {
game_state.discard_pile.push(card);
}
}
pub fn shuffle(game_state: &mut GameState, player: Player) {
game_state.events.push(CountedEvent {
id: game_state.events.len(),
@ -384,3 +413,15 @@ pub fn untap_all(game_state: &mut GameState, player: Player) {
}
}
}
pub fn get_deck(game_state: &mut GameState, player: Player) -> String {
game_state.events.push(CountedEvent {
id: game_state.events.len(),
event: Event::ViewDeck(player),
});
let deck_copy = game_state.deck.clone();
//let copy_slice = deck_copy.make_contiguous();
//copy_slice.sort();
/*let final_card_list = copy_slice.into_iter().map(|card| card.braced().to_string()).collect::<Vec<String>>();*/
serde_json::to_string(&deck_copy).unwrap()
}

View File

@ -26,7 +26,7 @@ fn get_events(game_state_arc: &State<ArcMutexGameState>) -> String {
format!("{}", game::get_events(&game_state))
}
#[post("/<uuid>/shuffle")]
#[get("/<uuid>/shuffle")]
fn shuffle(
uuid: Uuid,
game_state_arc: &State<ArcMutexGameState>,
@ -247,6 +247,57 @@ fn unshadow(
Ok(format!("{}", game::get_events(&game_state)))
}
#[get("/<uuid>/yoink/<index>")]
fn yoink(
uuid: Uuid,
index: usize,
game_state_arc: &State<ArcMutexGameState>,
player_uuids: &State<PlayerUuids>,
) -> Result<String, BadRequest<String>> {
let player = match player_uuids.map.get(&uuid) {
Some(player) => player,
None => return Err(BadRequest(format!("Invalid player {}.", uuid))),
};
let game_state_mutex = Arc::clone(&game_state_arc.state);
let mut game_state = game_state_mutex.lock().unwrap();
game::yoink(&mut game_state, index, player.clone());
Ok(format!("{}", game::get_events(&game_state)))
}
#[get("/<uuid>/yoink_mill/<index>")]
fn yoink_mill(
uuid: Uuid,
index: usize,
game_state_arc: &State<ArcMutexGameState>,
player_uuids: &State<PlayerUuids>,
) -> Result<String, BadRequest<String>> {
match player_uuids.map.get(&uuid) {
Some(_) => (),
None => return Err(BadRequest(format!("Invalid player {}.", uuid))),
};
let game_state_mutex = Arc::clone(&game_state_arc.state);
let mut game_state = game_state_mutex.lock().unwrap();
game::yoink_mill(&mut game_state, index, false);
Ok(format!("{}", game::get_events(&game_state)))
}
#[get("/<uuid>/yoink_xmill/<index>")]
fn yoink_xmill(
uuid: Uuid,
index: usize,
game_state_arc: &State<ArcMutexGameState>,
player_uuids: &State<PlayerUuids>,
) -> Result<String, BadRequest<String>> {
match player_uuids.map.get(&uuid) {
Some(_) => (),
None => return Err(BadRequest(format!("Invalid player {}.", uuid))),
};
let game_state_mutex = Arc::clone(&game_state_arc.state);
let mut game_state = game_state_mutex.lock().unwrap();
game::yoink_mill(&mut game_state, index, true);
Ok(format!("{}", game::get_events(&game_state)))
}
#[get("/<uuid>/undiscard/<index>")]
fn undiscard(
uuid: Uuid,
@ -316,6 +367,24 @@ fn get_state(
))
}
#[get("/<uuid>/get_deck")]
fn get_deck(
uuid: Uuid,
game_state_arc: &State<ArcMutexGameState>,
player_uuids: &State<PlayerUuids>,
) -> Result<String, BadRequest<String>> {
let game_state_mutex = Arc::clone(&game_state_arc.state);
let mut game_state = game_state_mutex.lock().unwrap();
let player = match player_uuids.map.get(&uuid) {
Some(player) => player,
None => return Err(BadRequest(format!("Invalid player {}.", uuid))),
};
Ok(format!(
"{}",
game::get_deck(&mut game_state, player.clone())
))
}
#[get("/<uuid>/untap_all")]
fn untap_all(
uuid: Uuid,
@ -427,7 +496,7 @@ struct PlayerUuids {
#[launch]
fn rocket() -> _ {
let mut game_state = game::new();
let game_state = game::new();
//game::draw(&mut game_state, 7, Player::A);
//game::draw(&mut game_state, 7, Player::B);
let game_state_arc = Arc::new(Mutex::new(game_state));
@ -482,6 +551,10 @@ fn rocket() -> _ {
undiscard,
remember,
untap_all,
get_deck,
yoink,
yoink_mill,
yoink_xmill,
],
)
.manage(ArcMutexGameState {