#include "gfCPickListTrailCollectionEffectComponent.h"
#include <fsCore/src/fsCAppSettings.h>
#include <fsRenderer/src/components/fsCParticleEmitterComponent.h>
#include <fsAppCore/src/components/fsCStraightLineTrailComponent.h>
#include <gfComponents/gfIPickListEntryGui.h>
#include "gui/pickList/gfCPickListGui.h"
const fsCUniqueId gfCPickListTrailCollectionEffectComponent::mTypeId("fsCPickListTrailCollectionEffectComponent");
void gfCPickListTrailCollectionEffectComponent::updateDo(fsS32 pDeltaMs)
{
if (mTrailComponent->completedGet())
{
onEffectComplete();
}
}
void gfCPickListTrailCollectionEffectComponent::create(fsCEntity* const pParent,
const fsStr& pCollectedEntLocalisedName,
const fsPoint& pCollectedEntScreenPos,
const fsStr& pGuiName)
{
auto* const pickListTrail = pParent->componentAdd<gfCPickListTrailCollectionEffectComponent>();
fsCEntity* const pickListTargetEnt = pickListEntryLocate(pParent, pCollectedEntLocalisedName, pGuiName);
fsVec2d targetCoord;
if (!fsCAppCoreMain::instanceGet()->sceneGet()->screenCoordConvertToLocal(
pickListTargetEnt->screenPositionGet(), targetCoord))
{
fsAssert(false, "Failed to convert coordinates.\n");
}
pickListTrail->trailComponentCreate(pParent, pCollectedEntScreenPos, targetCoord);
particleComponentCreate(pParent);
fsCAppCoreMain::instanceGet()->sceneRootGet()->childAdd(pParent);
}
fsIComponent* gfCPickListTrailCollectionEffectComponent::create(fsCEntity* pParent)
{
return new gfCPickListTrailCollectionEffectComponent(pParent);
}
fsCEntity* gfCPickListTrailCollectionEffectComponent::pickListEntryLocate(
fsCEntity* const pParent, const fsStr& pCollectedEntLocalisedName, const fsStr& gGuiName)
{
auto guiEnts = fsCAppCoreMain::instanceGet()->sceneGet()->entityNamed(gGuiName)->
childEntitiesWithComponentsOfFamilyType<gfCPickListGui>();
for (fsCEntity* guiEnt : guiEnts)
{
gfCPickListGui* const pickList = guiEnt->componentGet<gfCPickListGui>();<--- Variable 'pickList' can be declared as pointer to const
fsAssert(pickList != nullptr, "Expected to get the pick list component.\n");
if (gfIPickListEntryGui* listEntry = pickList->entryLocate(pCollectedEntLocalisedName))
{
return listEntry->parentGet();
}
}
fsAssert(false, "Failed to find an entry for %s.\n", pCollectedEntLocalisedName.utf8Get());
return nullptr;
}
void gfCPickListTrailCollectionEffectComponent::particleComponentCreate(fsCEntity* const pParent)
{
auto* const parComp = pParent->componentAdd<fsCParticleEmitterComponent>();
parComp->particelDataLoad(fsCResourceName(fsCAppCoreMain::instanceGet()->settingsGet()->strGetWithDefault(
"collectTrailParticle", "particles/pPickListCollectTrail.txt"),
fsCResourceName::eRES_LOCATION_ASSETS));
}
void gfCPickListTrailCollectionEffectComponent::trailComponentCreate(fsCEntity* const pParent,
const fsPoint& pCollectedEntScreenPos,
const fsPoint& pEndScreenPos)
{
mTrailComponent = pParent->componentAdd<fsCStraightLineTrailComponent>();
mTrailComponent->initialise(pCollectedEntScreenPos, pEndScreenPos, 2000, false);
}
gfCPickListTrailCollectionEffectComponent::gfCPickListTrailCollectionEffectComponent(fsCEntity* const pParent) :
fsICollectionEffectComponent(pParent),
mTrailComponent(nullptr)
{
}
gfCPickListTrailCollectionEffectComponent::~gfCPickListTrailCollectionEffectComponent()
{
}