Add blood particles
This commit is contained in:
parent
9b15ebc1a5
commit
1ac1211b36
1
Makefile
1
Makefile
@ -6,6 +6,7 @@ OBJS= \
|
||||
build/src/Zombo.o \
|
||||
build/src/Sprite.o \
|
||||
build/src/Player.o \
|
||||
build/src/Particle.o \
|
||||
build/src/GameRenderer.o
|
||||
|
||||
MAKEFLAGS += -j $(shell nproc)
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
#ifndef COLOR_HPP
|
||||
#define COLOR_HPP
|
||||
|
||||
#include <cstdint>
|
||||
#include <SDL2/SDL_pixels.h>
|
||||
|
||||
typedef SDL_Color Color;
|
||||
|
||||
|
||||
16
src/Game.cpp
16
src/Game.cpp
@ -30,6 +30,14 @@ void Game::update(std::stop_token stop_token)
|
||||
arrow.update();
|
||||
}
|
||||
|
||||
for (Particle &particle : particles) {
|
||||
particle.update();
|
||||
|
||||
if (particle.ticks > particle.max_ticks) {
|
||||
std::erase(particles, particle);
|
||||
}
|
||||
}
|
||||
|
||||
// Remove arrows that are out of bounds
|
||||
std::erase_if(arrows, [this](const Arrow &arrow) {
|
||||
if (arrow.x < map.tile_offset_x * map.tile_size || arrow.y < map.tile_offset_x * map.tile_size) {
|
||||
@ -59,6 +67,10 @@ void Game::update(std::stop_token stop_token)
|
||||
zombo.x += std::cos(arrow.angle) * 8;
|
||||
zombo.y += std::sin(arrow.angle) * 8;
|
||||
|
||||
for (int i = 0; i < 5; i++) {
|
||||
particles.emplace_back(rgb(255, 0, 0), zombo.x, zombo.y, rand() % 6 - 3, -2 - (double)rand() / RAND_MAX * 4);
|
||||
}
|
||||
|
||||
std::erase(arrows, arrow);
|
||||
|
||||
if (zombo.hp == 0) {
|
||||
@ -99,6 +111,10 @@ void Game::draw()
|
||||
arrow.draw(&renderer, *arrow_sprite, player.x, player.y);
|
||||
}
|
||||
|
||||
for (const Particle &particle : particles) {
|
||||
particle.draw(&renderer, player.x, player.y);
|
||||
}
|
||||
|
||||
player.draw();
|
||||
|
||||
renderer.draw_sprite(*gold_sprite, renderer.screen_width - 50, 10);
|
||||
|
||||
@ -8,6 +8,7 @@
|
||||
#include "Player.hpp"
|
||||
#include "Map.hpp"
|
||||
#include "Zombo.hpp"
|
||||
#include "Particle.hpp"
|
||||
|
||||
class Game
|
||||
{
|
||||
@ -17,6 +18,7 @@ private:
|
||||
Map map;
|
||||
std::vector<Arrow> arrows;
|
||||
std::vector<Zombo> zombos;
|
||||
std::vector<Particle> particles;
|
||||
std::unique_ptr<Sprite> arrow_sprite, zombo_sprite, gold_sprite;
|
||||
Font *font;
|
||||
|
||||
|
||||
38
src/Particle.cpp
Normal file
38
src/Particle.cpp
Normal file
@ -0,0 +1,38 @@
|
||||
#include "Particle.hpp"
|
||||
#include "GameRenderer.hpp"
|
||||
|
||||
void Particle::update()
|
||||
{
|
||||
ticks++;
|
||||
|
||||
x += x_vel;
|
||||
y += y_vel;
|
||||
|
||||
y_vel += 0.2;
|
||||
|
||||
if (x_vel > 0) x_vel -= 0.1;
|
||||
else if (x_vel < 0) x_vel += 0.1;
|
||||
}
|
||||
|
||||
void Particle::draw(const GameRenderer *renderer, double player_x, double player_y) const
|
||||
{
|
||||
renderer->draw_rect(
|
||||
(int)(x + renderer->screen_width / 2 - player_x),
|
||||
(int)(y + renderer->screen_height / 2 - player_y),
|
||||
size, size,
|
||||
color
|
||||
);
|
||||
}
|
||||
|
||||
bool Particle::operator==(const Particle &other) const
|
||||
{
|
||||
return x == other.x
|
||||
&& y == other.y
|
||||
&& x_vel == other.x_vel
|
||||
&& y_vel == other.y_vel
|
||||
&& ticks == other.ticks
|
||||
&& color.r == other.color.r
|
||||
&& color.g == other.color.g
|
||||
&& color.b == other.color.b
|
||||
&& color.a == other.color.a;
|
||||
}
|
||||
29
src/Particle.hpp
Normal file
29
src/Particle.hpp
Normal file
@ -0,0 +1,29 @@
|
||||
#ifndef PARTICLE_HPP
|
||||
#define PARTICLE_HPP
|
||||
|
||||
#include "Color.hpp"
|
||||
#include "GameRenderer.hpp"
|
||||
|
||||
class Particle
|
||||
{
|
||||
private:
|
||||
Color color;
|
||||
double x, y, x_vel, y_vel;
|
||||
|
||||
static constexpr int size = 3;
|
||||
|
||||
public:
|
||||
int ticks = 0;
|
||||
static constexpr int max_ticks = 40;
|
||||
|
||||
Particle(Color color, double x, double y, double x_vel, double y_vel)
|
||||
: color(color), x(x), y(y), x_vel(x_vel), y_vel(y_vel) {}
|
||||
|
||||
void update();
|
||||
|
||||
void draw(const GameRenderer *renderer, double player_x, double player_y) const;
|
||||
|
||||
bool operator==(const Particle &other) const;
|
||||
};
|
||||
|
||||
#endif
|
||||
Loading…
Reference in New Issue
Block a user