summaryrefslogtreecommitdiffhomepage
path: root/StarsEx/WeaponGroup.h
blob: 3edad1d960a4f8568aba05565e17ec4c242e93a5 (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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
/*  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
    ========
    Weapon Control Category (Group) class
*/

#pragma once

#include <cstdint>

#include <Text.h>

#include "SimObject.h"
#include "System.h"
#include "Weapon.h"

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

class WeaponGroup
{
public:
    static const char* TYPENAME() { return "WeaponGroup"; }

    WeaponGroup(const char* name);
    ~WeaponGroup();

    void              ExecFrame(double factor);

    // identification:
    const char*       Name()                     const { return name;    }
    const char*       Abbreviation()             const { return abrv;    }
    void              SetName(const char* n);
    void              SetAbbreviation(const char* a);

    bool              IsPrimary()                const;
    bool              IsDrone()                  const;
    bool              IsDecoy()                  const;
    bool              IsProbe()                  const;
    bool              IsMissile()                const;
    bool              IsBeam()                   const;
    int               Value()                    const;

    // weapon list:
    void              AddWeapon(Weapon* w);
    int               NumWeapons()               const;
    List<Weapon>&     GetWeapons();
    bool              Contains(const Weapon* w)  const;

    // weapon selection:
    void              SelectWeapon(int n);
    void              CycleWeapon();
    Weapon*           GetWeapon(int n)           const;
    Weapon*           GetSelected()              const;

    // operations:
    bool              GetTrigger()               const    { return trigger; }
    void              SetTrigger(bool t=true)             { trigger = t;    }
    int               Ammo()                     const    { return ammo;    }
    float             Mass()                     const    { return mass;    }
    float             Resistance()               const    { return resist;  }
    void              CheckAmmo();

    void              SetTarget(SimObject* t, System* sub=0);
    SimObject*        GetTarget()                const;
    System*           GetSubTarget()             const;
    void              DropTarget();
    void              SetFiringOrders(int o);
    int               GetFiringOrders()          const    { return orders;  }
    void              SetControlMode(int m);
    int               GetControlMode()           const    { return control; }
    void              SetSweep(int s);
    int               GetSweep()                 const    { return sweep;   }
    int               Status()                   const;

    WeaponDesign*     GetDesign()          const;
    bool              CanTarget(std::uint32_t tgt_class) const;

    void              PowerOn();
    void              PowerOff();

protected:
    // Displayable name:
    Text              name;
    Text              abrv;

    List<Weapon>      weapons;

    int               selected;
    bool              trigger;
    int               ammo;

    int               orders;
    int               control;
    int               sweep;

    float             mass;
    float             resist;
};