reimplement avatar as a plain sprite; handle sprite items as these are mostly needed for avatar

This commit is contained in:
2020-04-26 13:31:20 +01:00
parent ed6552f39c
commit cf1ca6f1b5
6 changed files with 40 additions and 135 deletions

View File

@@ -1,4 +1,4 @@
use crate::{Avatar, Dialogue, Ending, Font, Item, Palette, Room, Sprite, TextDirection, Tile, ToBase36, Variable, transform_line_endings, segments_from_string, is_string_numeric};
use crate::{Dialogue, Ending, Font, Item, Palette, Room, Sprite, TextDirection, Tile, ToBase36, Variable, transform_line_endings, segments_from_string, is_string_numeric};
use std::error::Error;
use loe::TransformMode;
@@ -76,7 +76,7 @@ pub struct Game {
pub palettes: Vec<Palette>,
pub rooms: Vec<Room>,
pub tiles: Vec<Tile>,
pub avatar: Avatar,
pub avatar: Sprite,
pub sprites: Vec<Sprite>,
pub items: Vec<Item>,
pub dialogues: Vec<Dialogue>,
@@ -127,7 +127,7 @@ impl Game {
let mut palettes: Vec<Palette> = Vec::new();
let mut rooms: Vec<Room> = Vec::new();
let mut tiles: Vec<Tile> = Vec::new();
let mut avatar: Option<Avatar> = None; // unwrap this later
let mut avatar: Option<Sprite> = None; // unwrap this later
let mut sprites: Vec<Sprite> = Vec::new();
let mut items: Vec<Item> = Vec::new();
@@ -158,8 +158,8 @@ impl Game {
} else if segment.starts_with("TIL") {
tiles.push(Tile::from(segment));
} else if segment.starts_with("SPR A") {
avatar = Some(Avatar::from(segment).unwrap());
} else if segment.starts_with("SPR") {
avatar = Some(Sprite::from(segment));
} else if segment.starts_with("SPR ") {
sprites.push(Sprite::from(segment));
} else if segment.starts_with("ITM") {
items.push(Item::from(segment));
@@ -227,7 +227,7 @@ impl ToString for Game {
}
}
segments.push(self.avatar.to_string());
segments.push(self.avatar.to_string().replace("SPR a", "SPR A"));
for sprite in &self.sprites {
if !is_string_numeric(sprite.id.to_base36()) {