-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathparticle.h
64 lines (48 loc) · 1.86 KB
/
particle.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
//
// Created by Natty on 06.08.20.
//
#ifndef SR_CLONE_PARTICLE_H
#define SR_CLONE_PARTICLE_H
#include <SDL2/SDL_render.h>
#include "defs.h"
#include "directional-texture.h"
#include "font-renderer.h"
#include "mtwister.h"
typedef struct ParticleInstance ParticleInstance_t;
typedef struct ParticleManager ParticleManager_t;
typedef unsigned int particle_id;
typedef void (*particle_tick_func)(ParticleManager_t*, struct ParticleInstance*, float);
typedef void (*particle_render_func)(SDL_Renderer*, struct ParticleInstance*, FontRenderer_t*, float, float);
typedef struct Particle {
DirectionalTexture_t* sprites;
float size;
float initial_scale;
float final_scale;
float max_rotational_velocity;
float mean_lifetime;
float rotation_variation;
float lifetime_variation;
particle_render_func render_func;
particle_tick_func tick_func;
bool animation_bound_to_lifetime;
float time_per_frame;
} Particle_t;
#define MAX_PARTICLES 32
#define PARTICLE_DATA 64
struct ParticleDataFloatingText {
float lifetime;
float size;
char text[32];
};
extern Particle_t par_explosion1;
extern Particle_t par_hit;
extern Particle_t par_floating_text;
ParticleManager_t* particle_manager_create(MTRand* rand);
void particle_manager_render(ParticleManager_t* particle_manager, SDL_Renderer* renderer, FontRenderer_t* font_renderer, float cam_x, float cam_y);
void particle_manager_tick(ParticleManager_t* particle_manager, float delta_time);
void particle_manager_free(ParticleManager_t* particle_manager);
ParticleInstance_t* particle_create(ParticleManager_t* particle_manager, const Particle_t* particle, float x, float y, float rotation, const char data[PARTICLE_DATA]);
void particle_destroy(ParticleManager_t* particle_manager, particle_id particle);
void part_init(SDL_Renderer* renderer);
void part_free();
#endif //SR_CLONE_PARTICLE_H