aboutsummaryrefslogtreecommitdiff
path: root/stockton-types/src/ent_map.rs
blob: 213e481f20bd31703f616616d640a2d6d9c143bb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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);
			}
		}
	}
}