summaryrefslogtreecommitdiffhomepage
path: root/Stars45/HardPoint.h
blob: ae6d74d97bdff8ae8bfeb0b292017e4bdc50b45d (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
/*  Project Starshatter 4.5
    Destroyer Studios LLC
    Copyright © 1997-2004. All Rights Reserved.

    SUBSYSTEM:    Stars.exe
    FILE:         HardPoint.h
    AUTHOR:       John DiCamillo


    OVERVIEW
    ========
    Hard Point (gun or missile launcher) class
*/

#ifndef HardPoint_h
#define HardPoint_h

#include "Types.h"
#include "Geometry.h"
#include "Text.h"

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

class Weapon;
class WeaponDesign;

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

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

   enum CONSTANTS { MAX_DESIGNS=8 };

   HardPoint(Vec3 muzzle, double az=0, double el=0);
   HardPoint(const HardPoint& rhs);
   virtual ~HardPoint();

   int operator==(const HardPoint& w) const { return this == &w; }

   virtual void      AddDesign(WeaponDesign* dsn);
   virtual Weapon*   CreateWeapon(int type_index=0);
   virtual double    GetCarryMass(int type_index=0);
   WeaponDesign*     GetWeaponDesign(int n) { return designs[n]; }

   virtual void      Mount(Point loc, float rad, float hull=0.5f);
   Point             MountLocation()               const { return mount_rel;   }
   double            Radius()                      const { return radius;      }
   double            HullProtection()              const { return hull_factor; }

   virtual const char* GetName()                   const { return name;        }
   virtual void        SetName(const char* s)            { name = s;           }
   virtual const char* GetAbbreviation()           const { return abrv;        }
   virtual void        SetAbbreviation(const char* s)    { abrv = s;           }
   virtual const char* GetDesign()                 const { return sys_dsn;     }
   virtual void        SetDesign(const char* s)          { sys_dsn = s;        }

   virtual double    GetAzimuth()                  const { return aim_azimuth;      }
   virtual void      SetAzimuth(double a)                { aim_azimuth = (float) a; }
   virtual double    GetElevation()                const { return aim_elevation; }
   virtual void      SetElevation(double e)              { aim_elevation = (float) e; }

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

   WeaponDesign*     designs[MAX_DESIGNS];
   Vec3              muzzle;
   float             aim_azimuth;
   float             aim_elevation;

   // Mounting:
   Point             mount_rel;  // object space
   float             radius;
   float             hull_factor;
};

#endif HardPoint_h