Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //CombatComponent.h
- public:
- //The melee weapons this character uses. Must have at least one.
- UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Wa Combat")
- TArray<FWeaponInfo> MeleeWeapons;
- //The ranged weapons this character uses. Optional.
- UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Wa Combat")
- TArray<FWeaponInfo> RangedWeapons;
- void InitializeWeapons();
- private:
- TMap<FWeaponSlot, TWeakObjectPtr<AWeaponBase>> Weapons;
- //CombatComponent.cpp
- //This functions is called from my EnemyCharacterBase.cpp's BeginPlay(), like this:
- // CombatComponent->SetOwnerSkeletalMesh(GetMesh());
- // CombatComponent->SetOwnerCollision(GetCapsuleComponent());
- // CombatComponent->InitializeWeapons();
- //The reason for this is that the InitializeWeapon function (seen in previous pastebins) requires
- //the skeletal mesh, so I call this function AFTER feeding in the skeletal mesh, to make sure there
- //are no nullpointers.
- void UCombatComponent::InitializeWeapons()
- {
- for (auto Melee : MeleeWeapons)
- {
- if (Melee.WeaponComponent == nullptr)
- {
- Melee.InitializeWeapon(this, GetUniqueWeaponName(), GetSmallestUniqueIndex(), GetOwnerSkeletalMesh());
- AWeaponBase* WeaponObject = Melee.GetWeaponObject();
- if (WeaponObject != nullptr)
- {
- WeaponObject->SetWeaponVisibility(WeaponObject->IsRanged() == bWieldingRanged);
- }
- }
- AWeaponBase* Weapon = Cast<AWeaponBase>(Melee.WeaponComponent->ChildActor);
- if (Weapon == nullptr)
- {
- UE_LOG(WaGeneral, Error, TEXT("WeaponActor class has to be a subclass of AWeaponBase"));
- }
- else
- {
- Weapon->InitializeWeapon(this);
- FWeaponSlot Slot(Melee.AttachSocket, Weapon->IsRanged());
- if (!Weapons.Contains(Slot))
- {
- Weapons.Add(Slot, TWeakObjectPtr<AWeaponBase>(Weapon));
- }
- }
- }
- for (auto Ranged : RangedWeapons)
- {
- if (Ranged.WeaponComponent == nullptr)
- {
- Ranged.InitializeWeapon(this, GetUniqueWeaponName(), GetSmallestUniqueIndex(), GetOwnerSkeletalMesh());
- AWeaponBase* WeaponObject = Ranged.GetWeaponObject();
- if (WeaponObject != nullptr)
- {
- UE_LOG(WaGeneral, Log, TEXT("Ranged visibility..."));
- WeaponObject->SetWeaponVisibility(WeaponObject->IsRanged() == bWieldingRanged);
- }
- }
- AWeaponBase* Weapon = Cast<AWeaponBase>(Ranged.WeaponComponent->ChildActor);
- if (Weapon == nullptr)
- {
- UE_LOG(WaGeneral, Error, TEXT("WeaponActor class has to be a subclass of AWeaponBase"));
- }
- else
- {
- Weapon->InitializeWeapon(this);
- FWeaponSlot Slot(Ranged.AttachSocket, Weapon->IsRanged());
- if (!Weapons.Contains(Slot))
- {
- Weapons.Add(Slot, TWeakObjectPtr<AWeaponBase>(Weapon));
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement