2021-12-05 17:54:36 +00:00
|
|
|
/*
|
|
|
|
* 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"
|
2023-03-04 07:16:37 +00:00
|
|
|
#include "eReplicaComponentType.h"
|
2021-12-05 17:54:36 +00:00
|
|
|
|
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.
|
|
|
|
*/
|
2024-01-24 05:13:23 +00:00
|
|
|
class ProximityMonitorComponent final : public Component {
|
2021-12-05 17:54:36 +00:00
|
|
|
public:
|
2024-01-24 05:13:23 +00:00
|
|
|
static constexpr eReplicaComponentType ComponentType = eReplicaComponentType::PROXIMITY_MONITOR;
|
2022-07-28 13:39:57 +00:00
|
|
|
|
2021-12-05 17:54:36 +00:00
|
|
|
ProximityMonitorComponent(Entity* parentEntity, int smallRadius = -1, int largeRadius = -1);
|
|
|
|
~ProximityMonitorComponent() override;
|
2022-07-28 13:39:57 +00:00
|
|
|
void Update(float deltaTime) override;
|
2021-12-05 17:54:36 +00:00
|
|
|
|
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
|
|
|
|
*/
|
2021-12-05 17:54:36 +00:00
|
|
|
void SetProximityRadius(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
|
|
|
|
*/
|
2021-12-05 17:54:36 +00:00
|
|
|
void SetProximityRadius(dpEntity* 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
|
|
|
|
*/
|
2021-12-05 17:54:36 +00:00
|
|
|
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
|
|
|
|
*/
|
2021-12-05 17:54:36 +00:00
|
|
|
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
|
|
|
|
*/
|
2021-12-05 17:54:36 +00:00
|
|
|
const std::map<std::string, dpEntity*>& GetProximitiesData() const { return m_ProximitiesData; }
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
2022-07-28 13:39:57 +00:00
|
|
|
/**
|
|
|
|
* All the proximity sensors for this component, indexed by name
|
|
|
|
*/
|
2021-12-05 17:54:36 +00:00
|
|
|
std::map<std::string, dpEntity*> m_ProximitiesData = {};
|
|
|
|
|
2022-07-28 13:39:57 +00:00
|
|
|
/**
|
|
|
|
* Default value for the proximity data
|
|
|
|
*/
|
2021-12-05 17:54:36 +00:00
|
|
|
static const std::map<LWOOBJID, dpEntity*> m_EmptyObjectMap;
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif // PROXIMITYMONITORCOMPONENT_H
|