"get by name, tag" functions; update todo
This commit is contained in:
@@ -4,9 +4,9 @@ use serde_derive::{Serialize, Deserialize};
|
||||
|
||||
#[derive(Debug, Eq, PartialEq)]
|
||||
pub struct Entity {
|
||||
name: String,
|
||||
image: String,
|
||||
tags: Vec<String>,
|
||||
pub name: String,
|
||||
pub image: String,
|
||||
pub tags: Vec<String>,
|
||||
}
|
||||
|
||||
impl Entity {
|
||||
|
||||
75
src/lib.rs
75
src/lib.rs
@@ -112,8 +112,8 @@ pub struct Game {
|
||||
images: Vec<Image>,
|
||||
tiles: Vec<Tile>,
|
||||
entities: Vec<Entity>,
|
||||
// variables: Vec<Variable>,
|
||||
// triggers: HashMap<String, ScriptCollection>,
|
||||
// variables: Vec<Variable>,
|
||||
// triggers: HashMap<String, ScriptCollection>,
|
||||
music: Vec<Music>,
|
||||
}
|
||||
|
||||
@@ -121,9 +121,7 @@ pub struct Game {
|
||||
pub struct GameParseError;
|
||||
|
||||
impl Game {
|
||||
pub fn from(path: String) -> Result<Game, GameParseError> {
|
||||
let path = PathBuf::from(path);
|
||||
|
||||
pub fn from(path: PathBuf) -> Result<Game, GameParseError> {
|
||||
let mut images = Vec::new();
|
||||
let mut tiles = Vec::new();
|
||||
let mut entities = Vec::new();
|
||||
@@ -200,4 +198,71 @@ impl Game {
|
||||
|
||||
Ok(Game { config, images, tiles, palettes, music, entities })
|
||||
}
|
||||
|
||||
// todo Result<&Image>?
|
||||
pub fn get_image_by_name(&self, name: String) -> Option<&Image> {
|
||||
for image in self.images.iter() {
|
||||
if image.name == name {
|
||||
return Some(&image);
|
||||
}
|
||||
}
|
||||
|
||||
None
|
||||
}
|
||||
|
||||
pub fn get_entities_by_tag(&self, tag: &String) -> Vec<&Entity> {
|
||||
let mut entities = Vec::new();
|
||||
|
||||
for entity in self.entities.iter() {
|
||||
if entity.tags.contains(tag) {
|
||||
entities.push(entity);
|
||||
}
|
||||
}
|
||||
|
||||
entities
|
||||
}
|
||||
|
||||
// todo Result<&Entity>?
|
||||
pub fn get_entity_by_name(&self, name: String) -> Option<&Entity> {
|
||||
for entity in self.entities.iter() {
|
||||
if entity.name == name {
|
||||
return Some(&entity);
|
||||
}
|
||||
}
|
||||
|
||||
None
|
||||
}
|
||||
|
||||
// todo Result<&Music>?
|
||||
pub fn get_music_by_name(&self, name: String) -> Option<&Music> {
|
||||
for music in self.music.iter() {
|
||||
if music.name == name {
|
||||
return Some(&music);
|
||||
}
|
||||
}
|
||||
|
||||
None
|
||||
}
|
||||
|
||||
// todo Result<&Palette>?
|
||||
pub fn get_palette_by_name(&self, name: String) -> Option<&Palette> {
|
||||
for palette in self.palettes.iter() {
|
||||
if palette.name == name {
|
||||
return Some(&palette);
|
||||
}
|
||||
}
|
||||
|
||||
None
|
||||
}
|
||||
|
||||
// todo Result<&Tile>?
|
||||
pub fn get_tile_by_name(&self, name: String) -> Option<&Tile> {
|
||||
for tile in self.tiles.iter() {
|
||||
if tile.name == name {
|
||||
return Some(&tile);
|
||||
}
|
||||
}
|
||||
|
||||
None
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user