Changed how buffs were constructed on projectiles.

This commit is contained in:
Sam 2020-11-08 21:09:33 -06:00
parent f4244ecbaf
commit abf7301a89
6 changed files with 50 additions and 48 deletions

View File

@ -12,18 +12,17 @@ BasicRanged(
Knockback(Away(10.0)),
RewardEnergy(50),
Vanish,
/*projectile::Effect::Buff {
buff: Buff::new(
BuffKind::Bleeding,
BuffData {
strength: 20.0 * self.base_power(),
duration: Some(Duration::from_secs(5)),
},
vec![BuffCategory::Physical],
BuffSource::Unknown,
Buff(
buff: (
kind: Bleeding,
data: (
strength: 20.0,
duration: Some(5), // secs
),
cat_ids: [Physical],
),
chance: Some(0.10),
},*/
),
],
time_left: 15, // seconds
owner: None,

View File

@ -14,18 +14,17 @@ RepeaterRanged(
)),
Knockback(Away(10.0)),
Vanish,
/*projectile::Effect::Buff {
buff: Buff::new(
BuffKind::Bleeding,
BuffData {
strength: 20.0 * self.base_power(),
duration: Some(Duration::from_secs(5)),
},
vec![BuffCategory::Physical],
BuffSource::Unknown,
Buff(
buff: (
kind: Bleeding,
data: (
strength: 20.0,
duration: Some(5), // secs
),
cat_ids: [Physical],
),
chance: Some(0.10),
},*/
),
],
time_left: 15, // seconds
owner: None,

View File

@ -4,10 +4,10 @@
use crate::{
comp::{
body::object,
buff::{Buff, BuffCategory, BuffData, BuffKind, BuffSource},
buff::{BuffCategory, BuffData, BuffKind},
projectile, Body, CharacterAbility, Gravity, LightEmitter, Projectile,
},
effect::Effect,
effect::{BuffEffect, Effect},
states::combo_melee,
Damage, DamageSource, Explosion, GroupTarget, Knockback, RadiusEffect,
};
@ -324,15 +324,14 @@ impl Tool {
projectile::Effect::RewardEnergy(50),
projectile::Effect::Vanish,
projectile::Effect::Buff {
buff: Buff::new(
BuffKind::Bleeding,
BuffData {
buff: BuffEffect {
kind: BuffKind::Bleeding,
data: BuffData {
strength: 20.0 * self.base_power(),
duration: Some(Duration::from_secs(5)),
},
vec![BuffCategory::Physical],
BuffSource::Unknown,
),
cat_ids: vec![BuffCategory::Physical],
},
chance: Some(0.10),
},
],
@ -380,15 +379,14 @@ impl Tool {
projectile::Effect::Knockback(Knockback::Away(10.0)),
projectile::Effect::Vanish,
projectile::Effect::Buff {
buff: Buff::new(
BuffKind::Bleeding,
BuffData {
buff: BuffEffect {
kind: BuffKind::Bleeding,
data: BuffData {
strength: 20.0 * self.base_power(),
duration: Some(Duration::from_secs(5)),
},
vec![BuffCategory::Physical],
BuffSource::Unknown,
),
cat_ids: vec![BuffCategory::Physical],
},
chance: Some(0.10),
},
],

View File

@ -1,4 +1,4 @@
use crate::{comp::Buff, sync::Uid, Damage, Explosion, GroupTarget, Knockback};
use crate::{effect::BuffEffect, sync::Uid, Damage, Explosion, GroupTarget, Knockback};
use serde::{Deserialize, Serialize};
use specs::{Component, FlaggedStorage};
use specs_idvs::IdvStorage;
@ -13,7 +13,10 @@ pub enum Effect {
Vanish,
Stick,
Possess,
Buff { buff: Buff, chance: Option<f32> },
Buff {
buff: BuffEffect,
chance: Option<f32>,
},
}
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]

View File

@ -1,9 +1,10 @@
use crate::{
comp::{
buff::{Buff, BuffCategory, BuffData, BuffKind, BuffSource},
buff::{BuffCategory, BuffData, BuffKind},
projectile, Body, CharacterState, EnergyChange, EnergySource, Gravity, LightEmitter,
Projectile, StateUpdate,
},
effect::BuffEffect,
event::ServerEvent,
states::utils::*,
sys::character_behavior::{CharacterBehavior, JoinData},
@ -105,15 +106,14 @@ impl CharacterBehavior for Data {
projectile::Effect::Knockback(Knockback::Away(knockback)),
projectile::Effect::Vanish,
projectile::Effect::Buff {
buff: Buff::new(
BuffKind::Bleeding,
BuffData {
buff: BuffEffect {
kind: BuffKind::Bleeding,
data: BuffData {
strength: damage.value / 5.0,
duration: Some(Duration::from_secs(5)),
},
vec![BuffCategory::Physical],
BuffSource::Unknown,
),
cat_ids: vec![BuffCategory::Physical],
},
chance: Some(0.10),
},
],

View File

@ -1,6 +1,6 @@
use crate::{
comp::{
buff::{BuffChange, BuffSource},
buff::{Buff, BuffChange, BuffSource},
projectile, EnergyChange, EnergySource, Group, HealthSource, Loadout, Ori, PhysicsState,
Pos, Projectile, Vel,
},
@ -176,10 +176,13 @@ impl<'a> System<'a> for Sys {
uid_allocator.retrieve_entity_internal(other.into())
{
if chance.map_or(true, |c| thread_rng().gen::<f32>() < c) {
let mut buff = buff.clone();
if let Some(uid) = projectile.owner {
buff.source = BuffSource::Character { by: uid };
}
let source = if let Some(owner) = projectile.owner {
BuffSource::Character { by: owner }
} else {
BuffSource::Unknown
};
let buff =
Buff::new(buff.kind, buff.data, buff.cat_ids, source);
server_emitter.emit(ServerEvent::Buff {
entity,
buff_change: BuffChange::Add(buff),