136 lines
5.7 KiB
C++
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 |