aboutsummaryrefslogtreecommitdiff
path: root/games/rstnode/rst-core/src/config/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'games/rstnode/rst-core/src/config/mod.rs')
-rw-r--r--games/rstnode/rst-core/src/config/mod.rs50
1 files changed, 50 insertions, 0 deletions
diff --git a/games/rstnode/rst-core/src/config/mod.rs b/games/rstnode/rst-core/src/config/mod.rs
new file mode 100644
index 000000000000..447c0fcbcc35
--- /dev/null
+++ b/games/rstnode/rst-core/src/config/mod.rs
@@ -0,0 +1,50 @@
+//! The file formats backing maps and other configs
+//!
+//! When creating maps to share with other clients, or to load into a
+//! server, these types can be constructed with the YML description
+//! format, outlined in [load_map](config::io::load_map)
+
+mod io;
+pub use io::*;
+
+use crate::data::{LinkId, NodeId};
+use serde::{Deserialize, Serialize};
+
+/// A config tree that describes a map
+#[derive(Serialize, Deserialize)]
+pub struct MapCfg {
+ /// The set of nodes
+ pub nodes: Vec<NodeCfg>,
+ /// Links connecting nodes
+ pub links: Vec<LinkCfg>,
+ /// Default spawn points (player count)
+ pub spawns: Vec<SpawnCfg>,
+}
+
+/// A single node on a map, with an x and y coordinate
+#[derive(Serialize, Deserialize)]
+pub struct NodeCfg {
+ /// Node ID
+ pub id: NodeId,
+ /// Render/world position
+ pub x: f64,
+ pub y: f64,
+}
+
+/// A link between two nodes
+#[derive(Serialize, Deserialize)]
+pub struct LinkCfg {
+ /// The link ID
+ id: LinkId,
+ /// List of connectioned nodes
+ con: (NodeId, NodeId),
+}
+
+/// Special configuration for a node to act as a player spawn point
+#[derive(Serialize, Deserialize)]
+pub struct SpawnCfg {
+ /// The node of the spawn point
+ pub n_id: NodeId,
+ /// At what number of players is this spawn available?
+ pub max_players: usize,
+}