naev 0.12.5
spfx.h
1/*
2 * See Licensing and Copyright notice in naev.h
3 */
4#pragma once
5
6#include "opengl.h"
7
8#define SPFX_LAYER_FRONT 0
9#define SPFX_LAYER_MIDDLE 1
10#define SPFX_LAYER_BACK 2
11
12#define SPFX_DAMAGE_DECAY \
13 0.5
14#define SPFX_DAMAGE_MOD \
15 1.5
17#define SPFX_DAMAGE_MAX 1.0
18
19#define SPFX_SHAKE_DECAY 0.3
20#define SPFX_SHAKE_MOD 1.0
21#define SPFX_SHAKE_MAX 1.0
22
26typedef struct TrailStyle_ {
27 glColour col;
28 float thick;
30
35typedef enum TrailMode_ {
36 MODE_IDLE,
37 MODE_GLOW,
38 MODE_AFTERBURN,
39 MODE_JUMPING,
40 MODE_NONE,
41 MODE_MAX
42} TrailMode;
43
44#define MODE_TAGS \
45 { \
46 "idle", "glow", "afterburn", "jumping", "none", \
47 }
48
52typedef struct TrailSpec_ {
53 char *name;
54 char *filename;
55 double ttl;
56 double accel_mod;
57 float def_thick;
59 style[MODE_MAX];
60 int nebula;
62 /* Shader stuff. */
64 struct {
65 GLuint program;
66 GLuint vertex;
67 GLuint projection;
68 GLuint r;
69 GLuint dt;
70 GLuint c1;
71 GLuint c2;
72 GLuint t;
73 GLuint z;
74 GLuint pos1;
75 GLuint pos2;
76 GLuint nebu_col;
77 } shader;
78} TrailSpec;
79
80typedef struct TrailPoint {
81 GLfloat x, y, z;
82 GLfloat t;
84 GLfloat dx, dy;
85 TrailMode mode;
87
93typedef struct Trail_spfx_ {
94 const TrailSpec *spec;
97 size_t capacity;
98 size_t iread;
99 size_t iwrite;
101 double dt;
102 GLfloat r;
103 unsigned int ontop;
105} Trail_spfx;
106
108#define trail_at( trail, i ) \
109 ( ( trail )->point_ringbuf[( i ) & ( ( trail )->capacity - 1 )] )
111#define trail_size( trail ) ( ( trail )->iwrite - ( trail )->iread )
113#define trail_front( trail ) trail_at( trail, ( trail )->iread )
115#define trail_back( trail ) trail_at( trail, ( trail )->iwrite - 1 )
116
117/*
118 * stack manipulation
119 */
120int spfx_get( const char *name );
121const TrailSpec *trailSpec_get( const char *name );
122void spfx_add( int effect, const double px, const double py, const double vx,
123 const double vy, int layer );
124
125/*
126 * stack mass manipulation functions
127 */
128void spfx_update( const double dt, const double real_dt );
129void spfx_render( int layer, double dt );
130void spfx_clear( void );
132void spfx_trail_sample( Trail_spfx *trail, double x, double y, double z,
133 double dx, double dy, TrailMode mode, int force );
134void spfx_trail_remove( Trail_spfx *trail );
135void spfx_trail_draw( const Trail_spfx *trail );
136
137/*
138 * Misc effects.
139 */
140void spfx_shake( double mod );
141void spfx_damage( double mod );
142void spfx_setNebulaColour( double r, double g, double b );
143
144/*
145 * other effects
146 */
147void spfx_cinematic( void );
148
149/*
150 * spfx effect loading and freeing
151 */
152int spfx_load( void );
153void spfx_free( void );
static double real_dt
Definition naev.c:111
void spfx_free(void)
Frees the spfx stack.
Definition spfx.c:448
int spfx_load(void)
Loads the spfx stack.
Definition spfx.c:375
void spfx_render(int layer, double dt)
Renders the entire spfx layer.
Definition spfx.c:1178
const TrailSpec * trailSpec_get(const char *name)
Gets a trail spec by name.
Definition spfx.c:1396
void spfx_cinematic(void)
Sets the cinematic mode.
Definition spfx.c:1093
void spfx_trail_sample(Trail_spfx *trail, double x, double y, double z, double dx, double dy, TrailMode mode, int force)
Makes a trail grow.
Definition spfx.c:811
void spfx_shake(double mod)
Increases the current rumble level.
Definition spfx.c:966
void spfx_clear(void)
Clears all the currently running effects.
Definition spfx.c:549
void spfx_setNebulaColour(double r, double g, double b)
Sets the nebula colour where applicable.
Definition spfx.c:1002
int spfx_get(const char *name)
Gets the id of an spfx based on name.
Definition spfx.c:355
void spfx_trail_remove(Trail_spfx *trail)
Removes a trail.
Definition spfx.c:857
void spfx_add(int effect, const double px, const double py, const double vx, const double vy, int layer)
Creates a new special effect.
Definition spfx.c:504
void spfx_damage(double mod)
Increases the current damage level.
Definition spfx.c:988
Trail_spfx * spfx_trail_create(const TrailSpec *spec)
Initalizes a trail.
Definition spfx.c:735
void spfx_update(const double dt, const double real_dt)
Updates all the spfx.
Definition spfx.c:582
void spfx_trail_draw(const Trail_spfx *trail)
Draws a trail on screen.
Definition spfx.c:878
GLfloat dy
Definition spfx.h:84
TrailMode mode
Definition spfx.h:85
GLfloat z
Definition spfx.h:81
GLfloat t
Definition spfx.h:82
represents a set of styles for trails.
Definition spfx.h:52
int nebula
Definition spfx.h:60
double ttl
Definition spfx.h:55
float def_thick
Definition spfx.h:57
TrailStyle style[MODE_MAX]
Definition spfx.h:59
double accel_mod
Definition spfx.h:56
char * shader_path
Definition spfx.h:63
char * name
Definition spfx.h:53
Represents the appearance characteristics for a given trail mode.
Definition spfx.h:26
glColour col
Definition spfx.h:27
float thick
Definition spfx.h:28
A trail generated by a ship or an ammo.
Definition spfx.h:93
int refcount
Definition spfx.h:100
double dt
Definition spfx.h:101
TrailPoint * point_ringbuf
Definition spfx.h:96
GLfloat r
Definition spfx.h:102
size_t iread
Definition spfx.h:98
size_t iwrite
Definition spfx.h:99
unsigned int ontop
Definition spfx.h:103
size_t capacity
Definition spfx.h:97