Advertisement
Guest User

Untitled

a guest
Jun 19th, 2015
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.67 KB | None | 0 0
  1. //CombatComponent.h
  2.  
  3. public:
  4.     //The melee weapons this character uses. Must have at least one.
  5.     UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Wa Combat")
  6.     TArray<FWeaponInfo> MeleeWeapons;
  7.     //The ranged weapons this character uses. Optional.
  8.     UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Wa Combat")
  9.     TArray<FWeaponInfo> RangedWeapons;
  10.  
  11.     void InitializeWeapons();
  12.  
  13. private:
  14.     TMap<FWeaponSlot, TWeakObjectPtr<AWeaponBase>> Weapons;
  15.  
  16. //CombatComponent.cpp
  17.  
  18. //This functions is called from my EnemyCharacterBase.cpp's BeginPlay(), like this:
  19. //  CombatComponent->SetOwnerSkeletalMesh(GetMesh());
  20. //  CombatComponent->SetOwnerCollision(GetCapsuleComponent());
  21. //  CombatComponent->InitializeWeapons();
  22. //The reason for this is that the InitializeWeapon function (seen in previous pastebins) requires
  23. //the skeletal mesh, so I call this function AFTER feeding in the skeletal mesh, to make sure there
  24. //are no nullpointers.
  25.  
  26. void UCombatComponent::InitializeWeapons()
  27. {
  28.     for (auto Melee : MeleeWeapons)
  29.     {
  30.         if (Melee.WeaponComponent == nullptr)
  31.         {
  32.             Melee.InitializeWeapon(this, GetUniqueWeaponName(), GetSmallestUniqueIndex(), GetOwnerSkeletalMesh());
  33.  
  34.             AWeaponBase* WeaponObject = Melee.GetWeaponObject();
  35.             if (WeaponObject != nullptr)
  36.             {
  37.                 WeaponObject->SetWeaponVisibility(WeaponObject->IsRanged() == bWieldingRanged);
  38.             }
  39.         }
  40.  
  41.         AWeaponBase* Weapon = Cast<AWeaponBase>(Melee.WeaponComponent->ChildActor);
  42.         if (Weapon == nullptr)
  43.         {
  44.             UE_LOG(WaGeneral, Error, TEXT("WeaponActor class has to be a subclass of AWeaponBase"));
  45.         }
  46.         else
  47.         {
  48.             Weapon->InitializeWeapon(this);
  49.             FWeaponSlot Slot(Melee.AttachSocket, Weapon->IsRanged());
  50.             if (!Weapons.Contains(Slot))
  51.             {
  52.                 Weapons.Add(Slot, TWeakObjectPtr<AWeaponBase>(Weapon));
  53.             }
  54.         }
  55.     }
  56.  
  57.  
  58.     for (auto Ranged : RangedWeapons)
  59.     {
  60.         if (Ranged.WeaponComponent == nullptr)
  61.         {
  62.             Ranged.InitializeWeapon(this, GetUniqueWeaponName(), GetSmallestUniqueIndex(), GetOwnerSkeletalMesh());
  63.  
  64.             AWeaponBase* WeaponObject = Ranged.GetWeaponObject();
  65.             if (WeaponObject != nullptr)
  66.             {
  67.                 UE_LOG(WaGeneral, Log, TEXT("Ranged visibility..."));
  68.                 WeaponObject->SetWeaponVisibility(WeaponObject->IsRanged() == bWieldingRanged);
  69.             }
  70.         }
  71.  
  72.         AWeaponBase* Weapon = Cast<AWeaponBase>(Ranged.WeaponComponent->ChildActor);
  73.         if (Weapon == nullptr)
  74.         {
  75.             UE_LOG(WaGeneral, Error, TEXT("WeaponActor class has to be a subclass of AWeaponBase"));
  76.         }
  77.         else
  78.         {
  79.             Weapon->InitializeWeapon(this);
  80.             FWeaponSlot Slot(Ranged.AttachSocket, Weapon->IsRanged());
  81.             if (!Weapons.Contains(Slot))
  82.             {
  83.                 Weapons.Add(Slot, TWeakObjectPtr<AWeaponBase>(Weapon));
  84.             }
  85.            
  86.         }
  87.     }
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement