The execute function has changed since then
it is now
virtual void Execute(FMassEntityManager& EntityManager, FMassExecutionContext& Context);
Haven’t tested it out but it compiles ok
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "MassProcessor.h"
#include "MassEntitySubsystem.h"
#include "SimpleRandomMovementProcessor.generated.h"
/**
*
*/
UCLASS()
class YOURGAME_API USimpleRandomMovementProcessor : public UMassProcessor
{
GENERATED_BODY()
public:
USimpleRandomMovementProcessor();
protected:
virtual void ConfigureQueries() override;
//virtual void Execute(UMassEntitySubsystem& EntitySubsystem, FMassExecutionContext& Context) override;
virtual void Execute(FMassEntityManager& EntityManager, FMassExecutionContext& Context) override;
private:
FMassEntityQuery EntityQuery;
};
.cpp
// Fill out your copyright notice in the Description page of Project Settings.
#include "SimpleRandomMovementProcessor.h"
#include "SimpleMovementFragment.h"
#include "MassEntityTemplateRegistry.h"
#include "MassCommonFragments.h"
#include "MassEntitySubsystem.h"
#include "MassExecutionContext.h"
USimpleRandomMovementProcessor::USimpleRandomMovementProcessor()
{
bAutoRegisterWithProcessingPhases = true;
ExecutionFlags = (int32)EProcessorExecutionFlags::All;
ExecutionOrder.ExecuteBefore.Add(UE::Mass::ProcessorGroupNames::Avoidance);
}
void USimpleRandomMovementProcessor::ConfigureQueries()
{
EntityQuery.AddRequirement<FTransformFragment>(EMassFragmentAccess::ReadWrite);
EntityQuery.AddRequirement<FSimpleMovementFragment>(EMassFragmentAccess::ReadWrite);
}
void USimpleRandomMovementProcessor::Execute(FMassEntityManager& EntityManager, FMassExecutionContext& Context)
{
EntityQuery.ForEachEntityChunk(EntityManager, Context, [this](FMassExecutionContext& Context)
{
const TArrayView<FTransformFragment> TransformList = Context.GetMutableFragmentView<FTransformFragment>();
const TArrayView<FSimpleMovementFragment> SimpleMovementList = Context.GetMutableFragmentView<FSimpleMovementFragment>();
const float WorldDeltaTime = Context.GetDeltaTimeSeconds();
for (int32 EntityIndex = 0; EntityIndex < Context.GetNumEntities(); ++EntityIndex)
{
FTransform& Transform = TransformList[EntityIndex].GetMutableTransform();
FVector& MoveTarget = SimpleMovementList[EntityIndex].Target;
FVector CurrentLocation = Transform.GetLocation();
FVector TargetVector = MoveTarget - CurrentLocation;
if (TargetVector.Size() <= 20.f)
{
MoveTarget = FVector(FMath::RandRange(-1.f, 1.f) * 1000.f, FMath::RandRange(-1.f, 1.f) * 1000.f, CurrentLocation.Z);
}
else
{
Transform.SetLocation(CurrentLocation + TargetVector.GetSafeNormal() * 400.F * WorldDeltaTime);
}
}
});
}
Oh and the build file needs the following modules:
MassEntity, MassCommon, MassSpawner
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "MassEntity", "MassCommon", "MassSpawner" });