A game about managing a bar created during the graduation project at Hanze University.
I was part of the 7-person team working on this project as a Product Owner as well as AI Programmer focusing on the character behaviour.
Co-op, Simulator, Roguelite
PC
Unreal Engine 5
I was responsible for the AI implementation within the game using State Trees as the underlying system. I also acted as a Product Owner, managing the team, scope and goals to keep them within the graduation timeframe.
Since the EQS system did not contain a test I needed, I created my own using C++. The test that was required was a test that would check how many actors of the selected class are around the selected object.
This was used to determine which seats within the level had least other customers around them and route new customers towards empty spaces of the bar (thus filling the bar more naturally).
void UEnvQueryTest_CountActorsInRadius::RunTest(FEnvQueryInstance& QueryInstance) const
{
UObject* QueryOwner = QueryInstance.Owner.Get();
if (QueryOwner == nullptr)
{
return;
}
UWorld* World = QueryInstance.World;
if (!World)
{
return;
}
for (FEnvQueryInstance::ItemIterator It(this, QueryInstance); It; ++It)
{
FVector ItemLocation = GetItemLocation(QueryInstance, It.GetIndex());
TArray<FOverlapResult> Overlaps;
FCollisionShape Sphere = FCollisionShape::MakeSphere(Radius);
QueryInstance.World->OverlapMultiByObjectType(
Overlaps,
ItemLocation,
FQuat::Identity,
FCollisionObjectQueryParams(ECC_Pawn),
Sphere
);
int32 Count = 0;
for (const FOverlapResult& Res : Overlaps)
{
AActor* Actor = Res.GetActor();
if (Actor && Actor->IsA(ActorClassToCount))
{
Count++;
}
}
It.SetScore(TestPurpose, FilterType, Count, 0, Count);
}
}
Customers leaving due to punching (pacifying) them.