52 lines
1.6 KiB
Rust
52 lines
1.6 KiB
Rust
mod actions;
|
||
mod collision;
|
||
mod map_file;
|
||
mod movement;
|
||
mod scripting;
|
||
|
||
use std::collections::BTreeMap;
|
||
use crate::archetype::Archetype;
|
||
use crate::board::Board;
|
||
use crate::object_def::ObjectDef;
|
||
use crate::utils::Player;
|
||
use crate::game::GameState;
|
||
|
||
/// Builds a 1×1 board with a single object that optionally references a
|
||
/// script, plus the given `(name, source)` script table entries.
|
||
fn board_with_object(object_script: Option<&str>, scripts: &[(&str, &str)]) -> Board {
|
||
let mut object = ObjectDef::new(0, 0);
|
||
object.script_name = object_script.map(str::to_string);
|
||
Board {
|
||
name: "test".into(),
|
||
width: 1,
|
||
height: 1,
|
||
cells: vec![(Archetype::Empty.default_glyph(), Archetype::Empty)],
|
||
floor: vec![Archetype::Empty.default_glyph()],
|
||
floor_spec: None,
|
||
player: Player { x: 0, y: 0 },
|
||
objects: BTreeMap::from([(1, object)]),
|
||
next_object_id: 2,
|
||
portals: Vec::new(),
|
||
font: None,
|
||
zoom: 1,
|
||
scripts: scripts.iter().map(|(k, v)| (k.to_string(), v.to_string())).collect(),
|
||
board_script_name: None,
|
||
load_errors: Vec::new(),
|
||
}
|
||
}
|
||
|
||
/// Returns an `ObjectDef` at `(x, y)` bound to the named script.
|
||
fn scripted_object(x: usize, y: usize, script: &str) -> ObjectDef {
|
||
let mut o = ObjectDef::new(x, y);
|
||
o.script_name = Some(script.to_string());
|
||
o
|
||
}
|
||
|
||
/// Flattens each log line into a single string for easy assertions.
|
||
fn log_texts(game: &GameState) -> Vec<String> {
|
||
game.log
|
||
.iter()
|
||
.map(|line| line.spans.iter().map(|s| s.text.as_str()).collect())
|
||
.collect()
|
||
}
|