From 45bedf11d2de0b4ec363143a51b0947657285dd5 Mon Sep 17 00:00:00 2001 From: Timothy Warren Date: Mon, 3 Jan 2022 09:39:52 -0500 Subject: [PATCH] Add vendor NPC type --- raws/spawns.json | 10 +++++----- src/components.rs | 3 +++ src/main.rs | 1 + src/player.rs | 7 +++++-- src/raws/rawmaster.rs | 1 + src/saveload_system.rs | 2 ++ 6 files changed, 17 insertions(+), 7 deletions(-) diff --git a/raws/spawns.json b/raws/spawns.json index 1d22e10..5719515 100644 --- a/raws/spawns.json +++ b/raws/spawns.json @@ -265,7 +265,7 @@ "power": 4 }, "vision_range": 4, - "ai": "bystander" + "ai": "vendor" }, { "name": "Shady Salesman", @@ -283,7 +283,7 @@ "power": 4 }, "vision_range": 4, - "ai": "bystander" + "ai": "vendor" }, { "name": "Patron", @@ -355,7 +355,7 @@ "power": 4 }, "vision_range": 4, - "ai": "bystander" + "ai": "vendor" }, { "name": "Clothier", @@ -373,7 +373,7 @@ "power": 4 }, "vision_range": 4, - "ai": "bystander" + "ai": "vendor" }, { "name": "Alchemist", @@ -391,7 +391,7 @@ "power": 4 }, "vision_range": 4, - "ai": "bystander" + "ai": "vendor" }, { "name": "Mom", diff --git a/src/components.rs b/src/components.rs index effaa4a..20c0e27 100644 --- a/src/components.rs +++ b/src/components.rs @@ -240,6 +240,9 @@ pub struct Door { #[derive(Component, Debug, Serialize, Deserialize, Clone)] pub struct Bystander {} +#[derive(Component, Debug, Serialize, Deserialize, Clone)] +pub struct Vendor {} + // Serialization helper code. We need to implement ConvertSaveLoad for each type that contains an // Entity. diff --git a/src/main.rs b/src/main.rs index 44bce10..cf015b2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -534,6 +534,7 @@ fn main() -> ::rltk::BError { BlocksVisibility, Door, Bystander, + Vendor, ); gs.ecs.insert(SimpleMarkerAllocator::::new()); diff --git a/src/player.rs b/src/player.rs index 02f9e36..a30ba52 100644 --- a/src/player.rs +++ b/src/player.rs @@ -5,7 +5,7 @@ use ::specs::prelude::*; use crate::components::{ BlocksTile, BlocksVisibility, CombatStats, Door, EntityMoved, HungerClock, HungerState, Item, - Monster, Player, Position, Renderable, Viewshed, WantsToMelee, WantsToPickupItem, + Monster, Player, Position, Renderable, Vendor, Viewshed, WantsToMelee, WantsToPickupItem, }; use crate::game_log::GameLog; use crate::{Bystander, Map, RunState, State, TileType}; @@ -24,6 +24,7 @@ pub fn try_move_player(delta_x: i32, delta_y: i32, ecs: &mut World) { let mut blocks_movement = ecs.write_storage::(); let mut renderables = ecs.write_storage::(); let bystanders = ecs.read_storage::(); + let vendors = ecs.read_storage::(); let mut swap_entities: Vec<(Entity, i32, i32)> = Vec::new(); @@ -40,7 +41,9 @@ pub fn try_move_player(delta_x: i32, delta_y: i32, ecs: &mut World) { let destination_idx = map.xy_idx(pos.x + delta_x, pos.y + delta_y); for potential_target in map.tile_content[destination_idx].iter() { - if bystanders.get(*potential_target).is_some() { + let bystander = bystanders.get(*potential_target); + let vendor = vendors.get(*potential_target); + if bystander.is_some() || vendor.is_some() { // Note that we want to move the bystander swap_entities.push((*potential_target, pos.x, pos.y)); diff --git a/src/raws/rawmaster.rs b/src/raws/rawmaster.rs index 4620970..9ef6189 100644 --- a/src/raws/rawmaster.rs +++ b/src/raws/rawmaster.rs @@ -215,6 +215,7 @@ pub fn spawn_named_mob( match mob_template.ai.as_ref() { "melee" => eb = eb.with(Monster {}), "bystander" => eb = eb.with(Bystander {}), + "vendor" => eb = eb.with(Vendor {}), _ => {} }; diff --git a/src/saveload_system.rs b/src/saveload_system.rs index b46aea5..1d3735f 100644 --- a/src/saveload_system.rs +++ b/src/saveload_system.rs @@ -90,6 +90,7 @@ pub fn save_game(ecs: &mut World) { BlocksVisibility, Door, Bystander, + Vendor, ); } @@ -182,6 +183,7 @@ pub fn load_game(ecs: &mut World) { BlocksVisibility, Door, Bystander, + Vendor, ); }