implement ToBase36 for u64; room id to u64; sprite id to u64; tile id to u64; sprite.dialogue -> sprite.dialogue_id
This commit is contained in:
parent
f424c49301
commit
c7f1d7220c
|
@ -1,4 +1,4 @@
|
||||||
use crate::{Position, from_base36, to_base36};
|
use crate::{Position, from_base36, ToBase36};
|
||||||
|
|
||||||
#[derive(Debug, Eq, PartialEq)]
|
#[derive(Debug, Eq, PartialEq)]
|
||||||
pub enum Transition {
|
pub enum Transition {
|
||||||
|
@ -74,7 +74,7 @@ impl ToString for Exit {
|
||||||
fn to_string(&self) -> String {
|
fn to_string(&self) -> String {
|
||||||
format!(
|
format!(
|
||||||
"{} {}{}",
|
"{} {}{}",
|
||||||
to_base36(self.room_id),
|
self.room_id.to_base36(),
|
||||||
self.position.to_string(),
|
self.position.to_string(),
|
||||||
self.effect.to_string()
|
self.effect.to_string()
|
||||||
)
|
)
|
||||||
|
|
17
src/lib.rs
17
src/lib.rs
|
@ -76,11 +76,22 @@ fn test_from_base36() {
|
||||||
assert_eq!(from_base36("11"), 37);
|
assert_eq!(from_base36("11"), 37);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn to_base36(input: u64) -> String {
|
/// this doesn't work inside ToBase36 for some reason
|
||||||
format!("{}", radix_36(input))
|
fn to_base36(int: u64) -> String {
|
||||||
|
format!("{}", radix_36(int))
|
||||||
|
}
|
||||||
|
|
||||||
|
pub trait ToBase36 {
|
||||||
|
fn to_base36(&self) -> String;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl ToBase36 for u64 {
|
||||||
|
fn to_base36(&self) -> String {
|
||||||
|
to_base36(*self)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_to_base36() {
|
fn test_to_base36() {
|
||||||
assert_eq!(to_base36(37), "11");
|
assert_eq!((37 as u64).to_base36(), "11");
|
||||||
}
|
}
|
||||||
|
|
14
src/mock.rs
14
src/mock.rs
|
@ -69,7 +69,7 @@ pub fn avatar() -> Avatar {
|
||||||
|
|
||||||
pub fn sprite() -> Sprite {
|
pub fn sprite() -> Sprite {
|
||||||
Sprite {
|
Sprite {
|
||||||
id: "a".to_string(),
|
id: 10,
|
||||||
name: Some("hatch".to_string()),
|
name: Some("hatch".to_string()),
|
||||||
animation_frames: vec![
|
animation_frames: vec![
|
||||||
Image {
|
Image {
|
||||||
|
@ -85,8 +85,8 @@ pub fn sprite() -> Sprite {
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
dialogue: Some("SPR_0".to_string()),
|
dialogue_id: Some("SPR_0".to_string()),
|
||||||
room: "4".to_string(),
|
room_id: 4,
|
||||||
position: Position {
|
position: Position {
|
||||||
x: 9,
|
x: 9,
|
||||||
y: 7
|
y: 7
|
||||||
|
@ -208,7 +208,7 @@ pub fn game_default() -> Game {
|
||||||
],
|
],
|
||||||
tiles: vec![
|
tiles: vec![
|
||||||
Tile {
|
Tile {
|
||||||
id: "a".to_string(),
|
id: 10,
|
||||||
name: None,
|
name: None,
|
||||||
wall: false,
|
wall: false,
|
||||||
animation_frames: vec![
|
animation_frames: vec![
|
||||||
|
@ -247,7 +247,7 @@ pub fn game_default() -> Game {
|
||||||
},
|
},
|
||||||
sprites: vec![
|
sprites: vec![
|
||||||
Sprite {
|
Sprite {
|
||||||
id: "a".to_string(),
|
id: 10,
|
||||||
name: None,
|
name: None,
|
||||||
animation_frames: vec![
|
animation_frames: vec![
|
||||||
Image {
|
Image {
|
||||||
|
@ -263,8 +263,8 @@ pub fn game_default() -> Game {
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
dialogue: Some("SPR_0".to_string()),
|
dialogue_id: Some("SPR_0".to_string()),
|
||||||
room: "0".to_string(),
|
room_id: 0,
|
||||||
position: Position { x: 8, y: 12 }
|
position: Position { x: 8, y: 12 }
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
use crate::colour::Colour;
|
use crate::colour::Colour;
|
||||||
use crate::{from_base36, to_base36};
|
use crate::{from_base36, ToBase36};
|
||||||
|
|
||||||
#[derive(Debug, Eq, PartialEq)]
|
#[derive(Debug, Eq, PartialEq)]
|
||||||
pub struct Palette {
|
pub struct Palette {
|
||||||
|
@ -44,7 +44,7 @@ impl ToString for Palette {
|
||||||
}
|
}
|
||||||
colours.pop();
|
colours.pop();
|
||||||
|
|
||||||
format!("PAL {}\n{}{}", to_base36(self.id), name, colours)
|
format!("PAL {}\n{}{}", self.id.to_base36(), name, colours)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::{Exit, ExitInstance, Instance, mock, Position, from_base36, to_base36};
|
use crate::{Exit, ExitInstance, Instance, mock, Position, from_base36, ToBase36};
|
||||||
|
|
||||||
#[derive(Debug, Eq, PartialEq)]
|
#[derive(Debug, Eq, PartialEq)]
|
||||||
pub struct Room {
|
pub struct Room {
|
||||||
|
@ -123,13 +123,13 @@ impl ToString for Room {
|
||||||
|
|
||||||
format!(
|
format!(
|
||||||
"ROOM {}\n{}{}{}{}{}\nPAL {}",
|
"ROOM {}\n{}{}{}{}{}\nPAL {}",
|
||||||
to_base36(self.id),
|
self.id.to_base36(),
|
||||||
tiles,
|
tiles,
|
||||||
if self.name.as_ref().is_some() { format!("\nNAME {}", self.name.as_ref().unwrap()) } else { "".to_string() },
|
if self.name.as_ref().is_some() { format!("\nNAME {}", self.name.as_ref().unwrap()) } else { "".to_string() },
|
||||||
items,
|
items,
|
||||||
exits,
|
exits,
|
||||||
endings,
|
endings,
|
||||||
to_base36(self.palette_id)
|
self.palette_id.to_base36()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
use crate::{AnimationFrames, Image, Position, mock};
|
use crate::{AnimationFrames, Image, Position, mock, from_base36, ToBase36};
|
||||||
|
|
||||||
#[derive(Debug, Eq, PartialEq)]
|
#[derive(Debug, Eq, PartialEq)]
|
||||||
pub struct Sprite {
|
pub struct Sprite {
|
||||||
pub id: String, // lowercase base36
|
pub id: u64,
|
||||||
pub name: Option<String>,
|
pub name: Option<String>,
|
||||||
pub animation_frames: Vec<Image>,
|
pub animation_frames: Vec<Image>,
|
||||||
pub dialogue: Option<String>, /// dialogue id
|
pub dialogue_id: Option<String>,
|
||||||
pub room: String, /// room id
|
pub room_id: u64,
|
||||||
pub position: Position,
|
pub position: Position,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,10 +14,10 @@ impl From<String> for Sprite {
|
||||||
fn from(string: String) -> Sprite {
|
fn from(string: String) -> Sprite {
|
||||||
let mut lines: Vec<&str> = string.lines().collect();
|
let mut lines: Vec<&str> = string.lines().collect();
|
||||||
|
|
||||||
let id = lines[0].replace("SPR ", "");
|
let id = from_base36(&lines[0].replace("SPR ", ""));
|
||||||
let mut name = None;
|
let mut name = None;
|
||||||
let mut dialogue = None;
|
let mut dialogue_id: Option<String> = None;
|
||||||
let mut room: Option<String> = None;
|
let mut room_id: Option<u64> = None;
|
||||||
let mut position: Option<Position> = None;
|
let mut position: Option<Position> = None;
|
||||||
|
|
||||||
for _ in 0..3 {
|
for _ in 0..3 {
|
||||||
|
@ -26,11 +26,11 @@ impl From<String> for Sprite {
|
||||||
if last_line.starts_with("NAME") {
|
if last_line.starts_with("NAME") {
|
||||||
name = Some(last_line.replace("NAME ", "").to_string());
|
name = Some(last_line.replace("NAME ", "").to_string());
|
||||||
} else if last_line.starts_with("DLG") {
|
} else if last_line.starts_with("DLG") {
|
||||||
dialogue = Some(last_line.replace("DLG ", "").to_string());
|
dialogue_id = Some(last_line.replace("DLG ", "").to_string());
|
||||||
} else if last_line.starts_with("POS") {
|
} else if last_line.starts_with("POS") {
|
||||||
let last_line = last_line.replace("POS ", "");
|
let last_line = last_line.replace("POS ", "");
|
||||||
let room_position: Vec<&str> = last_line.split(' ').collect();
|
let room_position: Vec<&str> = last_line.split(' ').collect();
|
||||||
room = Some(room_position[0].to_string());
|
room_id = Some(from_base36(&room_position[0]));
|
||||||
position = Some(Position::from(room_position[1].to_string()));
|
position = Some(Position::from(room_position[1].to_string()));
|
||||||
} else {
|
} else {
|
||||||
lines.push(last_line);
|
lines.push(last_line);
|
||||||
|
@ -38,7 +38,7 @@ impl From<String> for Sprite {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let room = room.unwrap();
|
let room_id = room_id.unwrap();
|
||||||
let position = position.unwrap();
|
let position = position.unwrap();
|
||||||
|
|
||||||
// todo dedupe
|
// todo dedupe
|
||||||
|
@ -48,7 +48,7 @@ impl From<String> for Sprite {
|
||||||
Image::from(frame.to_string())
|
Image::from(frame.to_string())
|
||||||
}).collect();
|
}).collect();
|
||||||
|
|
||||||
Sprite { id, name, animation_frames, dialogue, room, position }
|
Sprite { id, name, animation_frames, dialogue_id, room_id, position }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,11 +57,11 @@ impl ToString for Sprite {
|
||||||
fn to_string(&self) -> String {
|
fn to_string(&self) -> String {
|
||||||
format!(
|
format!(
|
||||||
"SPR {}\n{}{}{}\nPOS {} {}",
|
"SPR {}\n{}{}{}\nPOS {} {}",
|
||||||
self.id,
|
self.id.to_base36(),
|
||||||
self.animation_frames.to_string(),
|
self.animation_frames.to_string(),
|
||||||
if self.name.as_ref().is_some() { format!("\nNAME {}", self.name.as_ref().unwrap()) } else { "".to_string() },
|
if self.name.as_ref().is_some() { format!("\nNAME {}", self.name.as_ref().unwrap()) } else { "".to_string() },
|
||||||
if self.dialogue.as_ref().is_some() { format!("\nDLG {}", self.dialogue.as_ref().unwrap()) } else { "".to_string() },
|
if self.dialogue_id.as_ref().is_some() { format!("\nDLG {}", self.dialogue_id.as_ref().unwrap()) } else { "".to_string() },
|
||||||
self.room,
|
self.room_id.to_base36(),
|
||||||
self.position.to_string(),
|
self.position.to_string(),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
12
src/tile.rs
12
src/tile.rs
|
@ -1,10 +1,10 @@
|
||||||
use crate::AnimationFrames;
|
use crate::{AnimationFrames, from_base36, ToBase36};
|
||||||
use crate::image::Image;
|
use crate::image::Image;
|
||||||
use crate::mock;
|
use crate::mock;
|
||||||
|
|
||||||
#[derive(Debug, Eq, PartialEq)]
|
#[derive(Debug, Eq, PartialEq)]
|
||||||
pub struct Tile {
|
pub struct Tile {
|
||||||
pub id: String, // base36 string
|
pub id: u64,
|
||||||
pub name: Option<String>,
|
pub name: Option<String>,
|
||||||
pub wall: bool,
|
pub wall: bool,
|
||||||
pub animation_frames: Vec<Image>,
|
pub animation_frames: Vec<Image>,
|
||||||
|
@ -15,7 +15,7 @@ impl From<String> for Tile {
|
||||||
fn from(string: String) -> Tile {
|
fn from(string: String) -> Tile {
|
||||||
let mut lines: Vec<&str> = string.lines().collect();
|
let mut lines: Vec<&str> = string.lines().collect();
|
||||||
|
|
||||||
let id = lines[0].replace("TIL ", "");
|
let id = from_base36(&lines[0].replace("TIL ", ""));
|
||||||
|
|
||||||
let last_line = lines.pop().unwrap();
|
let last_line = lines.pop().unwrap();
|
||||||
let wall = match last_line == "WAL true" {
|
let wall = match last_line == "WAL true" {
|
||||||
|
@ -50,7 +50,7 @@ impl ToString for Tile {
|
||||||
fn to_string(&self) -> String {
|
fn to_string(&self) -> String {
|
||||||
format!(
|
format!(
|
||||||
"TIL {}\n{}{}{}",
|
"TIL {}\n{}{}{}",
|
||||||
self.id,
|
self.id.to_base36(),
|
||||||
self.animation_frames.to_string(),
|
self.animation_frames.to_string(),
|
||||||
if self.name.as_ref().is_some() { format!("\nNAME {}", self.name.as_ref().unwrap())} else {"".to_string() },
|
if self.name.as_ref().is_some() { format!("\nNAME {}", self.name.as_ref().unwrap())} else {"".to_string() },
|
||||||
if self.wall {"\nWAL true"} else {""}
|
if self.wall {"\nWAL true"} else {""}
|
||||||
|
@ -63,7 +63,7 @@ fn test_tile_from_string() {
|
||||||
let output = Tile::from(include_str!("../test/resources/tile").to_string());
|
let output = Tile::from(include_str!("../test/resources/tile").to_string());
|
||||||
|
|
||||||
let expected = Tile {
|
let expected = Tile {
|
||||||
id: "z".to_string(),
|
id: 35,
|
||||||
name: Some("concrete 1".to_string()),
|
name: Some("concrete 1".to_string()),
|
||||||
wall: true,
|
wall: true,
|
||||||
animation_frames: vec![
|
animation_frames: vec![
|
||||||
|
@ -79,7 +79,7 @@ fn test_tile_from_string() {
|
||||||
#[test]
|
#[test]
|
||||||
fn test_tile_to_string() {
|
fn test_tile_to_string() {
|
||||||
let output = Tile {
|
let output = Tile {
|
||||||
id: "7a".to_string(),
|
id: 262,
|
||||||
name: Some("chequers".to_string()),
|
name: Some("chequers".to_string()),
|
||||||
wall: false,
|
wall: false,
|
||||||
animation_frames: vec![
|
animation_frames: vec![
|
||||||
|
|
Loading…
Reference in New Issue