diff options
author | tcmal <me@aria.rip> | 2024-08-25 17:44:19 +0100 |
---|---|---|
committer | tcmal <me@aria.rip> | 2024-08-25 17:44:19 +0100 |
commit | b2fbd5116b66a3560639bdcbad914c52b43e878e (patch) | |
tree | a6d9e2883810a40e0b5b547018e7bf966a5a117c /stockton-types/src | |
parent | 3f8cef9bbbc58aff9045d1b7d729313384b8ae89 (diff) |
feat(types): add macro for generating entity mappers
Diffstat (limited to 'stockton-types/src')
-rw-r--r-- | stockton-types/src/ent_map.rs | 35 | ||||
-rw-r--r-- | stockton-types/src/lib.rs | 2 |
2 files changed, 37 insertions, 0 deletions
diff --git a/stockton-types/src/ent_map.rs b/stockton-types/src/ent_map.rs new file mode 100644 index 0000000..213e481 --- /dev/null +++ b/stockton-types/src/ent_map.rs @@ -0,0 +1,35 @@ +// Copyright (C) Oscar Shrimpton 2019 + +// This program is free software: you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation, either version 3 of the License, or (at your option) +// any later version. + +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. + +// You should have received a copy of the GNU General Public License along +// with this program. If not, see <http://www.gnu.org/licenses/>. + +/// Convenience function for creating mappers for `World::new()`. +#[macro_export] +macro_rules! ent_map { + ( $ ( $name:expr => $type:ident [ $( $key:expr => $target:ident ),* ] ),* ) => { + { + use stockton_bsp::lumps::entities::Entity as BSPEntity; + use stockton_types::Entity; + |ent: &BSPEntity| -> Box<dyn Entity> { + $( + if ent.attributes["classname"] == $name { + return Box::new($type { + $( $target : ent.attributes[$key].into() ),* + }); + } + );* + panic!("Unrecognised Entity type: {:?}", ent); + } + } + } +}
\ No newline at end of file diff --git a/stockton-types/src/lib.rs b/stockton-types/src/lib.rs index 7e6c9ea..0adf8a5 100644 --- a/stockton-types/src/lib.rs +++ b/stockton-types/src/lib.rs @@ -25,6 +25,8 @@ pub use entity_store::{EntityStore, Entity}; pub mod world; pub use world::World; +pub mod ent_map; + /// Alias for convenience pub type Vector2 = na::base::Vector2<f32>; /// Alias for convenience |