mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Fix Traveller names
- Previously RtSim were created with automatic name for body generated from EntityConfig, not from RtSim body. Now RtSim body is set for EntityConfig.
This commit is contained in:
parent
05b85a00e2
commit
b5d9e4e4a9
@ -14,21 +14,21 @@ use serde::Deserialize;
|
||||
use vek::*;
|
||||
|
||||
#[derive(Debug, Deserialize, Clone)]
|
||||
enum NameKind {
|
||||
pub enum NameKind {
|
||||
Name(String),
|
||||
Automatic,
|
||||
Uninit,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize, Clone)]
|
||||
enum BodyBuilder {
|
||||
pub enum BodyBuilder {
|
||||
RandomWith(String),
|
||||
Exact(Body),
|
||||
Uninit,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize, Clone)]
|
||||
enum AlignmentMark {
|
||||
pub enum AlignmentMark {
|
||||
Alignment(Alignment),
|
||||
Uninit,
|
||||
}
|
||||
@ -38,7 +38,7 @@ impl Default for AlignmentMark {
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize, Clone)]
|
||||
enum Hands {
|
||||
pub enum Hands {
|
||||
TwoHanded(ItemSpec),
|
||||
Paired(ItemSpec),
|
||||
Mix {
|
||||
@ -53,7 +53,7 @@ impl Default for Hands {
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize, Clone)]
|
||||
enum Meta {
|
||||
pub enum Meta {
|
||||
LoadoutAsset(String),
|
||||
SkillSetAsset(String),
|
||||
}
|
||||
@ -92,16 +92,17 @@ pub struct EntityConfig {
|
||||
/// Can be Name(String) with given name
|
||||
/// or Automatic which will call automatic name depend on Body
|
||||
/// or Uninit (means it should be specified somewhere in code)
|
||||
// Hidden, because its behaviour depends on `body` field.
|
||||
name: NameKind,
|
||||
|
||||
/// Body
|
||||
/// Can be Exact (Body with all fields e.g BodyType, Species, Hair color and
|
||||
/// such) or RandomWith (will generate random body or species)
|
||||
/// or Uninit (means it should be specified somewhere in code)
|
||||
body: BodyBuilder,
|
||||
pub body: BodyBuilder,
|
||||
|
||||
/// Alignment, can be Uninit
|
||||
alignment: AlignmentMark,
|
||||
pub alignment: AlignmentMark,
|
||||
|
||||
/// Loot
|
||||
/// See LootSpec in lottery
|
||||
@ -117,14 +118,14 @@ pub struct EntityConfig {
|
||||
// TODO: better name for this?
|
||||
// wielding? equipped? what do you think Tigers are wielding?
|
||||
// should we use this field for animals without visible weapons at all?
|
||||
hands: Hands,
|
||||
pub hands: Hands,
|
||||
|
||||
/// Meta Info for optional fields
|
||||
/// Possible fields:
|
||||
/// LoadoutAsset(String) with asset_specifier for loadout
|
||||
/// SkillSetAsset(String) with asset_specifier for skillset
|
||||
#[serde(default)]
|
||||
meta: Vec<Meta>,
|
||||
pub meta: Vec<Meta>,
|
||||
}
|
||||
|
||||
impl assets::Asset for EntityConfig {
|
||||
@ -134,10 +135,16 @@ impl assets::Asset for EntityConfig {
|
||||
}
|
||||
|
||||
impl EntityConfig {
|
||||
pub fn from_asset_expect(asset_specifier: &str) -> EntityConfig {
|
||||
pub fn from_asset_expect(asset_specifier: &str) -> Self {
|
||||
Self::load_owned(asset_specifier)
|
||||
.unwrap_or_else(|e| panic!("Failed to load {}. Error: {}", asset_specifier, e))
|
||||
}
|
||||
|
||||
pub fn with_body(mut self, body: BodyBuilder) -> Self {
|
||||
self.body = body;
|
||||
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
/// Return all entity config specifiers
|
||||
@ -193,14 +200,15 @@ impl EntityInfo {
|
||||
}
|
||||
}
|
||||
|
||||
/// Helper function for applying config from asset
|
||||
pub fn with_asset_expect(self, asset_specifier: &str) -> Self {
|
||||
let config = EntityConfig::load_expect(asset_specifier).read().clone();
|
||||
|
||||
self.with_entity_config(config, Some(asset_specifier))
|
||||
}
|
||||
|
||||
// helper function to apply config
|
||||
fn with_entity_config(mut self, config: EntityConfig, config_asset: Option<&str>) -> Self {
|
||||
/// Evaluate and apply EntityConfig
|
||||
pub fn with_entity_config(mut self, config: EntityConfig, config_asset: Option<&str>) -> Self {
|
||||
let EntityConfig {
|
||||
name,
|
||||
body,
|
||||
|
@ -5,7 +5,7 @@ use crate::sys::terrain::NpcData;
|
||||
use common::{
|
||||
comp,
|
||||
event::{EventBus, ServerEvent},
|
||||
generation::EntityInfo,
|
||||
generation::{BodyBuilder, EntityConfig, EntityInfo},
|
||||
resources::{DeltaTime, Time},
|
||||
terrain::TerrainGrid,
|
||||
};
|
||||
@ -127,15 +127,17 @@ impl<'a> System<'a> for Sys {
|
||||
rtsim_entity,
|
||||
}
|
||||
} else {
|
||||
let entity_config = entity.get_entity_config();
|
||||
let entity_config_path = entity.get_entity_config();
|
||||
let mut loadout_rng = entity.loadout_rng();
|
||||
let ad_hoc_loadout = entity.get_adhoc_loadout();
|
||||
// Body is rewritten so that body parameters
|
||||
// are consistent between reifications
|
||||
let entity_config = EntityConfig::from_asset_expect(entity_config_path)
|
||||
.with_body(BodyBuilder::Exact(body));
|
||||
|
||||
let entity_info = EntityInfo::at(pos.0)
|
||||
.with_asset_expect(entity_config)
|
||||
.with_entity_config(entity_config, Some(entity_config_path))
|
||||
.with_lazy_loadout(ad_hoc_loadout)
|
||||
.with_body(body)
|
||||
.with_health_scaling(10);
|
||||
match NpcData::from_entity_info(entity_info, &mut loadout_rng) {
|
||||
NpcData::Data {
|
||||
|
Loading…
Reference in New Issue
Block a user