@@ -1,6 +1,5 @@ | |||
use space_crush_common::{ | |||
components::{Fleet, MeetingPoint, Position}, | |||
continue_if_none, | |||
misc::LogResult, | |||
}; | |||
use specs::{prelude::*, ReadExpect, ReadStorage, System, World}; | |||
@@ -58,8 +57,11 @@ impl<'a> System<'a> for Fleets { | |||
gl::enable(gl::BLEND); | |||
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_equation(gl::FUNC_SUBTRACT); | |||
@@ -1,8 +1,5 @@ | |||
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 crate::resources::Geometry; | |||
@@ -38,7 +35,7 @@ impl<'a> System<'a> for Ships { | |||
let ship_pos = position.get(); | |||
let type_ = ship.type_(); | |||
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_); | |||
geometry.render_lines( | |||
@@ -55,8 +52,7 @@ impl<'a> System<'a> for Ships { | |||
); | |||
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( | |||
Vector4f::new(0.0, 1.0, 0.0, 0.2), | |||
@@ -1,7 +1,6 @@ | |||
use shrev::{EventChannel, ReaderId}; | |||
use space_crush_common::{ | |||
components::{MeetingPoint, Position}, | |||
continue_if_none, | |||
misc::WorldHelper, | |||
systems::FleetControlEvent, | |||
}; | |||
@@ -77,10 +76,14 @@ impl<'a> System<'a> for FleetMove { | |||
} | |||
} | |||
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 event = FleetControlEvent::MoveToMeetingPoint { | |||
player, | |||
@@ -12,10 +12,8 @@ use shrev::{EventChannel, ReaderId}; | |||
use space_crush_common::{ | |||
components::{Fleet, FleetOrbiting, MeetingPoint, Position, Shape, ShipCount}, | |||
constants::VECTOR_2F_POS_X, | |||
continue_if_none, | |||
misc::{LogResult, WorldHelper as _}, | |||
resources::Global, | |||
return_if_none, | |||
}; | |||
use specs::{prelude::*, ReadExpect, ReadStorage, System, World}; | |||
@@ -165,7 +163,10 @@ impl FleetSelect { | |||
let r = meeting_point.max() * meeting_point.max(); | |||
if (position.get() - pos).length_sqr() <= r { | |||
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 { | |||
Some(s) if s.fleet == fleet_id => { | |||
@@ -199,22 +200,21 @@ impl FleetSelect { | |||
MouseEvent::ButtonUp(button) if button == &d.config.input.fleet_select_button => { | |||
self.select_mode = match self.select_mode { | |||
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; | |||
SelectMode::SimpleClose(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; | |||
SelectMode::DetailClose(progress) | |||
} | |||
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 | |||
} | |||
@@ -246,7 +246,7 @@ impl FleetSelect { | |||
} | |||
/* 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 = d.fleets.get(fleet_id).unwrap(); | |||
let fleet_orbiting = d.fleets_orbiting.get(fleet_id).unwrap(); | |||
@@ -403,7 +403,7 @@ impl FleetSelect { | |||
}; | |||
/* 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_orbiting = d | |||
.fleets_orbiting | |||
@@ -3,7 +3,6 @@ pub mod components; | |||
pub mod constants; | |||
pub mod dispatcher; | |||
pub mod error; | |||
pub mod macros; | |||
pub mod misc; | |||
pub mod resources; | |||
pub mod systems; | |||
@@ -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, | |||
} | |||
}; | |||
} |
@@ -8,7 +8,6 @@ use specs::{ | |||
use crate::{ | |||
components::{FleetOrbiting, MeetingPoint, Player, PlayerOwned}, | |||
continue_if_none, | |||
misc::{ComponentEvent, StorageHelper, StorageHelperMut}, | |||
}; | |||
@@ -123,7 +122,7 @@ impl<'a> System<'a> for FleetOrbitingUpdate { | |||
}; | |||
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(); | |||
if old_match && !new_match { | |||
@@ -5,7 +5,6 @@ use specs::{prelude::*, ParJoin, Read, ReadStorage, System, WriteStorage}; | |||
use crate::{ | |||
components::{Player, PlayerOwned, Position, Ship}, | |||
resources::Global, | |||
return_if_none, | |||
}; | |||
#[derive(Default)] | |||
@@ -38,7 +37,7 @@ impl<'a> System<'a> for ShipMovement { | |||
let position = position.get_mut(); | |||
let type_ = ship.type_(); | |||
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_); | |||
*position += ship.dir() * ship_data.speed * delta; | |||
@@ -20,7 +20,6 @@ use crate::{ | |||
}, | |||
misc::{ComponentEvent, StorageHelper, StorageHelperMut}, | |||
resources::Global, | |||
return_if_none, | |||
}; | |||
pub struct Ships { | |||
@@ -134,10 +133,10 @@ impl Processor<'_> { | |||
fleet_owned: &FleetOwned, | |||
) { | |||
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 = 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 target_pos = ship.target_pos(); | |||
let target_dir = ship.target_dir(); | |||