class ASoftParticleHelper

#include <SoftParticleHelper.h>

class ASoftParticleHelper: public AActor
{
public:
    // fields

    TMap<int32, float> affectedVertices;
    TSet<FString> currentAffectedParfticleIDs;
    ACreateDeformMesh* meshContainer;
    float resistance;
    float maxMovement;
    FVector lastposition;
    FVector initposition;
    TArray<FVector> meshVertices;
    TArray<TPair<int32, float>> affectedVerticesArray;
    TArray<TPair<ASoftParticleHelper*, float>> affectedParticlesArray;
    TMap<ASoftParticleHelper*, float> affectedParticles;
    ACreateDeformMesh* deformCreator;
    UMagesInteractableItem* InteractableItemInstance = nullptr;
    UShapeComponent* Shape;

    // methods

    void Initialize(TArray<FVector>& Vertices);
    void SetDeformCreator(ACreateDeformMesh* cdm);
    void AddAffectedVertex(int id, float affect);
    void ChangeAffectedVertex(int id, float affect);
    void AddAffectedParticle(ASoftParticleHelper* _ph, float _distPersent);
    void UpdateParticle();
    void UpdateExternalVelocities(float DeltaTime);
    void UpdateParticleVertices();

    void MoveToStartingPos(
        FVector Pos,
        FRotator Rot,
        bool bApplyToOtherParticles = true,
        float AffectValue = 1.0f
        );

    void AddExternalVelocity(FVector Vel, float AffectValue = .5f);
    void RecenterParticle();
    void RecenterParticle(TArray<FVector> from_vertices);
    FTransform getCenterPoint();
    void setCenterPoint(FTransform value);
    void setBaseVertexID(int value);
    void Solve(FVector Movement);
    FORCEINLINE bool operator == (const ASoftParticleHelper& Other) const;
};