Add chapter: 18

This commit is contained in:
2022-01-28 21:21:29 +01:00
parent 0e2c91dd12
commit cb17a9c356
12 changed files with 286 additions and 49 deletions

View File

@@ -2,11 +2,13 @@ use specs::prelude::*;
use crate::components::{CombatStats, Name, SufferDamage, WantsToMelee};
use crate::gamelog::GameLog;
use crate::{DefenseBonus, Equipped, MeleePowerBonus};
use crate::particle_system::ParticleBuilder;
use crate::{DefenseBonus, Equipped, MeleePowerBonus, Position};
pub struct MeleeCombatSystem {}
impl<'a> System<'a> for MeleeCombatSystem {
#[allow(clippy::complexity)]
type SystemData = (
Entities<'a>,
WriteExpect<'a, GameLog>,
@@ -17,6 +19,8 @@ impl<'a> System<'a> for MeleeCombatSystem {
ReadStorage<'a, MeleePowerBonus>,
ReadStorage<'a, DefenseBonus>,
ReadStorage<'a, Equipped>,
WriteExpect<'a, ParticleBuilder>,
ReadStorage<'a, Position>,
);
fn run(&mut self, data: Self::SystemData) {
@@ -30,6 +34,8 @@ impl<'a> System<'a> for MeleeCombatSystem {
melee_bonus,
defense_bonus,
equipped,
mut particle_builder,
positions,
) = data;
for (entity, wants_melee, name, stats) in
@@ -58,6 +64,17 @@ impl<'a> System<'a> for MeleeCombatSystem {
}
}
if let Some(pos) = positions.get(wants_melee.target) {
particle_builder.request(
pos.x,
pos.y,
rltk::RGB::named(rltk::ORANGE),
rltk::RGB::named(rltk::BLACK),
rltk::to_cp437('‼'),
200.0,
);
}
let damage = i32::max(
0,
(stats.power + offensive_bonus) - (target_stats.defense + defensive_bonus),