Maraiah/source/rozinante/editor/state.rs

83 lines
1.5 KiB
Rust
Raw Normal View History

2019-03-27 14:02:15 -07:00
//! Map editor state.
2019-03-27 11:07:33 -07:00
use super::block;
2019-03-31 11:58:36 -07:00
use crate::marathon::{machdr, wad};
2019-03-27 11:07:33 -07:00
2019-03-27 14:02:15 -07:00
impl OpenMap
2019-03-27 11:07:33 -07:00
{
2019-03-31 11:58:36 -07:00
pub(super) fn open_buf(b: &[u8]) -> Self
{
// TODO: handle errors gracefully
let b = &b[machdr::try_mac_header(b)..];
let wad = wad::read_wad(b).unwrap();
let ent = wad.entries.iter().nth(0).unwrap().1;
let info = ent.chunks.iter().find_map(|cnk| {
match cnk {
wad::Chunk::Minf(info) => Some(info),
_ => None,
}
}).unwrap().clone();
let block = block::Block{info};
dbg!(&block);
Self{blocks: vec![block],
tools: Self::default_tools()}
}
pub(super) fn cur_block(&self) -> &block::Block
2019-03-27 11:07:33 -07:00
{
self.blocks.last().unwrap()
}
2019-03-31 11:58:36 -07:00
pub(super) fn cur_block_mut(&mut self) -> &mut block::Block
2019-03-27 11:07:33 -07:00
{
self.blocks.last_mut().unwrap()
}
2019-03-31 11:58:36 -07:00
pub(super) fn tool(&self) -> &Tool
{
&self.tools.0
}
pub(super) fn set_tool(&mut self, t: Tool) -> &Tool
{
self.tools.1 = self.tools.0.clone();
self.tools.0 = t;
&self.tools.1
}
const fn default_tools() -> (Tool, Tool) {(Tool::Points, Tool::Lines)}
2019-03-27 11:07:33 -07:00
}
2019-03-27 14:02:15 -07:00
impl Default for OpenMap
2019-03-27 11:07:33 -07:00
{
#[inline]
fn default() -> Self
{
Self{blocks: vec![block::Block::default()],
2019-03-31 11:58:36 -07:00
tools: Self::default_tools()}
2019-03-27 11:07:33 -07:00
}
}
/// The state of an opened map editor.
2019-03-31 11:58:36 -07:00
pub(super) struct OpenMap
2019-03-27 11:07:33 -07:00
{
2019-03-31 11:58:36 -07:00
blocks: Vec<block::Block>,
tools: (Tool, Tool),
2019-03-27 11:07:33 -07:00
}
/// A tool in the map editor.
2019-03-31 11:58:36 -07:00
#[derive(Clone, Debug)]
2019-03-27 11:07:33 -07:00
pub(super) enum Tool
{
Points,
Lines,
Polygons,
}
// EOF