From f0ce0888100effc669c2a207d5cd5995953a0ae1 Mon Sep 17 00:00:00 2001 From: timokoesters Date: Tue, 24 Mar 2020 20:31:54 +0100 Subject: [PATCH] Add lights and gravity again --- common/src/comp/ability.rs | 10 +++++++++- common/src/comp/inventory/item.rs | 19 ++++++++++++++++++- common/src/states/basic_ranged.rs | 16 +++++++++++----- 3 files changed, 38 insertions(+), 7 deletions(-) diff --git a/common/src/comp/ability.rs b/common/src/comp/ability.rs index ee9580abe0..908c844911 100644 --- a/common/src/comp/ability.rs +++ b/common/src/comp/ability.rs @@ -1,5 +1,7 @@ use crate::{ - comp::{Body, CharacterState, EnergySource, Item, Projectile, StateUpdate}, + comp::{ + Body, CharacterState, EnergySource, Gravity, Item, LightEmitter, Projectile, StateUpdate, + }, states::*, sys::character_behavior::JoinData, }; @@ -22,6 +24,8 @@ pub enum CharacterAbility { recover_duration: Duration, projectile: Projectile, projectile_body: Body, + projectile_light: Option, + projectile_gravity: Option, }, Boost { duration: Duration, @@ -122,6 +126,8 @@ impl From<&CharacterAbility> for CharacterState { recover_duration, projectile, projectile_body, + projectile_light, + projectile_gravity, energy_cost: _, } => CharacterState::BasicRanged(basic_ranged::Data { exhausted: false, @@ -130,6 +136,8 @@ impl From<&CharacterAbility> for CharacterState { recover_duration: *recover_duration, projectile: projectile.clone(), projectile_body: *projectile_body, + projectile_light: *projectile_light, + projectile_gravity: *projectile_gravity, }), CharacterAbility::Boost { duration, only_up } => CharacterState::Boost(boost::Data { duration: *duration, diff --git a/common/src/comp/inventory/item.rs b/common/src/comp/inventory/item.rs index 7d4ea70906..608341b3f2 100644 --- a/common/src/comp/inventory/item.rs +++ b/common/src/comp/inventory/item.rs @@ -2,7 +2,8 @@ use crate::{ assets::{self, Asset}, comp::{ body::{humanoid, object}, - projectile, Body, CharacterAbility, HealthChange, HealthSource, Projectile, + projectile, Body, CharacterAbility, Gravity, HealthChange, HealthSource, LightEmitter, + Projectile, }, effect::Effect, terrain::{Block, BlockKind}, @@ -107,6 +108,8 @@ impl ToolData { owner: None, }, projectile_body: Body::Object(object::Body::Arrow), + projectile_light: None, + projectile_gravity: Some(Gravity(0.1)), }], Dagger(_) => vec![BasicMelee { buildup_duration: Duration::from_millis(100), @@ -146,6 +149,12 @@ impl ToolData { owner: None, }, projectile_body: Body::Object(object::Body::BoltFire), + projectile_light: Some(LightEmitter { + col: (0.72, 0.11, 0.11).into(), + ..Default::default() + }), + + projectile_gravity: None, }, BasicRanged { energy_cost: 400, @@ -168,6 +177,12 @@ impl ToolData { owner: None, }, projectile_body: Body::Object(object::Body::BoltFire), + projectile_light: Some(LightEmitter { + col: (0.72, 0.11, 0.11).into(), + ..Default::default() + }), + + projectile_gravity: None, }, ], Shield(_) => vec![BasicBlock], @@ -194,6 +209,8 @@ impl ToolData { owner: None, }, projectile_body: Body::Object(object::Body::ArrowSnake), + projectile_light: None, + projectile_gravity: None, }], }, Empty => vec![], diff --git a/common/src/states/basic_ranged.rs b/common/src/states/basic_ranged.rs index 4301d0668b..25c965785d 100644 --- a/common/src/states/basic_ranged.rs +++ b/common/src/states/basic_ranged.rs @@ -1,5 +1,5 @@ use crate::{ - comp::{Body, CharacterState, Gravity, Projectile, StateUpdate}, + comp::{Body, CharacterState, Gravity, LightEmitter, Projectile, StateUpdate}, event::ServerEvent, states::utils::*, sys::character_behavior::*, @@ -14,10 +14,10 @@ pub struct Data { pub prepare_timer: Duration, /// How long the state has until exiting pub recover_duration: Duration, - /// Projectile pub projectile: Projectile, - /// Projectile pub projectile_body: Body, + pub projectile_light: Option, + pub projectile_gravity: Option, /// Whether the attack fired already pub exhausted: bool, } @@ -39,6 +39,8 @@ impl CharacterBehavior for Data { recover_duration: self.recover_duration, projectile: self.projectile.clone(), projectile_body: self.projectile_body, + projectile_light: self.projectile_light, + projectile_gravity: self.projectile_gravity, exhausted: false, }); } else if !self.exhausted { @@ -49,9 +51,9 @@ impl CharacterBehavior for Data { entity: data.entity, dir: data.inputs.look_dir, body: self.projectile_body, - light: None, projectile, - gravity: Some(Gravity(0.1)), + light: self.projectile_light, + gravity: self.projectile_gravity, }); update.character = CharacterState::BasicRanged(Data { @@ -60,6 +62,8 @@ impl CharacterBehavior for Data { recover_duration: self.recover_duration, projectile: self.projectile.clone(), projectile_body: self.projectile_body, + projectile_light: self.projectile_light, + projectile_gravity: self.projectile_gravity, exhausted: true, }); } else if self.recover_duration != Duration::default() { @@ -73,6 +77,8 @@ impl CharacterBehavior for Data { .unwrap_or_default(), projectile: self.projectile.clone(), projectile_body: self.projectile_body, + projectile_light: self.projectile_light, + projectile_gravity: self.projectile_gravity, exhausted: true, }); return update;