- commit
- d35eabf503c565a1af21151b5d1c82ffdfd1f1a7
- parent
- 958497ea76510fa4ce9007cd07eed14882adda4e
- Author
- Tobias Bengfort <tobias.bengfort@posteo.de>
- Date
- 2023-03-29 06:04
rm WeaponType
Diffstat
| M | src/game.rs | 13 | ++++--------- |
| M | src/weapons.rs | 115 | +++++++++++++++++++++++++++---------------------------------- |
2 files changed, 55 insertions, 73 deletions
diff --git a/src/game.rs b/src/game.rs
@@ -68,12 +68,7 @@ impl Player {
68 68 health_max: 50.0,
69 69 health_recover: 0.0,
70 70 power: 10.0,
71 -1 weapons: vec![
72 -1 weapons::Weapon::new(&weapons::AXE),
73 -1 weapons::Weapon::new(&weapons::KNIFE),
74 -1 weapons::Weapon::new(&weapons::STAR),
75 -1 weapons::Weapon::new(&weapons::WIND),
76 -1 ],
-1 71 weapons: weapons::create_weapons(),
77 72 damage_radius: 30.0,
78 73 diamond_radius: 15.0,
79 74 xp: 0.0,
@@ -177,7 +172,7 @@ impl Game {
177 172 fn move_projectiles(&mut self, dt: f32) {
178 173 for weapon in self.player.weapons.iter_mut() {
179 174 for projectile in weapon.projectiles.iter_mut() {
180 -1 (weapon.t._move)(projectile, &self.player.p, weapon.speed, dt);
-1 175 (weapon._move)(projectile, &self.player.p, weapon.speed, dt);
181 176 }
182 177 }
183 178 }
@@ -263,7 +258,7 @@ impl Game {
263 258 }
264 259 for weapon in self.player.weapons.iter() {
265 260 for projectile in weapon.projectiles.iter() {
266 -1 let projectile_size = enemy.t.size + weapon.t.size;
-1 261 let projectile_size = enemy.t.size + weapon.size;
267 262 if projectile.p.in_radius(&enemy.p, projectile_size) {
268 263 enemy.health -= weapon.damage * self.player.power * dt;
269 264 }
@@ -378,7 +373,7 @@ impl Game {
378 373 win.sprite(
379 374 projectile.p.x + dx,
380 375 projectile.p.y + dy,
381 -1 weapon.t.sprite,
-1 376 weapon.sprite,
382 377 projectile.dir,
383 378 );
384 379 }
diff --git a/src/weapons.rs b/src/weapons.rs
@@ -1,45 +1,23 @@ 1 1 use crate::game::{Dir, Pos}; 2 2 use crate::sprites; 3 34 -1 pub struct WeaponType {5 -1 pub base_speed: f32,6 -1 pub base_damage: f32,7 -1 pub base_cooldown: f32,8 -1 pub base_amount: u8,9 -1 pub size: f32,10 -1 pub sprite: &'static sprites::Sprite,11 -1 pub _move: fn(&mut Projectile, &Pos, speed: f32, dt: f32) -> (),12 -1 }13 -114 4 pub struct Projectile { 15 5 pub p: Pos, 16 6 pub dir: Dir, 17 7 } 18 8 19 9 pub struct Weapon { -1 10 pub sprite: &'static sprites::Sprite, -1 11 pub _move: fn(&mut Projectile, &Pos, speed: f32, dt: f32) -> (), 20 12 pub speed: f32, 21 13 pub damage: f32, 22 14 pub cooldown: f32, -1 15 pub size: f32, 23 16 pub amount: u8, 24 17 pub last: f32,25 -1 pub t: &'static WeaponType,26 18 pub projectiles: Vec<Projectile>, 27 19 } 28 2029 -1 impl Weapon {30 -1 pub fn new(t: &'static WeaponType) -> Self {31 -1 return Self {32 -1 speed: t.base_speed,33 -1 damage: t.base_damage,34 -1 cooldown: t.base_cooldown,35 -1 amount: t.base_amount,36 -1 last: 0.0,37 -1 t: t,38 -1 projectiles: vec![],39 -1 };40 -1 }41 -1 }42 -143 21 pub fn move_straight(projectile: &mut Projectile, _center: &Pos, speed: f32, dt: f32) { 44 22 match projectile.dir { 45 23 Dir::Up => projectile.p.y -= speed * dt, @@ -96,42 +74,51 @@ pub fn move_spiral(projectile: &mut Projectile, center: &Pos, speed: f32, dt: f3 96 74 }; 97 75 } 98 7699 -1 pub const AXE: WeaponType = WeaponType {100 -1 base_speed: 150.0,101 -1 base_damage: 50.0,102 -1 base_cooldown: 10.0,103 -1 base_amount: 2,104 -1 size: 7.0,105 -1 sprite: &sprites::AXE,106 -1 _move: move_parabola,107 -1 };108 -1109 -1 pub const KNIFE: WeaponType = WeaponType {110 -1 base_speed: 200.0,111 -1 base_damage: 30.0,112 -1 base_cooldown: 4.0,113 -1 base_amount: 1,114 -1 size: 6.0,115 -1 sprite: &sprites::KNIFE,116 -1 _move: move_straight,117 -1 };118 -1119 -1 pub const STAR: WeaponType = WeaponType {120 -1 base_speed: 250.0,121 -1 base_damage: 20.0,122 -1 base_cooldown: 3.0,123 -1 base_amount: 3,124 -1 size: 6.0,125 -1 sprite: &sprites::STAR,126 -1 _move: move_diagonal,127 -1 };128 -1129 -1 pub const WIND: WeaponType = WeaponType {130 -1 base_speed: 100.0,131 -1 base_damage: 40.0,132 -1 base_cooldown: 9.0,133 -1 base_amount: 1,134 -1 size: 8.0,135 -1 sprite: &sprites::WIND,136 -1 _move: move_spiral,137 -1 };-1 77 pub fn create_weapons() -> Vec<Weapon> { -1 78 return vec![ -1 79 Weapon { -1 80 sprite: &sprites::AXE, -1 81 _move: move_parabola, -1 82 speed: 150.0, -1 83 damage: 50.0, -1 84 cooldown: 10.0, -1 85 size: 7.0, -1 86 last: 0.0, -1 87 amount: 0, -1 88 projectiles: vec![], -1 89 }, -1 90 Weapon { -1 91 sprite: &sprites::KNIFE, -1 92 _move: move_straight, -1 93 speed: 200.0, -1 94 damage: 30.0, -1 95 cooldown: 4.0, -1 96 size: 6.0, -1 97 last: 0.0, -1 98 amount: 0, -1 99 projectiles: vec![], -1 100 }, -1 101 Weapon { -1 102 sprite: &sprites::STAR, -1 103 _move: move_diagonal, -1 104 speed: 250.0, -1 105 damage: 20.0, -1 106 cooldown: 3.0, -1 107 size: 6.0, -1 108 last: 0.0, -1 109 amount: 0, -1 110 projectiles: vec![], -1 111 }, -1 112 Weapon { -1 113 sprite: &sprites::WIND, -1 114 _move: move_spiral, -1 115 speed: 100.0, -1 116 damage: 40.0, -1 117 cooldown: 9.0, -1 118 size: 8.0, -1 119 last: 0.0, -1 120 amount: 0, -1 121 projectiles: vec![], -1 122 }, -1 123 ]; -1 124 }