@@ -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); | ||||
@@ -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), | ||||
@@ -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, | ||||
@@ -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 | ||||
@@ -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; | ||||
@@ -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::{ | 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 { | ||||
@@ -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; | ||||
@@ -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(); | ||||