diff options
author | jjesswan <jessica_wan@brown.edu> | 2024-04-22 21:56:26 -0400 |
---|---|---|
committer | jjesswan <jessica_wan@brown.edu> | 2024-04-22 21:56:26 -0400 |
commit | a556b45abf18f1bd509daaf63b66b7d55e9fd291 (patch) | |
tree | bc9b8a2d184c12aee236e7f9f276a34b84ca552d /engine-ocean/Game/Systems/AI/Conditions | |
parent | cd7c76017a12bb548036571c1ff13e551369d06d (diff) |
add engine version
Diffstat (limited to 'engine-ocean/Game/Systems/AI/Conditions')
4 files changed, 94 insertions, 0 deletions
diff --git a/engine-ocean/Game/Systems/AI/Conditions/btcondition.cpp b/engine-ocean/Game/Systems/AI/Conditions/btcondition.cpp new file mode 100644 index 0000000..f4de4af --- /dev/null +++ b/engine-ocean/Game/Systems/AI/Conditions/btcondition.cpp @@ -0,0 +1,6 @@ +#include "btcondition.h" + +BTCondition::BTCondition() +{ + +} diff --git a/engine-ocean/Game/Systems/AI/Conditions/btcondition.h b/engine-ocean/Game/Systems/AI/Conditions/btcondition.h new file mode 100644 index 0000000..6ded57b --- /dev/null +++ b/engine-ocean/Game/Systems/AI/Conditions/btcondition.h @@ -0,0 +1,18 @@ +#ifndef BTCONDITION_H +#define BTCONDITION_H +#include "Game/Systems/AI/btnode.h" + + +class BTCondition : public BTNode +{ +public: + BTCondition(); + virtual Status update(float seconds) = 0; + virtual void reset() = 0; + + +private: + bool m_condition; +}; + +#endif // BTCONDITION_H diff --git a/engine-ocean/Game/Systems/AI/Conditions/proximitycondition.cpp b/engine-ocean/Game/Systems/AI/Conditions/proximitycondition.cpp new file mode 100644 index 0000000..2e40ce7 --- /dev/null +++ b/engine-ocean/Game/Systems/AI/Conditions/proximitycondition.cpp @@ -0,0 +1,43 @@ +#include "proximitycondition.h" +#include "Game/Components/TransformComponent.h" +#include "glm/glm.hpp" +#include <memory> + +ProximityCondition::ProximityCondition(std::string entity_id, + std::map<std::string, BlackboardData>& global_blackboard, + float proximity): + m_global_blackboard(global_blackboard) +{ + m_proximity = proximity; + m_entity_id = entity_id; + // initialize just in case + m_global_blackboard["player"].conditionData["isJumping"].conditionTrue = false; + + +} + +// maybe can check locations from blackboard +// pass blackboard into constructor +// struct: positiondata --> getCurrentPos, setCurrentPos +bool ProximityCondition::checkProximity(){ + // unrooted distance + glm::vec3 aiPos = m_global_blackboard[m_entity_id].locationData.currPos; + glm::vec3 otherPos = m_global_blackboard["player"].locationData.currPos; + float distance = pow(aiPos.x-otherPos.x, 2) + pow(aiPos.y-otherPos.y, 2) + pow(aiPos.z-otherPos.z, 2); + + if (distance <= m_proximity) return true; + return false; +} + +// at every update, check if AIPos is near otherPos +Status ProximityCondition::update(float seconds){ + // while entity is still pathfinding, keep returning success + if (m_global_blackboard[m_entity_id].conditionData["isPathfinding"].conditionTrue) return Status::SUCCESS; + if (checkProximity() && m_global_blackboard["player"].conditionData["isJumping"].conditionTrue) return Status::SUCCESS; + + return Status::FAIL; +} + + +void ProximityCondition::reset(){} +void ProximityCondition::addChildren(BTNode *node){} diff --git a/engine-ocean/Game/Systems/AI/Conditions/proximitycondition.h b/engine-ocean/Game/Systems/AI/Conditions/proximitycondition.h new file mode 100644 index 0000000..e43d178 --- /dev/null +++ b/engine-ocean/Game/Systems/AI/Conditions/proximitycondition.h @@ -0,0 +1,27 @@ +#ifndef PROXIMITYCONDITION_H +#define PROXIMITYCONDITION_H +#include "Game/Components/TransformComponent.h" +#include "btcondition.h" +#include <memory> + + +class ProximityCondition : public BTNode +{ +public: + ProximityCondition(std::string entity_id, + std::map<std::string, BlackboardData>& global_blackboard, + float proximity); + Status update(float seconds) override; + void reset() override; + void addChildren(BTNode *node) override; + + +private: + bool checkProximity(); + float m_proximity; + std::string m_entity_id; + std::map<std::string, BlackboardData>& m_global_blackboard; + +}; + +#endif // PROXIMITYCONDITION_H |