pioneer/src/Sensors.h

68 lines
1.5 KiB
C++

// Copyright © 2008-2021 Pioneer Developers. See AUTHORS.txt for details
// Licensed under the terms of the GPL v3. See licenses/GPL-3.txt
#ifndef _SENSORS_H
#define _SENSORS_H
/*
* Ship/station subsystem that holds a list of known contacts
* and handles IFF
* Some ideas:
* - targeting should be lost when going out of range
* - don't run radar sweep every frame (more of an optimization than simulation)
* - allow "pinned" radar contacts (visible at all ranges, for missions)
*/
#include "Body.h"
#include "libs.h"
class Body;
class HudTrail;
class Ship;
class Sensors {
public:
enum IFF {
IFF_UNKNOWN, //also applies to inert objects
IFF_NEUTRAL,
IFF_ALLY,
IFF_HOSTILE
};
enum TargetingCriteria {
TARGET_NEAREST_HOSTILE
};
struct RadarContact {
RadarContact();
RadarContact(Body *);
~RadarContact();
Body *body;
HudTrail *trail;
double distance;
IFF iff;
bool fresh;
};
typedef std::list<RadarContact> ContactList;
static Color IFFColor(IFF);
static bool ContactDistanceSort(const RadarContact &a, const RadarContact &b);
Sensors(Ship *owner);
bool ChooseTarget(TargetingCriteria);
IFF CheckIFF(Body *other);
const ContactList &GetContacts() { return m_radarContacts; }
const ContactList &GetStaticContacts() { return m_staticContacts; }
void Update(float time);
void UpdateIFF(Body *);
void ResetTrails();
private:
Ship *m_owner;
ContactList m_radarContacts;
ContactList m_staticContacts; //things we know of regardless of range
void PopulateStaticContacts();
};
#endif