Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //EquipmentManagerObject.cpp
- // Fill out your copyright notice in the Description page of Project Settings.
- #include "MMO.h"
- #include "Characters/MMOCharacter.h"
- #include "EquipmentManagerObject.h"
- /*
- Slots:
- 0 - Head
- 1 - Chest
- 2 - Gloves
- 3- Pants
- 4-Right Hand
- 5-Left Hand
- */
- bool UEquipmentManagerObject::EquipItem(AInventorySlot * Slot, int index)
- {
- if (CharacterRef->GetWorld()->GetNetMode() != NM_DedicatedServer) {
- GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, FString::Printf(TEXT("Equiped")));
- if (EquipSlots.Num() == 0) {
- if (CharacterRef != nullptr) {
- EquipSlots = CharacterRef->MainUMGInstance->EquipmentWidgetRef->EquipmentSlots;
- }
- else {
- return false;
- }
- }
- if (Slot->ItemObject->IsChildOf(AEquipableItem::StaticClass())) {
- switch (Slot->ItemObject->GetDefaultObject<AEquipableItem>()->WereableTypeEnum)
- {
- case EIWereableTypeEnum::IQT_Gloves:
- EquipItemToSlot(Slot, 2, index);
- UpdateSkeletalMesh(2);
- break;
- case EIWereableTypeEnum::IQT_Helmet:
- EquipItemToSlot(Slot, 0, index);
- UpdateSkeletalMesh(0);
- break;
- case EIWereableTypeEnum::IQT_Vest:
- EquipItemToSlot(Slot, 1, index);
- UpdateSkeletalMesh(1);
- break;
- case EIWereableTypeEnum::IQT_Pants:
- EquipItemToSlot(Slot, 3, index);
- UpdateSkeletalMesh(3);
- break;
- case EIWereableTypeEnum::IQT_OneHandedWeapon:
- break;
- case EIWereableTypeEnum::IQT_TwoHandedWeapon:
- break;
- }
- }
- }
- return true;
- }
- bool UEquipmentManagerObject::SwapInventoryEquipmentItems(AInventorySlot* InvSlot, UEquipmentSlotWidget* EquipSlot, int InvIndex) {
- TSubclassOf<AEquipableItem> TempItem;
- TempItem = EquipSlot->Item;
- EquipSlot->Item = *InvSlot->ItemObject;
- InvSlot->ItemObject = TempItem;
- CharacterRef->UpdateSlotAtIndex(InvIndex);
- EquipSlot->UpdateInvSlotUMG();
- return true;
- }
- bool UEquipmentManagerObject::EquipMesh_Client_Validate(int object,int slot) {
- return true;
- }
- void UEquipmentManagerObject::EquipMesh_Client_Implementation(int object, int slot) {
- if (object != -1) {
- SkeletalMeshArray[slot]->SetSkeletalMesh(ObjectArray[object]->GetDefaultObject<AEquipableItem>()->WereableMeshid.LoadSynchronous(), true);
- }
- else {
- SkeletalMeshArray[slot]->SetSkeletalMesh(nullptr, true);
- }
- SkeletalMeshArray[slot]->SetMasterPoseComponent(MasterBoneComponent);
- }
- bool UEquipmentManagerObject::EquipMesh_Server_Validate(int object, int slot) {
- return true;
- }
- void UEquipmentManagerObject::EquipMesh_Server_Implementation(int object, int slot) {
- EquipMesh_Client(object, slot);
- }
- bool UEquipmentManagerObject::UpdateSkeletalMesh(int Slot)
- {
- if (SkeletalMeshArray[Slot] != nullptr) {
- if (EquipSlots[Slot]->Item != nullptr) {
- if (EquipSlots[Slot]->Item->GetDefaultObject<AEquipableItem>()->WereableMeshid.LoadSynchronous() != nullptr) {
- //SkeletalMeshArray[Slot]->SetSkeletalMesh(EquipSlots[Slot]->Item->GetDefaultObject<AEquipableItem>()->WereableMeshid.LoadSynchronous(), true);
- EquipMesh_Server(EquipSlots[Slot]->Item->GetDefaultObject<AEquipableItem>()->Objectint, Slot);
- //SkeletalMeshArray[Slot]->SetMasterPoseComponent(MasterBoneComponent);
- ManqeuinSkeletalMeshArray[Slot]->SetSkeletalMesh(EquipSlots[Slot]->Item->GetDefaultObject<AEquipableItem>()->WereableMeshid.LoadSynchronous(), true);
- ManqeuinSkeletalMeshArray[Slot]->SetMasterPoseComponent(ManqeuinMasterBoneComponent);
- }
- else {
- GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, FString::Printf(TEXT("NullItem")));
- }
- }
- else {
- EquipMesh_Server(-1, Slot);
- //SkeletalMeshArray[Slot]->SetSkeletalMesh(nullptr, true);
- //SkeletalMeshArray[Slot]->SetMasterPoseComponent(MasterBoneComponent);
- ManqeuinSkeletalMeshArray[Slot]->SetSkeletalMesh(nullptr, true);
- ManqeuinSkeletalMeshArray[Slot]->SetMasterPoseComponent(ManqeuinMasterBoneComponent);
- }
- return true;
- }
- else {
- return false;
- }
- }
- void UEquipmentManagerObject::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const
- {
- Super::GetLifetimeReplicatedProps(OutLifetimeProps);
- DOREPLIFETIME(UEquipmentManagerObject, SkeletalMeshArray);
- }
- void UEquipmentManagerObject::SpawnManequin()
- {
- //create manequin at x:-1670 y=520 z=-2252900
- ManequinRef = CharacterRef->GetWorld()->SpawnActor<AEquipmentMannequin>(ManequinClass, FVector(-1670.0f, 520.0f, -2252900.0f), FRotator::ZeroRotator);
- ManqeuinMasterBoneComponent = ManequinRef->FindComponentByClass<USkeletalMeshComponent>();
- for (int i = 0; i < 4; i++) {
- //SkeletalMeshArray[i]= CharacterRef->CreateDefaultSubobject<USkeletalMeshComponent>(TEXT("Skeletal Mesh"));
- FString StrName = TEXT("Skeletal Mesh ") + FString::FromInt(i);
- FName Name = FName(*StrName);
- ManqeuinSkeletalMeshArray.Add(ConstructObject<USkeletalMeshComponent>(USkeletalMeshComponent::StaticClass(), ManequinRef, Name));
- ManqeuinSkeletalMeshArray[i]->SetupAttachment(ManqeuinMasterBoneComponent);
- ManqeuinSkeletalMeshArray[i]->RegisterComponent();
- ManqeuinSkeletalMeshArray[i]->AttachTo(ManqeuinMasterBoneComponent, Name, EAttachLocation::KeepWorldPosition);
- }
- }
- bool UEquipmentManagerObject::AddFromInventory(AInventorySlot* InvSlot, UEquipmentSlotWidget* EquipSlot, int InvIndex) {
- EquipSlot->Item = *InvSlot->ItemObject;
- //Cast<AInventory>(CharacterRef->Inventory->GetChildActor())->RemoveItemAtIndex(InvIndex, InvSlot->Ammount);
- InvSlot->Ammount = 0;
- InvSlot->ItemObject = nullptr;
- CharacterRef->UpdateSlotAtIndex(InvIndex);
- EquipSlot->UpdateInvSlotUMG();
- return true;
- }
- bool UEquipmentManagerObject::EquipItemToSlot(AInventorySlot* SlotObject, int Slot, int InvIndex)
- {
- if (CharacterRef->GetWorld()->GetNetMode() != NM_DedicatedServer) {
- bool replacinganitem = IsValid(EquipSlots[Slot]->Item);
- if (replacinganitem) {
- return SwapInventoryEquipmentItems(SlotObject, EquipSlots[Slot], InvIndex);
- }
- else {
- return AddFromInventory(SlotObject, EquipSlots[Slot], InvIndex);
- }
- }
- return false;
- }
- // Sets default values
- UEquipmentManagerObject::UEquipmentManagerObject()
- {
- static ConstructorHelpers::FClassFinder<AEquipableItem>
- itemBP(TEXT("Blueprint'/Game/Blueprints/Inventory/Items/ChestArmor.ChestArmor_C'"));
- ObjectArray.Push(itemBP.Class);
- // Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
- static ConstructorHelpers::FClassFinder<AEquipmentMannequin>
- ManqeuinFinder(TEXT("Blueprint'/Game/Blueprints/Inventory/EquipmentManequin.EquipmentManequin_C'"));
- if (ManqeuinFinder.Succeeded()) {
- ManequinClass = ManqeuinFinder.Class;
- }
- }
- void UEquipmentManagerObject::ShowEquipment()
- {
- CharacterRef->ShowWidgetWindow();
- CharacterRef->MainUMGInstance->EquipmentWidgetRef->SetVisibility(ESlateVisibility::Visible);
- CharacterRef->SetMouseActive(true);
- IsVisible = true;
- CharacterRef->MainUMGInstance->EquipmentWidgetRef->SetIsEnabled(true);
- }
- void UEquipmentManagerObject::RotateManequin(float rotation)
- {
- FRotator ActorRotation = ManequinRef->GetActorRotation();
- ActorRotation.Yaw += rotation;
- ManequinRef->SetActorRotation(ActorRotation);
- }
- void UEquipmentManagerObject::HideEquipment()
- {
- CharacterRef->HideWidgetWindow();
- CharacterRef->MainUMGInstance->EquipmentWidgetRef->SetVisibility(ESlateVisibility::Hidden);
- IsVisible = false;
- CharacterRef->MainUMGInstance->EquipmentWidgetRef->SetIsEnabled(false);
- FRotator ActorRotation = ManequinRef->GetActorRotation();
- ActorRotation.Yaw = 0;
- ManequinRef->SetActorRotation(ActorRotation);
- }
- void UEquipmentManagerObject::Init(AMMOCharacter * aCharacterRef, USkeletalMeshComponent* aMasterBoneComponent)
- {
- MasterBoneComponent = aMasterBoneComponent;
- CharacterRef = aCharacterRef;
- //EquipSlots = CharacterRef->MainUMGInstance->EquipmentWidgetRef->EquipmentSlots;
- for (int i = 0; i < 4; i++) {
- //SkeletalMeshArray[i]= CharacterRef->CreateDefaultSubobject<USkeletalMeshComponent>(TEXT("Skeletal Mesh"));
- FString StrName = TEXT("Skeletal Mesh ") + FString::FromInt(i);
- FName Name = FName(*StrName);
- SkeletalMeshArray.Add(ConstructObject<USkeletalMeshComponent>(USkeletalMeshComponent::StaticClass(), CharacterRef, Name));
- SkeletalMeshArray[i]->SetupAttachment(MasterBoneComponent);
- SkeletalMeshArray[i]->RegisterComponent();
- SkeletalMeshArray[i]->AttachTo(MasterBoneComponent, Name, EAttachLocation::KeepWorldPosition);
- }
- SpawnManequin();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement