aboutsummaryrefslogtreecommitdiff
path: root/server/src/entity/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/entity/mod.rs')
-rw-r--r--server/src/entity/mod.rs13
1 files changed, 13 insertions, 0 deletions
diff --git a/server/src/entity/mod.rs b/server/src/entity/mod.rs
index d8fa5654..7180d1a7 100644
--- a/server/src/entity/mod.rs
+++ b/server/src/entity/mod.rs
@@ -16,6 +16,7 @@
*/
pub mod bot;
+pub mod campaign;
pub mod conveyor;
pub mod customers;
pub mod environment_effect;
@@ -24,6 +25,7 @@ pub mod player_portal;
use crate::data::ItemTileRegistry;
use anyhow::{anyhow, Result};
+use campaign::Map;
use conveyor::Conveyor;
use customers::Customers;
use environment_effect::{EnvironmentController, EnvironmentEffect, EnvironmentEffectController};
@@ -45,6 +47,7 @@ pub struct EntityContext<'a> {
pub packet_out: &'a mut VecDeque<PacketC>,
pub packet_in: &'a mut VecDeque<PacketS>,
pub score_changed: &'a mut bool,
+ pub load_map: &'a mut Option<String>,
pub dt: f32,
}
@@ -95,6 +98,10 @@ pub enum EntityDecl {
to: Vec2,
},
Customers {},
+ Map {
+ name: String,
+ location: Option<Vec2>,
+ },
EnvironmentEffect(EnvironmentEffect),
Environment(Vec<String>),
}
@@ -136,6 +143,12 @@ pub fn construct_entity(
cooldown: 0.,
})
}
+ EntityDecl::Map { name, location } => Box::new(Map {
+ location: location
+ .or(pos.map(|p| p.as_vec2() + 0.5))
+ .ok_or(anyhow!("no location"))?,
+ name,
+ }),
EntityDecl::Customers {} => Box::new(Customers::new()?),
EntityDecl::EnvironmentEffect(config) => Box::new(EnvironmentEffectController::new(config)),
EntityDecl::Environment(names) => Box::new(EnvironmentController(names)),