Add the ability to respawn and improve controller port mapping (#72)
Reviewed-on: #72 Co-authored-by: Álex Román Núñez <eirexe@eirteam.moe>
This commit was merged in pull request #72.
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
//! Various interactions with the blast zones
|
||||
|
||||
use bevy::prelude::*;
|
||||
|
||||
use crate::{fighter::{FighterPendingRespawn, FighterTranslation, state::FighterState}, match_loading::MatchConfig, stage::manifest::{StageManifest, StageManifestRegistry}};
|
||||
|
||||
pub fn apply_blast_zones(
|
||||
stage_registry: Res<StageManifestRegistry>,
|
||||
stage_manifests: Res<Assets<StageManifest>>,
|
||||
match_config: Res<MatchConfig>,
|
||||
fighters: Query<(&FighterTranslation, &mut FighterPendingRespawn, &FighterState)>
|
||||
) {
|
||||
let Some(stage_manifest_handle) = stage_registry.get(match_config.stage) else {
|
||||
return;
|
||||
};
|
||||
|
||||
let Some(stage_manifest) = stage_manifests.get(&stage_manifest_handle) else {
|
||||
return;
|
||||
};
|
||||
|
||||
for (translation, mut pending_respawn, state) in fighters {
|
||||
let is_off_the_left = translation.x < stage_manifest.blast_zone_top_left.x;
|
||||
let is_off_the_right = translation.x > stage_manifest.blast_zone_bottom_right.x;
|
||||
let is_off_the_top = translation.y > stage_manifest.blast_zone_top_left.y;
|
||||
let is_off_the_bottom = translation.y < stage_manifest.blast_zone_bottom_right.y;
|
||||
|
||||
if is_off_the_left || is_off_the_bottom || is_off_the_right {
|
||||
pending_respawn.0 = true;
|
||||
} else if is_off_the_top {
|
||||
let is_in_hitstun = matches!(state, FighterState::Hitstun(..));
|
||||
if is_in_hitstun {
|
||||
pending_respawn.0 = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user