Browse Source

Striker error handling

master
Bergmann89 3 years ago
parent
commit
b3d139a4e7
9 changed files with 30 additions and 62 deletions
  1. +5
    -3
      space-crush-app/src/debug/fleets.rs
  2. +3
    -7
      space-crush-app/src/debug/ships.rs
  3. +8
    -5
      space-crush-app/src/render/fleet_move.rs
  4. +9
    -9
      space-crush-app/src/render/fleet_select.rs
  5. +0
    -1
      space-crush-common/src/lib.rs
  6. +0
    -29
      space-crush-common/src/macros.rs
  7. +1
    -2
      space-crush-common/src/systems/fleet_orbiting_update.rs
  8. +1
    -2
      space-crush-common/src/systems/ship_movement.rs
  9. +3
    -4
      space-crush-common/src/systems/ships.rs

+ 5
- 3
space-crush-app/src/debug/fleets.rs View File

@@ -1,6 +1,5 @@
use space_crush_common::{ use space_crush_common::{
components::{Fleet, MeetingPoint, Position}, components::{Fleet, MeetingPoint, Position},
continue_if_none,
misc::LogResult, misc::LogResult,
}; };
use specs::{prelude::*, ReadExpect, ReadStorage, System, World}; use specs::{prelude::*, ReadExpect, ReadStorage, System, World};
@@ -58,8 +57,11 @@ impl<'a> System<'a> for Fleets {
gl::enable(gl::BLEND); gl::enable(gl::BLEND);


for (position, meeting_point) in (&positions, &meeting_points).join() { for (position, meeting_point) in (&positions, &meeting_points).join() {
let fleet_id = continue_if_none!(meeting_point.fleet(player_index));
let fleet = continue_if_none!(fleets.get(fleet_id));
let fleet_id = match meeting_point.fleet(player_index) {
Some(fleet_id) => fleet_id,
None => continue,
};
let fleet = fleets.get(fleet_id).unwrap();


gl::blend_func(gl::SRC_ALPHA, gl::ONE_MINUS_SRC_ALPHA); gl::blend_func(gl::SRC_ALPHA, gl::ONE_MINUS_SRC_ALPHA);
gl::blend_equation(gl::FUNC_SUBTRACT); gl::blend_equation(gl::FUNC_SUBTRACT);


+ 3
- 7
space-crush-app/src/debug/ships.rs View File

@@ -1,8 +1,5 @@
use glc::vector::Vector4f; use glc::vector::Vector4f;
use space_crush_common::{
components::{Player, PlayerOwned, Position, Ship, ShipObstacle},
continue_if_none,
};
use space_crush_common::components::{Player, PlayerOwned, Position, Ship, ShipObstacle};
use specs::{prelude::*, ReadStorage, System, World, WriteExpect}; use specs::{prelude::*, ReadStorage, System, World, WriteExpect};


use crate::resources::Geometry; use crate::resources::Geometry;
@@ -38,7 +35,7 @@ impl<'a> System<'a> for Ships {
let ship_pos = position.get(); let ship_pos = position.get();
let type_ = ship.type_(); let type_ = ship.type_();
let player_id = player_owned.owner(); let player_id = player_owned.owner();
let player = continue_if_none!(players.get(player_id));
let player = players.get(player_id).unwrap();
let ship_data = player.ship_data(type_); let ship_data = player.ship_data(type_);


geometry.render_lines( geometry.render_lines(
@@ -55,8 +52,7 @@ impl<'a> System<'a> for Ships {
); );


if let ShipObstacle::Known(obstacle) = ship.obstacle() { if let ShipObstacle::Known(obstacle) = ship.obstacle() {
let obstacle_pos = continue_if_none!(positions.get(obstacle));
let obstacle_pos = obstacle_pos.get();
let obstacle_pos = positions.get(obstacle).unwrap().get();


geometry.render_lines( geometry.render_lines(
Vector4f::new(0.0, 1.0, 0.0, 0.2), Vector4f::new(0.0, 1.0, 0.0, 0.2),


+ 8
- 5
space-crush-app/src/render/fleet_move.rs View File

@@ -1,7 +1,6 @@
use shrev::{EventChannel, ReaderId}; use shrev::{EventChannel, ReaderId};
use space_crush_common::{ use space_crush_common::{
components::{MeetingPoint, Position}, components::{MeetingPoint, Position},
continue_if_none,
misc::WorldHelper, misc::WorldHelper,
systems::FleetControlEvent, systems::FleetControlEvent,
}; };
@@ -77,10 +76,14 @@ impl<'a> System<'a> for FleetMove {
} }
} }
MouseEvent::ButtonUp(button) if button == &config.input.fleet_move_button => { MouseEvent::ButtonUp(button) if button == &config.input.fleet_move_button => {
let selection = game_state.selection_mut().take();
let selection = continue_if_none!(selection);
let Selection { fleet, count } = selection;
let target = continue_if_none!(self.target_meeting_point);
let Selection { fleet, count } = match game_state.selection_mut().take() {
Some(selection) => selection,
None => continue,
};
let target = match self.target_meeting_point {
Some(target) => target,
None => continue,
};
let player = game_state.player_id(); let player = game_state.player_id();
let event = FleetControlEvent::MoveToMeetingPoint { let event = FleetControlEvent::MoveToMeetingPoint {
player, player,


+ 9
- 9
space-crush-app/src/render/fleet_select.rs View File

@@ -12,10 +12,8 @@ use shrev::{EventChannel, ReaderId};
use space_crush_common::{ use space_crush_common::{
components::{Fleet, FleetOrbiting, MeetingPoint, Position, Shape, ShipCount}, components::{Fleet, FleetOrbiting, MeetingPoint, Position, Shape, ShipCount},
constants::VECTOR_2F_POS_X, constants::VECTOR_2F_POS_X,
continue_if_none,
misc::{LogResult, WorldHelper as _}, misc::{LogResult, WorldHelper as _},
resources::Global, resources::Global,
return_if_none,
}; };
use specs::{prelude::*, ReadExpect, ReadStorage, System, World}; use specs::{prelude::*, ReadExpect, ReadStorage, System, World};


@@ -165,7 +163,10 @@ impl FleetSelect {
let r = meeting_point.max() * meeting_point.max(); let r = meeting_point.max() * meeting_point.max();
if (position.get() - pos).length_sqr() <= r { if (position.get() - pos).length_sqr() <= r {
let player_index = d.game_state.player_index(); let player_index = d.game_state.player_index();
let fleet_id = continue_if_none!(meeting_point.fleet(player_index));
let fleet_id = match meeting_point.fleet(player_index) {
Some(fleet_id) => fleet_id,
None => continue,
};


*d.game_state.selection_mut() = match selection { *d.game_state.selection_mut() = match selection {
Some(s) if s.fleet == fleet_id => { Some(s) if s.fleet == fleet_id => {
@@ -199,22 +200,21 @@ impl FleetSelect {
MouseEvent::ButtonUp(button) if button == &d.config.input.fleet_select_button => { MouseEvent::ButtonUp(button) if button == &d.config.input.fleet_select_button => {
self.select_mode = match self.select_mode { self.select_mode = match self.select_mode {
SelectMode::Simple(progress) => { SelectMode::Simple(progress) => {
continue_if_none!(d.game_state.selection_mut()).count = self.count;
d.game_state.selection_mut().as_mut().unwrap().count = self.count;


self.mouse_pos = d.input_state.mouse_pos; self.mouse_pos = d.input_state.mouse_pos;


SelectMode::SimpleClose(progress) SelectMode::SimpleClose(progress)
} }
SelectMode::Detail(progress) => { SelectMode::Detail(progress) => {
continue_if_none!(d.game_state.selection_mut()).count = self.count;
d.game_state.selection_mut().as_mut().unwrap().count = self.count;


self.mouse_pos = d.input_state.mouse_pos; self.mouse_pos = d.input_state.mouse_pos;


SelectMode::DetailClose(progress) SelectMode::DetailClose(progress)
} }
SelectMode::Init(_) if self.is_new_selection => { SelectMode::Init(_) if self.is_new_selection => {
continue_if_none!(d.game_state.selection_mut()).count =
ShipCount::all();
d.game_state.selection_mut().as_mut().unwrap().count = ShipCount::all();


SelectMode::None SelectMode::None
} }
@@ -246,7 +246,7 @@ impl FleetSelect {
} }


/* calculate values */ /* calculate values */
let selection = return_if_none!(d.game_state.selection());
let selection = d.game_state.selection().as_ref().unwrap();
let fleet_id = selection.fleet; let fleet_id = selection.fleet;
let fleet = d.fleets.get(fleet_id).unwrap(); let fleet = d.fleets.get(fleet_id).unwrap();
let fleet_orbiting = d.fleets_orbiting.get(fleet_id).unwrap(); let fleet_orbiting = d.fleets_orbiting.get(fleet_id).unwrap();
@@ -403,7 +403,7 @@ impl FleetSelect {
}; };


/* extract system data */ /* extract system data */
let selection = return_if_none!(d.game_state.selection());
let selection = d.game_state.selection().as_ref().unwrap();
let fleet_id = selection.fleet; let fleet_id = selection.fleet;
let fleet_orbiting = d let fleet_orbiting = d
.fleets_orbiting .fleets_orbiting


+ 0
- 1
space-crush-common/src/lib.rs View File

@@ -3,7 +3,6 @@ pub mod components;
pub mod constants; pub mod constants;
pub mod dispatcher; pub mod dispatcher;
pub mod error; pub mod error;
pub mod macros;
pub mod misc; pub mod misc;
pub mod resources; pub mod resources;
pub mod systems; pub mod systems;


+ 0
- 29
space-crush-common/src/macros.rs View File

@@ -1,29 +0,0 @@
#[macro_export]
macro_rules! return_if_none {
($value:expr) => {
match $value {
Some(value) => value,
None => return,
}
};
}

#[macro_export]
macro_rules! break_if_none {
($value:expr) => {
match $value {
Some(value) => value,
None => break,
}
};
}

#[macro_export]
macro_rules! continue_if_none {
($value:expr) => {
match $value {
Some(value) => value,
None => continue,
}
};
}

+ 1
- 2
space-crush-common/src/systems/fleet_orbiting_update.rs View File

@@ -8,7 +8,6 @@ use specs::{


use crate::{ use crate::{
components::{FleetOrbiting, MeetingPoint, Player, PlayerOwned}, components::{FleetOrbiting, MeetingPoint, Player, PlayerOwned},
continue_if_none,
misc::{ComponentEvent, StorageHelper, StorageHelperMut}, misc::{ComponentEvent, StorageHelper, StorageHelperMut},
}; };


@@ -123,7 +122,7 @@ impl<'a> System<'a> for FleetOrbitingUpdate {
}; };


let player_id = player_owned.owner(); let player_id = player_owned.owner();
let player = continue_if_none!(players.get(player_id));
let player = players.get(player_id).unwrap();
let player_index = player.index(); let player_index = player.index();


if old_match && !new_match { if old_match && !new_match {


+ 1
- 2
space-crush-common/src/systems/ship_movement.rs View File

@@ -5,7 +5,6 @@ use specs::{prelude::*, ParJoin, Read, ReadStorage, System, WriteStorage};
use crate::{ use crate::{
components::{Player, PlayerOwned, Position, Ship}, components::{Player, PlayerOwned, Position, Ship},
resources::Global, resources::Global,
return_if_none,
}; };


#[derive(Default)] #[derive(Default)]
@@ -38,7 +37,7 @@ impl<'a> System<'a> for ShipMovement {
let position = position.get_mut(); let position = position.get_mut();
let type_ = ship.type_(); let type_ = ship.type_();
let player_id = player_owned.owner(); let player_id = player_owned.owner();
let player = return_if_none!(players.get(player_id));
let player = players.get(player_id).unwrap();
let ship_data = player.ship_data(type_); let ship_data = player.ship_data(type_);


*position += ship.dir() * ship_data.speed * delta; *position += ship.dir() * ship_data.speed * delta;


+ 3
- 4
space-crush-common/src/systems/ships.rs View File

@@ -20,7 +20,6 @@ use crate::{
}, },
misc::{ComponentEvent, StorageHelper, StorageHelperMut}, misc::{ComponentEvent, StorageHelper, StorageHelperMut},
resources::Global, resources::Global,
return_if_none,
}; };


pub struct Ships { pub struct Ships {
@@ -134,10 +133,10 @@ impl Processor<'_> {
fleet_owned: &FleetOwned, fleet_owned: &FleetOwned,
) { ) {
let fleet_id = fleet_owned.owner(); let fleet_id = fleet_owned.owner();
let fleet_orbiting = return_if_none!(self.fleet_orbiting.get(fleet_id));
let fleet_orbiting = self.fleet_orbiting.get(fleet_id).unwrap();
let meeting_point_id = fleet_orbiting.meeting_point(); let meeting_point_id = fleet_orbiting.meeting_point();
let meeting_point = return_if_none!(self.meeting_points.get(meeting_point_id));
let meeting_point_pos = return_if_none!(self.positions.get(meeting_point_id)).get();
let meeting_point = self.meeting_points.get(meeting_point_id).unwrap();
let meeting_point_pos = self.positions.get(meeting_point_id).unwrap().get();
let ship_pos = position.get(); let ship_pos = position.get();
let target_pos = ship.target_pos(); let target_pos = ship.target_pos();
let target_dir = ship.target_dir(); let target_dir = ship.target_dir();


Loading…
Cancel
Save