mindustry logic execution, map- and schematic- parsing and rendering
Diffstat (limited to 'src/block/mod.rs')
-rw-r--r--src/block/mod.rs36
1 files changed, 26 insertions, 10 deletions
diff --git a/src/block/mod.rs b/src/block/mod.rs
index e2e07da..bcd475e 100644
--- a/src/block/mod.rs
+++ b/src/block/mod.rs
@@ -1,3 +1,4 @@
+use std::any::Any;
use std::borrow::Cow;
use std::collections::HashMap;
use std::collections::hash_map::Entry;
@@ -21,15 +22,15 @@ pub trait BlockLogic
{
fn get_size(&self) -> u8;
- fn is_symmetric(&self) -> bool
- {
- true
- }
+ fn is_symmetric(&self) -> bool;
- fn state_from_i32(&self, _config: i32) -> DynData
- {
- DynData::Empty
- }
+ fn data_from_i32(&self, config: i32) -> DynData;
+
+ fn deserialize_state(&self, data: DynData) -> Option<Box<dyn Any>>;
+
+ fn clone_state(&self, state: &dyn Any) -> Box<dyn Any>;
+
+ fn serialize_state(&self, state: &dyn Any) -> DynData;
}
pub struct Block
@@ -60,9 +61,24 @@ impl Block
self.logic.is_symmetric()
}
- pub fn state_from_i32(&self, config: i32) -> DynData
+ pub fn data_from_i32(&self, config: i32) -> DynData
+ {
+ self.logic.data_from_i32(config)
+ }
+
+ pub fn deserialize_state(&self, data: DynData) -> Option<Box<dyn Any>>
+ {
+ self.logic.deserialize_state(data)
+ }
+
+ pub fn clone_state(&self, state: &dyn Any) -> Box<dyn Any>
+ {
+ self.logic.clone_state(state)
+ }
+
+ pub fn serialize_state(&self, state: &dyn Any) -> DynData
{
- self.logic.state_from_i32(config)
+ self.logic.serialize_state(state)
}
}