summaryrefslogtreecommitdiffhomepage
path: root/StarsEx/NavLight.h
blob: 25ef8376da32af0edb93fa900aa61a8a7dc7a653 (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
/*  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
    ========
    Navigation Lights System class
*/

#ifndef NavLight_h
#define NavLight_h

#include "Types.h"
#include "System.h"
#include "DriveSprite.h"
#include "Geometry.h"

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

class NavLight : public System
{
public:
    enum Constants { MAX_LIGHTS = 8 };

    NavLight(double period, double scale);
    NavLight(const NavLight& rhs);
    virtual ~NavLight();

    static void    Initialize();
    static void    Close();

    virtual void   ExecFrame(double seconds);

    int            NumBeacons()      const { return nlights;       }
    Sprite*        Beacon(int index) const { return beacon[index]; }
    bool           IsEnabled()       const { return enable;        }

    virtual void   Enable();
    virtual void   Disable();
    virtual void   AddBeacon(Point loc, DWORD pattern, int type=1);
    virtual void   SetPeriod(double p);
    virtual void   SetPattern(int index, DWORD p);
    virtual void   SetOffset(DWORD o);

    virtual void   Orient(const Physical* rep);

protected:
    double      period;
    double      scale;
    bool        enable;

    int         nlights;

    Point          loc[MAX_LIGHTS];
    DriveSprite*   beacon[MAX_LIGHTS];
    DWORD          pattern[MAX_LIGHTS];
    int            beacon_type[MAX_LIGHTS];
    DWORD          offset;
};

#endif  // NavLight_h