summaryrefslogtreecommitdiffhomepage
path: root/StarsEx/Particles.h
blob: 8a22f4c7a7f56e5198ecb8058ec30005d8185c74 (plain)
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/*  Starshatter: The Open Source Project
    Copyright (c) 2021-2024, Starshatter: The Open Source Project Contributors
    Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors
    Copyright (c) 1997-2006, Destroyer Studios LLC.

    AUTHOR:       John DiCamillo


    OVERVIEW
    ========
    Particle burst class
*/

#ifndef Particles_h
#define Particles_h

#include "Types.h"
#include "Geometry.h"
#include "Graphic.h"
#include "Sprite.h"

// +--------------------------------------------------------------------+

class Particles : public Graphic
{
public:
    Particles(Bitmap* bitmap,
    int     np,
    const   Vec3& base_loc,
    const   Vec3& vel,
    float   base_speed  = 500.0f,
    float   drag        = 1.0f,
    float   scale       = 1.0f,
    float   bloom       = 0.0f,
    float   decay       = 100.0f,
    float   release     = 1.0f,
    bool    cont        = false,
    bool    trail       = true,
    bool    rise        = false,
    int     blend       = 3,
    int     nframes     = 1);

    virtual ~Particles();

    virtual void   Render(Video* video, DWORD flags);
    virtual void   ExecFrame(double seconds);
    virtual void   TranslateBy(const Point& ref) { offset = ref; loc = loc - ref; }
    virtual bool   CheckVisibility(Projector& projector);

    virtual bool   IsEmitting()   const { return emitting;  }
    virtual void   StopEmitting()       { emitting = false; }

protected:
    int         nparts;
    int         nverts;
    int         blend;
    bool        continuous;
    bool        trailing;
    bool        rising;
    bool        emitting;

    float       base_speed;
    float       max_speed;
    float       drag;
    float       release_rate;
    float       decay;
    float       min_scale;
    float       max_scale;
    float       extra;

    Point       ref_loc;
    Point       offset;
    Point*      velocity;
    Point*      part_loc;
    Point*      release;
    float*      timestamp;
    float*      intensity;
    float*      scale;
    float*      angle;
    BYTE*       frame;

    Sprite*     point_sprite;
};

#endif  // Particles_h