survivor

graphical action game for the linux terminal
git clone https://git.ce9e.org/survivor.git

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     3 
    4    -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    -1 
   14     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    20 
   29    -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    -1 
   43    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    76 
   99    -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    -1 
  109    -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    -1 
  119    -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    -1 
  129    -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 }