Files
BallisticsDocs/Source/EasyBallisticsEditor/Private/EBWeaponConfigurationFactory.cpp
T
2025-07-04 03:26:03 -07:00

136 lines
5.7 KiB
C++

// Copyright 2016 Mookie. All Rights Reserved.
#include "EBWeaponConfigurationFactory.h"
#include "EBWeaponConfiguration.h"
#include "EBMagazine.h"
#include "AssetToolsModule.h"
#include "EasyBallisticsEditor.h"
#define LOCTEXT_NAMESPACE "EBWeaponConfigurationFactory"
UEBWeaponConfigurationFactory::UEBWeaponConfigurationFactory()
{
bCreateNew = true;
bEditAfterNew = true;
SupportedClass = UEBWeaponConfiguration::StaticClass();
}
UObject* UEBWeaponConfigurationFactory::FactoryCreateNew(UClass* Class, UObject* InParent, FName Name, EObjectFlags Flags, UObject* Context, FFeedbackContext* Warn)
{
UEBWeaponConfiguration* WeaponConfig = NewObject<UEBWeaponConfiguration>(InParent, Class, Name, Flags);
if (WeaponConfig)
{
// Set up default configuration based on name
FString AssetName = Name.ToString();
if (AssetName.Contains(TEXT("M4")) || AssetName.Contains(TEXT("AR15")))
{
// Configure for M4/AR-15 type weapon
WeaponConfig->WeaponName = TEXT("M4 Carbine");
WeaponConfig->Manufacturer = TEXT("Colt");
WeaponConfig->Model = TEXT("M4A1");
WeaponConfig->Caliber = TEXT("5.56x45mm NATO");
WeaponConfig->FireControlConfig.AvailableFireModes.Add(EFireMode::FM_Semiauto);
WeaponConfig->FireControlConfig.AvailableFireModes.Add(EFireMode::FM_Auto);
WeaponConfig->FireControlConfig.FireRateMin = 700.0f;
WeaponConfig->FireControlConfig.FireRateMax = 950.0f;
WeaponConfig->BarrelConfig.BarrelLength = 14.5f;
WeaponConfig->DefaultMagazineCapacity = 30;
}
else if (AssetName.Contains(TEXT("AK")) || AssetName.Contains(TEXT("74")))
{
// Configure for AK type weapon
WeaponConfig->WeaponName = TEXT("AK-74");
WeaponConfig->Manufacturer = TEXT("Kalashnikov");
WeaponConfig->Model = TEXT("AK-74M");
WeaponConfig->Caliber = TEXT("5.45x39mm");
WeaponConfig->FireControlConfig.AvailableFireModes.Add(EFireMode::FM_Semiauto);
WeaponConfig->FireControlConfig.AvailableFireModes.Add(EFireMode::FM_Auto);
WeaponConfig->FireControlConfig.FireRateMin = 650.0f;
WeaponConfig->FireControlConfig.FireRateMax = 750.0f;
WeaponConfig->BarrelConfig.BarrelLength = 16.3f;
WeaponConfig->DefaultMagazineCapacity = 30;
}
else if (AssetName.Contains(TEXT("Pistol")) || AssetName.Contains(TEXT("Glock")) || AssetName.Contains(TEXT("1911")))
{
// Configure for pistol
WeaponConfig->WeaponName = TEXT("M1911");
WeaponConfig->Manufacturer = TEXT("Colt");
WeaponConfig->Model = TEXT("M1911A1");
WeaponConfig->Caliber = TEXT(".45 ACP");
WeaponConfig->FireControlConfig.AvailableFireModes.Add(EFireMode::FM_Semiauto);
WeaponConfig->FireControlConfig.DefaultFireMode = EFireMode::FM_Semiauto;
WeaponConfig->FireControlConfig.FireRateMin = 300.0f;
WeaponConfig->FireControlConfig.FireRateMax = 400.0f;
WeaponConfig->BarrelConfig.BarrelLength = 5.0f;
WeaponConfig->DefaultMagazineCapacity = 7;
WeaponConfig->DefaultMagazineType = EMagazineType::MT_Standard;
}
else if (AssetName.Contains(TEXT("Sniper")) || AssetName.Contains(TEXT("Bolt")))
{
// Configure for bolt-action sniper rifle
WeaponConfig->WeaponName = TEXT("M24 SWS");
WeaponConfig->Manufacturer = TEXT("Remington");
WeaponConfig->Model = TEXT("M24");
WeaponConfig->Caliber = TEXT("7.62x51mm NATO");
WeaponConfig->FireControlConfig.AvailableFireModes.Add(EFireMode::FM_Manual);
WeaponConfig->FireControlConfig.DefaultFireMode = EFireMode::FM_Manual;
WeaponConfig->FireControlConfig.FireRateMin = 60.0f;
WeaponConfig->FireControlConfig.FireRateMax = 60.0f;
WeaponConfig->BarrelConfig.BarrelLength = 24.0f;
WeaponConfig->BarrelConfig.InherentAccuracy = 0.0003f; // Very accurate
WeaponConfig->DefaultMagazineCapacity = 5;
WeaponConfig->DefaultMagazineType = EMagazineType::MT_Internal;
}
else if (AssetName.Contains(TEXT("Shotgun")))
{
// Configure for shotgun
WeaponConfig->WeaponName = TEXT("M870");
WeaponConfig->Manufacturer = TEXT("Remington");
WeaponConfig->Model = TEXT("870");
WeaponConfig->Caliber = TEXT("12 Gauge");
WeaponConfig->FireControlConfig.AvailableFireModes.Add(EFireMode::FM_Manual);
WeaponConfig->FireControlConfig.DefaultFireMode = EFireMode::FM_Manual;
WeaponConfig->FireControlConfig.FireRateMin = 120.0f;
WeaponConfig->FireControlConfig.FireRateMax = 120.0f;
WeaponConfig->BarrelConfig.BarrelLength = 18.5f;
WeaponConfig->DefaultMagazineCapacity = 8;
WeaponConfig->DefaultMagazineType = EMagazineType::MT_Tube;
}
else if (AssetName.Contains(TEXT("LMG")) || AssetName.Contains(TEXT("Machine")))
{
// Configure for light machine gun
WeaponConfig->WeaponName = TEXT("M249 SAW");
WeaponConfig->Manufacturer = TEXT("FN Herstal");
WeaponConfig->Model = TEXT("M249");
WeaponConfig->Caliber = TEXT("5.56x45mm NATO");
WeaponConfig->FireControlConfig.AvailableFireModes.Add(EFireMode::FM_Auto);
WeaponConfig->FireControlConfig.DefaultFireMode = EFireMode::FM_Auto;
WeaponConfig->FireControlConfig.FireRateMin = 750.0f;
WeaponConfig->FireControlConfig.FireRateMax = 1000.0f;
WeaponConfig->BarrelConfig.BarrelLength = 18.0f;
WeaponConfig->DefaultMagazineCapacity = 200;
WeaponConfig->DefaultMagazineType = EMagazineType::MT_Belt;
}
}
return WeaponConfig;
}
UClass* FEBWeaponConfigurationFactory::GetSupportedClass() const
{
return UEBWeaponConfiguration::StaticClass();
}
uint32 FEBWeaponConfigurationFactory::GetCategories()
{
return FEasyBallisticsEditorModule::GetBallisticsAssetCategory();
}
FText FEBWeaponConfigurationFactory::GetAssetDescription(const FAssetData& AssetData) const
{
return LOCTEXT("EBWeaponConfigurationDescription", "Defines weapon properties including fire modes, barrel characteristics, magazine types, and ammunition specifications for ballistic weapons.");
}
#undef LOCTEXT_NAMESPACE