Ejemplo n.º 1
0
void UFlareFactory::PerformCreateShipAction(const FFlareFactoryAction* Action)
{
	FFlareSpacecraftDescription* ShipDescription = GetGame()->GetSpacecraftCatalog()->Get(FactoryData.TargetShipClass);

	if (ShipDescription)
	{
		UFlareCompany* Company = Parent->GetCompany();

		if(FactoryData.TargetShipCompany != NAME_None)
		{
			Company = Game->GetGameWorld()->FindCompany(FactoryData.TargetShipCompany);
		}

		FVector SpawnPosition = Parent->GetSpawnLocation();
		for (uint32 Index = 0; Index < Action->Quantity; Index++)
		{
			// Get data
			UFlareSimulatedSpacecraft* Spacecraft = Parent->GetCurrentSector()->CreateSpacecraft(ShipDescription, Company, SpawnPosition);
			AFlarePlayerController* PC = Parent->GetGame()->GetPC();
			FFlareMenuParameterData Data;
			Data.Spacecraft = Spacecraft;

			// Notify PC
			if (PC && Spacecraft && Spacecraft->GetCompany() == PC->GetCompany())
			{
				PC->Notify(LOCTEXT("ShipBuilt", "Ship production complete"),
					FText::Format(LOCTEXT("ShipBuiltFormat", "Your ship {0} is ready to use !"), UFlareGameTools::DisplaySpacecraftName(Spacecraft)),
					FName("ship-production-complete"),
					EFlareNotification::NT_Economy,
					false,
					EFlareMenu::MENU_Ship,
					Data);

				Game->GetQuestManager()->OnEvent(FFlareBundle().PutTag("build-ship").PutInt32("size", Spacecraft->GetSize()));

				PC->SetAchievementProgression("ACHIEVEMENT_SHIP", 1);
			}
		}
	}

	FactoryData.TargetShipClass = NAME_None;
	FactoryData.TargetShipCompany = NAME_None;

	// No more ship to produce
	Stop();
}