add unit drops to drop table
This commit is contained in:
parent
eea9511f4a
commit
bdf9824662
@ -12,12 +12,11 @@ use std::path::PathBuf;
|
|||||||
use std::io::Read;
|
use std::io::Read;
|
||||||
use serde::{Serialize, Deserialize};
|
use serde::{Serialize, Deserialize};
|
||||||
use rand::{Rng, SeedableRng};
|
use rand::{Rng, SeedableRng};
|
||||||
use rand::distributions::{WeightedIndex, Distribution};
|
|
||||||
|
|
||||||
use crate::ship::monster::MonsterType;
|
use crate::ship::monster::MonsterType;
|
||||||
use crate::ship::room::{Difficulty, Episode};
|
use crate::ship::room::{Difficulty, Episode};
|
||||||
use crate::entity::item::ItemDetail;
|
use crate::entity::item::ItemDetail;
|
||||||
use crate::entity::item::weapon::{WeaponType, Attribute, WeaponAttribute, WeaponSpecial};
|
use crate::entity::item::weapon::WeaponType;
|
||||||
use crate::entity::item::armor::ArmorType;
|
use crate::entity::item::armor::ArmorType;
|
||||||
use crate::entity::item::shield::ShieldType;
|
use crate::entity::item::shield::ShieldType;
|
||||||
use crate::entity::item::unit::UnitType;
|
use crate::entity::item::unit::UnitType;
|
||||||
@ -27,6 +26,7 @@ use crate::entity::character::SectionID;
|
|||||||
use crate::ship::drops::generic_weapon::GenericWeaponTable;
|
use crate::ship::drops::generic_weapon::GenericWeaponTable;
|
||||||
use crate::ship::drops::generic_armor::GenericArmorTable;
|
use crate::ship::drops::generic_armor::GenericArmorTable;
|
||||||
use crate::ship::drops::generic_shield::GenericShieldTable;
|
use crate::ship::drops::generic_shield::GenericShieldTable;
|
||||||
|
use crate::ship::drops::generic_unit::GenericUnitTable;
|
||||||
|
|
||||||
|
|
||||||
fn data_file_path(episode: Episode, difficulty: Difficulty, section_id: SectionID, filename: &str) -> PathBuf {
|
fn data_file_path(episode: Episode, difficulty: Difficulty, section_id: SectionID, filename: &str) -> PathBuf {
|
||||||
@ -127,6 +127,7 @@ struct DropTable<R: Rng + SeedableRng> {
|
|||||||
weapon_table: GenericWeaponTable,
|
weapon_table: GenericWeaponTable,
|
||||||
armor_table: GenericArmorTable,
|
armor_table: GenericArmorTable,
|
||||||
shield_table: GenericShieldTable,
|
shield_table: GenericShieldTable,
|
||||||
|
unit_table: GenericUnitTable,
|
||||||
rng: R,
|
rng: R,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -149,6 +150,7 @@ impl<R: Rng + SeedableRng> DropTable<R> {
|
|||||||
weapon_table: GenericWeaponTable::new(episode, difficulty, section_id),
|
weapon_table: GenericWeaponTable::new(episode, difficulty, section_id),
|
||||||
armor_table: GenericArmorTable::new(episode, difficulty, section_id),
|
armor_table: GenericArmorTable::new(episode, difficulty, section_id),
|
||||||
shield_table: GenericShieldTable::new(episode, difficulty, section_id),
|
shield_table: GenericShieldTable::new(episode, difficulty, section_id),
|
||||||
|
unit_table: GenericUnitTable::new(episode, difficulty, section_id),
|
||||||
rng: R::from_entropy(),
|
rng: R::from_entropy(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -161,30 +163,17 @@ impl<R: Rng + SeedableRng> DropTable<R> {
|
|||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
||||||
fn generate_armor(&self) -> Option<ItemDetail> {
|
|
||||||
None
|
|
||||||
}
|
|
||||||
|
|
||||||
fn generate_shield(&self) -> Option<ItemDetail> {
|
|
||||||
None
|
|
||||||
}
|
|
||||||
|
|
||||||
fn generate_unit(&self) -> Option<ItemDetail> {
|
|
||||||
None
|
|
||||||
}
|
|
||||||
|
|
||||||
fn generate_typed_drop(&mut self, map_area: &MapVariantType, monster: &MonsterDropStats) -> Option<ItemDetail> {
|
fn generate_typed_drop(&mut self, map_area: &MapVariantType, monster: &MonsterDropStats) -> Option<ItemDetail> {
|
||||||
match monster.drop_type {
|
match monster.drop_type {
|
||||||
MonsterDropType::Weapon => self.weapon_table.get_drop(map_area, &mut self.rng),
|
MonsterDropType::Weapon => self.weapon_table.get_drop(map_area, &mut self.rng),
|
||||||
MonsterDropType::Armor => self.armor_table.get_drop(map_area, &mut self.rng),
|
MonsterDropType::Armor => self.armor_table.get_drop(map_area, &mut self.rng),
|
||||||
MonsterDropType::Shield => self.shield_table.get_drop(map_area, &mut self.rng),
|
MonsterDropType::Shield => self.shield_table.get_drop(map_area, &mut self.rng),
|
||||||
MonsterDropType::Unit => self.generate_unit(),
|
MonsterDropType::Unit => self.unit_table.get_drop(map_area, &mut self.rng),
|
||||||
MonsterDropType::None => None,
|
MonsterDropType::None => None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_drop(&mut self, map_area: &MapVariantType, monster: &MonsterType) -> Option<ItemDetail> {
|
fn get_drop(&mut self, map_area: &MapVariantType, monster: &MonsterType) -> Option<ItemDetail> {
|
||||||
//let mut rng = rand::thread_rng();
|
|
||||||
let monster_stat = *self.monster_stats.get(monster)?;
|
let monster_stat = *self.monster_stats.get(monster)?;
|
||||||
|
|
||||||
let drop_anything = self.rng.gen_range(0, 100);
|
let drop_anything = self.rng.gen_range(0, 100);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user