aboutsummaryrefslogtreecommitdiff
path: root/stockton-types/src
diff options
context:
space:
mode:
authortcmal <me@aria.rip>2024-08-25 17:44:19 +0100
committertcmal <me@aria.rip>2024-08-25 17:44:19 +0100
commitb2fbd5116b66a3560639bdcbad914c52b43e878e (patch)
treea6d9e2883810a40e0b5b547018e7bf966a5a117c /stockton-types/src
parent3f8cef9bbbc58aff9045d1b7d729313384b8ae89 (diff)
feat(types): add macro for generating entity mappers
Diffstat (limited to 'stockton-types/src')
-rw-r--r--stockton-types/src/ent_map.rs35
-rw-r--r--stockton-types/src/lib.rs2
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