pandemonium_engine/modules/steering_ai/behaviors/gsai_blend.h

48 lines
1.2 KiB
C++
Raw Normal View History

#ifndef GSAI_BLEND_H
#define GSAI_BLEND_H
2023-01-14 02:31:42 +01:00
#include "core/object/reference.h"
#include "../gsai_steering_behavior.h"
class GSAISteeringBehavior;
class GSAITargetAcceleration;
class GSAIBlend : public GSAISteeringBehavior {
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);
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);
GSAIBlend();
~GSAIBlend();
2023-01-14 02:31:42 +01:00
protected:
struct GSAIBlendBehaviorEntry {
Ref<GSAISteeringBehavior> behavior;
float weight;
};
protected:
static void _bind_methods();
// Blends multiple steering behaviors into one, and returns a weighted
// acceleration from their calculations.
// @category - Combination behaviors
2023-01-14 02:31:42 +01:00
Vector<GSAIBlendBehaviorEntry> _behaviors;
Ref<GSAITargetAcceleration> _accel;
// Appends a behavior to the internal array along with its `weight`.
// Returns the behavior at the specified `index`, or an empty `Dictionary` if
// none was found.
};
#endif