// 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(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