blob: dbc4ed67148dde7f7199527a7b571db31477c4e6 (
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
|
/* 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
========
Sensor Contact class
*/
#pragma once
#include <cstdint>
#include "SimObject.h"
#include "System.h"
#include "Geometry.h"
// +--------------------------------------------------------------------+
class Ship;
class Shot;
class Contact : public SimObserver
{
friend class Sensor;
public:
static const char* TYPENAME() { return "Contact"; }
Contact();
Contact(Ship* s, float p, float a);
Contact(Shot* s, float p, float a);
virtual ~Contact();
int operator == (const Contact& c) const;
Ship* GetShip() const { return ship; }
Shot* GetShot() const { return shot; }
Point Location() const { return loc; }
double PasReturn() const { return d_pas; }
double ActReturn() const { return d_act; }
bool PasLock() const;
bool ActLock() const;
double Age() const;
bool IsProbed() const { return probe; }
std::uint32_t AcquisitionTime() const { return acquire_time; }
int GetIFF(const Ship* observer) const;
void GetBearing(const Ship* observer, double& az, double& el, double& r) const;
double Range(const Ship* observer,
double limit=75e3) const;
bool InFront(const Ship* observer) const;
bool Threat(const Ship* observer) const;
bool Visible(const Ship* observer) const;
void Reset();
void Merge(Contact* c);
void ClearTrack();
void UpdateTrack();
int TrackLength() const { return ntrack; }
Point TrackPoint(int i) const;
virtual bool Update(SimObject* obj);
virtual const char* GetObserverName() const;
private:
Ship* ship;
Shot* shot;
Point loc;
std::uint32_t acquire_time;
std::uint32_t time;
Point* track;
int ntrack;
std::uint32_t track_time;
float d_pas; // power output
float d_act; // mass, size
bool probe; // scanned by probe
};
|