- commit
- fd227f524b6c610ee8ddb524360d9d12fd192e32
- parent
- d223b08f56b9f2ddb2cadca2e34cfa689733cd0a
- Author
- Tobias Bengfort <tobias.bengfort@posteo.de>
- Date
- 2023-04-17 16:55
allow to vary spwan rates per wave
Diffstat
| M | src/enemies.rs | 71 | ++++++++++++++++++++++++++++--------------------------------- |
| M | src/game.rs | 35 | ++++++++++++++++++++--------------- |
2 files changed, 52 insertions, 54 deletions
diff --git a/src/enemies.rs b/src/enemies.rs
@@ -137,46 +137,39 @@ const SHADOW: EnemyType = EnemyType {
137 137 sprite: &sprites::SHADOW,
138 138 };
139 139
140 -1 pub fn get_enemy(x: f32, y: f32, i: usize) -> Enemy {
-1 140 pub fn get_wave(i: usize) -> Vec<(&'static EnemyType, f32)> {
141 141 let waves = [
142 -1 vec![&SNAKE],
143 -1 vec![&SNAKE, &SKELETON],
144 -1 vec![&SNAKE, &SKELETON],
145 -1 vec![&BAT],
146 -1 vec![&ZOMBIE],
147 -1 vec![&ZOMBIE],
148 -1 vec![&BAT, &SKELETON],
149 -1 vec![&BAT, &SKELETON],
150 -1 vec![&BAT, &EYE],
151 -1 vec![&GHOST],
152 -1 vec![&GHOST],
153 -1 vec![&BAT2, &ZOMBIE],
154 -1 vec![&BAT2, &ZOMBIE],
155 -1 vec![&MUMMY, &ZOMBIE],
156 -1 vec![&MUMMY, &ZOMBIE],
157 -1 vec![&HOOD],
158 -1 vec![&HOOD, &EYE],
159 -1 vec![&SNAKE, &PLANTGUY],
160 -1 vec![&SNAKE, &PLANTGUY],
161 -1 vec![&HOOD2],
162 -1 vec![&HOOD2, &HOOD],
163 -1 vec![&HOOD2],
164 -1 vec![&SNAKE, &RADDISH],
165 -1 vec![&RADDISH, &PLANTGUY],
166 -1 vec![&SKELETON2, &CRAWL],
167 -1 vec![&SKELETON2, &CRAWL],
168 -1 vec![&CRAWL],
169 -1 vec![&SHADOW],
170 -1 vec![&SHADOW],
171 -1 vec![&SHADOW],
-1 142 vec![(&SNAKE, 4.0)],
-1 143 vec![(&SNAKE, 2.0), (&SKELETON, 2.0)],
-1 144 vec![(&SNAKE, 2.0), (&SKELETON, 2.0)],
-1 145 vec![(&BAT, 4.0)],
-1 146 vec![(&ZOMBIE, 4.0)],
-1 147 vec![(&ZOMBIE, 4.0)],
-1 148 vec![(&BAT, 2.0), (&SKELETON, 2.0)],
-1 149 vec![(&BAT, 2.0), (&SKELETON, 2.0)],
-1 150 vec![(&BAT, 2.0), (&EYE, 2.0)],
-1 151 vec![(&GHOST, 4.0)],
-1 152 vec![(&GHOST, 4.0)],
-1 153 vec![(&BAT2, 2.0), (&ZOMBIE, 2.0)],
-1 154 vec![(&BAT2, 2.0), (&ZOMBIE, 2.0)],
-1 155 vec![(&MUMMY, 2.0), (&ZOMBIE, 2.0)],
-1 156 vec![(&MUMMY, 2.0), (&ZOMBIE, 2.0)],
-1 157 vec![(&HOOD, 4.0)],
-1 158 vec![(&HOOD, 2.0), (&EYE, 2.0)],
-1 159 vec![(&SNAKE, 2.0), (&PLANTGUY, 2.0)],
-1 160 vec![(&SNAKE, 2.0), (&PLANTGUY, 2.0)],
-1 161 vec![(&HOOD2, 4.0)],
-1 162 vec![(&HOOD2, 2.0), (&HOOD, 2.0)],
-1 163 vec![(&HOOD2, 4.0)],
-1 164 vec![(&SNAKE, 2.0), (&RADDISH, 2.0)],
-1 165 vec![(&RADDISH, 2.0), (&PLANTGUY, 2.0)],
-1 166 vec![(&SKELETON2, 2.0), (&CRAWL, 2.0)],
-1 167 vec![(&SKELETON2, 2.0), (&CRAWL, 2.0)],
-1 168 vec![(&CRAWL, 4.0)],
-1 169 vec![(&SHADOW, 4.0)],
-1 170 vec![(&SHADOW, 4.0)],
-1 171 vec![(&SHADOW, 4.0)],
172 172 ];
173 173
174 -1 let wave = &waves[(i / 100) % waves.len()];
175 -1 let t = wave[i % wave.len()];
176 -1
177 -1 return Enemy {
178 -1 p: Pos { x: x, y: y },
179 -1 health: t.health,
180 -1 t: t,
181 -1 };
-1 174 return waves[(i / 100) % waves.len()].clone();
182 175 }
diff --git a/src/game.rs b/src/game.rs
@@ -192,21 +192,26 @@ impl Game {
192 192 let sprite_height = win::iconvert_y(sprites::HEIGHT);
193 193 let sprite_width = win::iconvert_x(sprites::WIDTH);
194 194
195 -1 if self.enemies.len() < MAX_ENEMIES && self.rng.gen_f32() < dt * 4.0 {
196 -1 let (spawn_x, spawn_y) = match self.rng.gen_range(0, 4) {
197 -1 0 => (self.rng.gen_f32() * width, -sprite_height),
198 -1 1 => (width + sprite_width, self.rng.gen_f32() * height),
199 -1 2 => (self.rng.gen_f32() * width, height + sprite_height),
200 -1 3 => (-sprite_width, self.rng.gen_f32() * height),
201 -1 _ => unreachable!(),
202 -1 };
203 -1
204 -1 self.enemies.push(enemies::get_enemy(
205 -1 spawn_x + self.player.p.x - width / 2.0,
206 -1 spawn_y + self.player.p.y - height / 2.0,
207 -1 self.i_enemy,
208 -1 ));
209 -1 self.i_enemy += 1;
-1 195 for (t, p) in enemies::get_wave(self.i_enemy) {
-1 196 if self.enemies.len() < MAX_ENEMIES && self.rng.gen_f32() < dt * p {
-1 197 let (spawn_x, spawn_y) = match self.rng.gen_range(0, 4) {
-1 198 0 => (self.rng.gen_f32() * width, -sprite_height),
-1 199 1 => (width + sprite_width, self.rng.gen_f32() * height),
-1 200 2 => (self.rng.gen_f32() * width, height + sprite_height),
-1 201 3 => (-sprite_width, self.rng.gen_f32() * height),
-1 202 _ => unreachable!(),
-1 203 };
-1 204
-1 205 self.enemies.push(enemies::Enemy {
-1 206 p: Pos {
-1 207 x: spawn_x + self.player.p.x - width / 2.0,
-1 208 y: spawn_y + self.player.p.y - height / 2.0,
-1 209 },
-1 210 health: t.health,
-1 211 t: t,
-1 212 });
-1 213 self.i_enemy += 1;
-1 214 }
210 215 }
211 216 }
212 217