Tick rate now exposed as a variable.

This commit is contained in:
Sam 2020-08-31 16:55:38 -05:00
parent a2d74b71c4
commit 8f7d45100d
3 changed files with 18 additions and 17 deletions

View File

@ -155,6 +155,7 @@ pub enum CharacterAbility {
recover_duration: Duration,
base_hps: u32,
base_dps: u32,
tick_rate: f32,
range: f32,
max_angle: f32,
lifesteal_eff: f32,
@ -521,6 +522,7 @@ impl From<&CharacterAbility> for CharacterState {
recover_duration,
base_hps,
base_dps,
tick_rate,
range,
max_angle,
lifesteal_eff,
@ -529,11 +531,11 @@ impl From<&CharacterAbility> for CharacterState {
exhausted: false,
particle_ori: None::<Vec3<f32>>,
buildup_duration: *buildup_duration,
cooldown_duration: Duration::from_millis(500),
cooldown_duration_default: Duration::from_millis(500),
cooldown_duration: Duration::default(),
recover_duration: *recover_duration,
base_hps: *base_hps,
base_dps: *base_dps,
tick_rate: *tick_rate,
range: *range,
max_angle: *max_angle,
lifesteal_eff: *lifesteal_eff,

View File

@ -308,10 +308,11 @@ impl Tool {
recover_duration: Duration::from_millis(250),
base_hps: (60.0 * self.base_power()) as u32,
base_dps: (40.0 * self.base_power()) as u32,
tick_rate: 2.0,
range: 25.0,
max_angle: 1.0,
lifesteal_eff: 0.25,
energy_regen: 10,
energy_regen: 100,
},
BasicRanged {
energy_cost: 800,

View File

@ -17,14 +17,14 @@ pub struct Data {
pub buildup_duration: Duration,
/// How long until weapon can deal another tick of damage
pub cooldown_duration: Duration,
/// Value that cooldown_duration defaults to
pub cooldown_duration_default: Duration,
/// How long the state has until exiting
pub recover_duration: Duration,
/// Base healing per second
pub base_hps: u32,
/// Base damage per second
pub base_dps: u32,
/// Ticks of damage/healing per second
pub tick_rate: f32,
/// Max range
pub range: f32,
/// Max angle (45.0 will give you a 90.0 angle window)
@ -43,8 +43,6 @@ impl CharacterBehavior for Data {
handle_move(data, &mut update, 0.4);
handle_jump(data, &mut update);
let ticks_per_sec = 1.0 / self.cooldown_duration_default.as_secs_f32();
if self.buildup_duration != Duration::default() {
// Build up
update.character = CharacterState::BasicBeam(Data {
@ -55,18 +53,18 @@ impl CharacterBehavior for Data {
.checked_sub(Duration::from_secs_f32(data.dt.0))
.unwrap_or_default(),
cooldown_duration: self.cooldown_duration,
cooldown_duration_default: self.cooldown_duration_default,
recover_duration: self.recover_duration,
base_hps: self.base_hps,
base_dps: self.base_dps,
tick_rate: self.tick_rate,
range: self.range,
max_angle: self.max_angle,
lifesteal_eff: self.lifesteal_eff,
energy_regen: self.energy_regen,
});
} else if data.inputs.primary.is_pressed() && !self.exhausted {
let damage = (self.base_dps as f32 / ticks_per_sec) as u32;
let heal = (self.base_hps as f32 / ticks_per_sec) as u32;
let damage = (self.base_dps as f32 / self.tick_rate) as u32;
let heal = (self.base_hps as f32 / self.tick_rate) as u32;
// Hit attempt
data.updater.insert(data.entity, Attacking {
base_damage: damage,
@ -85,10 +83,10 @@ impl CharacterBehavior for Data {
particle_ori: Some(*data.inputs.look_dir),
buildup_duration: self.buildup_duration,
recover_duration: self.recover_duration,
cooldown_duration: self.cooldown_duration_default,
cooldown_duration_default: self.cooldown_duration_default,
cooldown_duration: Duration::from_secs_f32(1.0 / self.tick_rate),
base_hps: self.base_hps,
base_dps: self.base_dps,
tick_rate: self.tick_rate,
range: self.range,
max_angle: self.max_angle,
lifesteal_eff: self.lifesteal_eff,
@ -105,10 +103,10 @@ impl CharacterBehavior for Data {
.cooldown_duration
.checked_sub(Duration::from_secs_f32(data.dt.0))
.unwrap_or_default(),
cooldown_duration_default: self.cooldown_duration_default,
recover_duration: self.recover_duration,
base_hps: self.base_hps,
base_dps: self.base_dps,
tick_rate: self.tick_rate,
range: self.range,
max_angle: self.max_angle,
lifesteal_eff: self.lifesteal_eff,
@ -120,10 +118,10 @@ impl CharacterBehavior for Data {
particle_ori: Some(*data.inputs.look_dir),
buildup_duration: self.buildup_duration,
recover_duration: self.recover_duration,
cooldown_duration: self.cooldown_duration_default,
cooldown_duration_default: self.cooldown_duration_default,
cooldown_duration: self.cooldown_duration,
base_hps: self.base_hps,
base_dps: self.base_dps,
tick_rate: self.tick_rate,
range: self.range,
max_angle: self.max_angle,
lifesteal_eff: self.lifesteal_eff,
@ -131,7 +129,7 @@ impl CharacterBehavior for Data {
});
// Grant energy on successful hit
let energy = (self.energy_regen as f32 / ticks_per_sec) as i32;
let energy = (self.energy_regen as f32 / self.tick_rate) as i32;
update.energy.change_by(energy, EnergySource::HitEnemy);
} else if self.recover_duration != Duration::default() {
// Recovery
@ -140,13 +138,13 @@ impl CharacterBehavior for Data {
particle_ori: Some(*data.inputs.look_dir),
buildup_duration: self.buildup_duration,
cooldown_duration: self.cooldown_duration,
cooldown_duration_default: self.cooldown_duration_default,
recover_duration: self
.recover_duration
.checked_sub(Duration::from_secs_f32(data.dt.0))
.unwrap_or_default(),
base_hps: self.base_hps,
base_dps: self.base_dps,
tick_rate: self.tick_rate,
range: self.range,
max_angle: self.max_angle,
lifesteal_eff: self.lifesteal_eff,