2023-01-13 22:04:30 +01:00
|
|
|
#ifndef GSAI_BLEND_H
|
|
|
|
#define GSAI_BLEND_H
|
2023-01-13 21:13:57 +01:00
|
|
|
|
2023-01-14 02:31:42 +01:00
|
|
|
#include "core/object/reference.h"
|
|
|
|
|
|
|
|
#include "../gsai_steering_behavior.h"
|
|
|
|
|
|
|
|
class GSAISteeringBehavior;
|
|
|
|
class GSAITargetAcceleration;
|
|
|
|
|
2023-01-13 21:13:57 +01:00
|
|
|
class GSAIBlend : public GSAISteeringBehavior {
|
2023-01-13 21:35:07 +01:00
|
|
|
GDCLASS(GSAIBlend, GSAISteeringBehavior);
|
|
|
|
|
|
|
|
public:
|
2023-01-14 02:31:42 +01:00
|
|
|
void add_behavior(const Ref<GSAISteeringBehavior> &behavior, const float weight);
|
|
|
|
Ref<GSAISteeringBehavior> get_behavior(const int index);
|
|
|
|
float get_behavior_weight(const int index);
|
2023-01-13 21:35:07 +01:00
|
|
|
void remove_behavior(const int index);
|
|
|
|
int get_behaviour_count();
|
2023-01-14 02:31:42 +01:00
|
|
|
|
|
|
|
Ref<GSAITargetAcceleration> get_accel();
|
|
|
|
|
|
|
|
void _calculate_steering(Ref<GSAITargetAcceleration> blended_accel);
|
2023-01-13 21:35:07 +01:00
|
|
|
|
|
|
|
GSAIBlend();
|
|
|
|
~GSAIBlend();
|
|
|
|
|
2023-01-14 02:31:42 +01:00
|
|
|
protected:
|
|
|
|
struct GSAIBlendBehaviorEntry {
|
|
|
|
Ref<GSAISteeringBehavior> behavior;
|
|
|
|
float weight;
|
|
|
|
};
|
|
|
|
|
2023-01-13 21:35:07 +01:00
|
|
|
protected:
|
|
|
|
static void _bind_methods();
|
|
|
|
|
2023-01-14 02:31:42 +01:00
|
|
|
Vector<GSAIBlendBehaviorEntry> _behaviors;
|
|
|
|
Ref<GSAITargetAcceleration> _accel;
|
2023-01-13 21:13:57 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|