DarkflameServer/dGame/dComponents/ProximityMonitorComponent.h

83 lines
2.6 KiB
C
Raw Normal View History

/*
* Darkflame Universe
* Copyright 2018
*/
#ifndef PROXIMITYMONITORCOMPONENT_H
#define PROXIMITYMONITORCOMPONENT_H
#include "BitStream.h"
#include "Entity.h"
#include "dpWorld.h"
#include "dpEntity.h"
#include "Component.h"
#include "eReplicaComponentType.h"
2022-07-28 13:39:57 +00:00
/**
* Utility component for detecting how close entities are to named proximities for this entity. Allows you to store
* proximity checks for multiple ojects.
*/
class ProximityMonitorComponent : public Component {
public:
inline static const eReplicaComponentType ComponentType = eReplicaComponentType::PROXIMITY_MONITOR;
2022-07-28 13:39:57 +00:00
2023-06-12 08:29:43 +00:00
ProximityMonitorComponent(Entity* parentEntity, int32_t componentId = -1);
~ProximityMonitorComponent() override;
2023-06-12 08:29:43 +00:00
void LoadTemplateData() override;
2022-07-28 13:39:57 +00:00
void Update(float deltaTime) override;
2022-07-28 13:39:57 +00:00
/**
* Creates an entry to check proximity for, given a name
* @param proxRadius the radius to use for the physics entity we use to detect proximity
* @param name the name of this check
*/
void AddProximityRadius(float proxRadius, const std::string& name);
2022-07-28 13:39:57 +00:00
/**
* Creates an entry to check proximity for, given a name
* @param entity the physics entity to add to our proximity sensors
* @param name the name of this check
*/
void AddProximityRadius(const BoxDimensions& entity, const std::string& name);
2022-07-28 13:39:57 +00:00
/**
* Returns the last of entities that are used to check proximity, given a name
* @param name the proximity name to retrieve physics objects for
* @return a map of physics entities for this name, indexed by object ID
*/
const std::map<LWOOBJID, dpEntity*>& GetProximityObjects(const std::string& name);
2022-07-28 13:39:57 +00:00
/**
* Checks if the passed object is in proximity of the named proximity sensor
* @param name the name of the sensor to check proximity for
* @param objectID the entity to check if they're in proximity
* @return true if the object is in proximity, false otherwise
*/
bool IsInProximity(const std::string& name, LWOOBJID objectID);
2022-07-28 13:39:57 +00:00
/**
* Returns all the proximity sensors stored on this component, indexed by name
* @return all the proximity sensors stored on this component
*/
const std::map<std::string, dpEntity*>& GetProximitiesData() const { return m_ProximitiesData; }
private:
2023-07-11 07:15:05 +00:00
void AddProximityRadius(dpEntity* entity, const std::string& name);
2022-07-28 13:39:57 +00:00
/**
* All the proximity sensors for this component, indexed by name
*/
2023-07-11 07:15:05 +00:00
std::map<std::string, dpEntity*> m_ProximitiesData;
2022-07-28 13:39:57 +00:00
/**
* Default value for the proximity data
*/
static const std::map<LWOOBJID, dpEntity*> m_EmptyObjectMap;
2023-06-12 08:29:43 +00:00
2023-07-11 07:15:05 +00:00
int32_t m_ComponentId = -1;
};
#endif // PROXIMITYMONITORCOMPONENT_H