//********************************************************// // // // Copyright © All rights reserved. MyNameIsVoo. 2020. // // // // COPYING FORBIDEN // // // //********************************************************// using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; using ItemsClassList; using ICWM.Loot; using ICWM.Enemy; using ICWM.IconSystem; using ICWM.HelperSystem; using ICWM.StoreSystem; /// /// Class is needed to manipulate the icons in the inventory /// namespace ICWM { namespace DragAndDrop { public class DragHandler : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler { #region Attributes public enum BackpackItemDragged { NONE, STASH, STORE, BACKPACK, TACTICALRIG_OR_POCKETS, BACKPACK_WINDOW, TACTICALRIG_OR_POCKETS_WINDOW } public GameObject icon; // Link to the icon inside the root (we will copy and drag) public bool isActiveDrag; public bool isPlayerSlot; public bool isStashSlot; public bool isStoreSlot; public bool isTacticRigSlot; // Сменить название public bool isBackpackSlot; public bool deleteVSP = false; // Do we delete the icon? public bool isAttached = false; // If true that mean that we attachet an attach on the weapon and we need to open the slots under the item(attachment) public static BackpackItemDragged itemDragged = default; public static GameObject itemIcon; // Link to the root of the icon (PlayerIcon) public static GameObject stash; // To work in the inventory (a dummy, since its coordinate system must be linked to the parent's coordinate system of this object) public static GameObject mBackpack; // To work with the backpack (a dummy, since its coordinate system must be tied to the parent's coordinate system of this object) public static GameObject mBackpackEnemy; public static bool isPlayer = false; public static bool isPlayerBackpack = false; public static bool isEnemy = false; public static bool isEnemyBackpack = false; public static bool isExchangeInventory; // If we change places in the inventory public static bool isExchangePlayerSlot; // If we change places from inventory to a slot public static bool isDeleteIcon; // Removing the icon from the inventory public static bool canNotBeMoved = false; // Indicates that you can not drag private Quaternion startRotation; // To remember the original angle of the icon (for tracking, if we turned and returned it to the basic state, we do not need to do anything) private Transform startParent; // Original root (to check where we release our icon) private GameObject vspInstance; private GameObject m_vspBackpackWindow; // Временно хранит ссылку на окно рюкзака, от куда была взята иконка private Vector2 startIndexPos60x60; // Remembers the original size of the icon private Vector2 screenCoef = Vector2.zero; private bool isBackpackItem; private bool isTagSize2x1; // To keep track of, but are we trying to throw this tag into the backpack where you can not just throw private bool isActive; private bool isRotatedIcon = false; private bool isChangeEnemyItemRoot = false; public ItemList CL = new ItemList(); #endregion private void Update() { if (isActiveDrag) // If we drag, then update the position of the dummy { UpdateDummiesPosition(); isActiveDrag = false; } // Rotate icons if (isActive && !CL.isLockRotate && Input.GetKeyDown(KeyCode.R) && !StoreBase.instance.isActive) UpdateDummiesRotation(); } #region PUBLIC #region Drag & Drop public void OnBeginDrag(PointerEventData eventData) // When pressed and held { if (Input.GetMouseButton(1) || Input.GetMouseButton(2)) return; CL = gameObject.GetComponentInChildren().CL; screenCoef = Helper.CalculateScreenCoefficient(); // // Audio // if (InventoryBase.instance.a_AudioSelected) { InventoryBase.instance.audioSource.clip = InventoryBase.instance.a_AudioSelected; InventoryBase.instance.audioSource.PlayOneShot(InventoryBase.instance.audioSource.clip); } // // Create the icon // vspInstance = (GameObject)Instantiate(icon, InventoryBase.instance.RootIconSpawnPlayer.transform); vspInstance.name = "vspInstance"; vspInstance.transform.localScale = Vector3.one; vspInstance.transform.localRotation = icon.transform.localRotation; vspInstance.transform.localPosition = Vector3.zero; vspInstance.GetComponent().raycastTarget = false; if (GetComponent()) // To avoid self-targeting GetComponent().blocksRaycasts = false; else GetComponentInParent().blocksRaycasts = false; CreateDummies(); // // // itemIcon = gameObject; if (itemIcon.GetComponentInParent() && itemIcon.GetComponentInParent().IsPlayerSlot) { isPlayerSlot = true; isPlayer = true; } else { isPlayerSlot = false; } if (itemIcon.GetComponentInParent() && itemIcon.GetComponentInParent().IsStoreInventory) isStoreSlot = true; // // // if (MouseInterStashInventory.instance && MouseInterStashInventory.instance.isActive) // If we drag from the inventory, we release the place under it { itemDragged = BackpackItemDragged.STASH; StashSystem.instance.OpenIndicesBackpackByIconPosition(CL.indexPos60x60, GetComponent().startPos); StashSystem.instance.GetUpdateAssistent().UpdateIconTextBackpack(); if (CL.tagSize == ItemList.SizeIconInventory.Size2x1) isTagSize2x1 = true; } else if (MouseEnterStoreInventory.instance && MouseEnterStoreInventory.instance.isActive) { itemDragged = BackpackItemDragged.STORE; } else if (MouseEnterBackpack.instance && MouseEnterBackpack.instance.IsActive) // We take from the backpack { if (GetComponentInParent()) // If there is a parent, then block it (if it's a weapon slot or a backpack slot) { if (GetComponentInParent().transform.GetComponent()) GetComponentInParent().transform.GetComponent().blocksRaycasts = false; } isPlayerBackpack = true; isBackpackItem = true; if (CL.isPutOn && CL.IsBackpackItemSlot()) BackpackSystem.instance.SaveItemSlots(CL, null, false); if (isBackpackSlot) { BackpackSystem.instance.OpenIndicesBackpackByIconPosition(CL.indexPos60x60, GetComponent().startPos); } else { if (CL.tagItem == ItemList.TagItems.BODYBACKPACK) // To prevent that the backpack itself put in itself - this does not happen BackpackSystem.instance.rootBackpackCells.GetComponent().blocksRaycasts = false; BackpackSystem.instance.OpenIndicesTacticalRigPockets(CL); } itemDragged = isBackpackSlot ? BackpackItemDragged.BACKPACK : BackpackItemDragged.TACTICALRIG_OR_POCKETS; } // // Backpack Window // else if (BackpackSystem.instance.m_vspBackpackWindow && BackpackSystem.instance.m_vspBackpackWindow.GetComponentInChildren() && BackpackSystem.instance.m_vspBackpackWindow.GetComponentInChildren().isActive) // We take from the window (backpack) { if (GetComponentInParent()) // If there is a parent, then block it (if it's a weapon slot or a backpack slot) { if (GetComponentInParent().transform.GetComponent()) GetComponentInParent().transform.GetComponent().blocksRaycasts = false; } itemDragged = BackpackItemDragged.BACKPACK_WINDOW; BackpackSystem.instance.m_vspBackpackWindow.GetComponentInChildren().OpenIndicesBackpackByIconPosition(CL.indexPos60x60, GetComponent().startPos); m_vspBackpackWindow = BackpackSystem.instance.m_vspBackpackWindow; } // // Tactical Rig \ Pockets window // else if (BackpackSystem.instance.m_vspBackpackWindow && BackpackSystem.instance.m_vspBackpackWindow.GetComponentInChildren() && BackpackSystem.instance.m_vspBackpackWindow.GetComponentInChildren().isActive) // We take from the window (tactical rig, pockets) { if (GetComponentInParent()) // If there is a parent, then block it (if it's a weapon slot or a backpack slot) { if (GetComponentInParent().transform.GetComponent()) GetComponentInParent().transform.GetComponent().blocksRaycasts = false; } itemDragged = BackpackItemDragged.TACTICALRIG_OR_POCKETS_WINDOW; BackpackSystem.instance.m_vspBackpackWindow.GetComponentInChildren().OpenIndicesTacticalRigPockets(CL); m_vspBackpackWindow = BackpackSystem.instance.m_vspBackpackWindow; } // // Enemy backpack slots // else if (MouseEnterEnemyBackpack.instance && MouseEnterEnemyBackpack.instance.isActive) // We take from the backpack { if (GetComponentInParent()) // If there is a parent, then block it (if it's a weapon slot or a backpack slot) { if (GetComponentInParent().transform.GetComponent()) GetComponentInParent().transform.GetComponent().blocksRaycasts = false; } isEnemyBackpack = true; isBackpackItem = true; if (CL.isPutOn && CL.IsBackpackItemSlot()) BackpackEnemyBase.instance.SaveSlotItems(CL, null, false); if (isBackpackSlot) { BackpackEnemyBase.instance.OpenIndicesBackpackByIconPosition(CL.indexPos60x60, GetComponent().startPos); } else { if (CL.tagItem == ItemList.TagItems.BODYBACKPACK) // To prevent that the backpack itself put in itself - this does not happen BackpackEnemyBase.instance.rootBackpack.GetComponent().blocksRaycasts = false; BackpackEnemyBase.instance.OpenIndicesTacticalRigPockets(CL); } itemDragged = isBackpackSlot ? BackpackItemDragged.BACKPACK : BackpackItemDragged.TACTICALRIG_OR_POCKETS; } else if (MouseEnterEnemyPlayerSlots.instance && MouseEnterEnemyPlayerSlots.instance.isActive) { isEnemy = true; } // // // // Remember... startRotation = icon.transform.localRotation; startIndexPos60x60 = CL.indexPos60x60; startParent = transform.parent; GetComponent().startPos = transform.localPosition; // At each start, remember the starting position (for certainty) InventoryBase.instance.CL = CL; // Remember, then send to PointEnterIcon1x1 InventoryBase.instance.isDragHandlerIcon = true; // We are dragging something Helper.SetImageAlpha(icon.GetComponent(), 0.5f); // Darken the original icon (when we drag) isActive = true; } public void OnDrag(PointerEventData eventData) // When we drag { if (!isActive) return; isActiveDrag = true; Vector2 newPos; newPos.x = Input.mousePosition.x + Input.mousePosition.x * screenCoef.x; // Add percentage newPos.y = Input.mousePosition.y + Input.mousePosition.y * screenCoef.y; // Update the position of the icon when we move the mouse vspInstance.transform.localPosition = newPos; } public void OnEndDrag(PointerEventData eventData) // When we drop { if (!isActive) return; if (!isDeleteIcon) { GetComponent().blocksRaycasts = true; if (transform.parent != startParent) DropItemOnLocations(); else DropItemToSartLocation(); } else { Destroy(gameObject); } CloseDragHandler(); } #endregion #region Helpers public void SetReserveParameters(ItemList cl, bool mode) { if (mode) { cl.isPlayerSlot = cl.isStashSlot = cl.isTacticRigSlot = cl.isBackpackSlot = false; // Reset if (isPlayerSlot) cl.isPlayerSlot = isPlayerSlot; else if (isStashSlot) cl.isStashSlot = isStashSlot; else if (isTacticRigSlot) cl.isTacticRigSlot = isTacticRigSlot; else if (isBackpackSlot) cl.isBackpackSlot = isBackpackSlot; isPlayerSlot = isStashSlot = isTacticRigSlot = isBackpackSlot = false; // Reset } else { isPlayerSlot = isStashSlot = isTacticRigSlot = isBackpackSlot = false; if (cl.isPlayerSlot) isPlayerSlot = cl.isPlayerSlot; else if (cl.isStashSlot) isStashSlot = cl.isStashSlot; else if (cl.isTacticRigSlot) isTacticRigSlot = cl.isTacticRigSlot; else if (cl.isBackpackSlot) isBackpackSlot = cl.isBackpackSlot; cl.isPlayerSlot = cl.isStashSlot = cl.isTacticRigSlot = cl.isBackpackSlot = false; } } #endregion #endregion #region PRIVATE #region Update private void UpdateDummiesPosition() { if (stash) { stash.transform.position = vspInstance.transform.position; stash.transform.localRotation = vspInstance.transform.localRotation; } if (mBackpack) { mBackpack.transform.position = vspInstance.transform.position; mBackpack.transform.localRotation = vspInstance.transform.localRotation; } if (mBackpackEnemy) { mBackpackEnemy.transform.position = vspInstance.transform.position; mBackpackEnemy.transform.localRotation = vspInstance.transform.localRotation; } BackpackSystem.instance.UpdateBackpackDummyPosition(vspInstance); } private void UpdateDummiesRotation() { // Here the icon turns // Can only call when we drag and drop the icons // There is no sense in turning icons 1x1 and mn if (itemDragged == BackpackItemDragged.STASH && LootBase.instance.isLootWindowMode) return; isRotatedIcon = true; if (vspInstance.transform.localRotation == Quaternion.Euler(Vector3.zero)) { vspInstance.transform.localRotation = Quaternion.Euler(new Vector3(0f, 0f, -90f)); // Turn clockwise int x = (int)CL.indexPos60x60.x; CL.indexPos60x60.x = CL.indexPos60x60.y; CL.indexPos60x60.y = x; } else { vspInstance.transform.localRotation = Quaternion.Euler(Vector3.zero); // Return to the original state int y = (int)CL.indexPos60x60.y; CL.indexPos60x60.y = CL.indexPos60x60.x; CL.indexPos60x60.x = y; } CL.tagSize = CL.GetReverseCurrentSizeTag(); // Changes the tag size // In advance, if in one session (i.e., for one drag and drop) after a series of angle changes, we still returned to the basic condition, then do nothing if (vspInstance.transform.localRotation == startRotation) isRotatedIcon = false; if (stash) stash.transform.localRotation = vspInstance.transform.localRotation; if (mBackpack) mBackpack.transform.localRotation = vspInstance.transform.localRotation; if (mBackpackEnemy) mBackpackEnemy.transform.localRotation = vspInstance.transform.localRotation; BackpackSystem.instance.UpdateBackpackDummyPosition(vspInstance); // We update the parameter, because it is passed to the PointEnterIcon1x1 method and draws the field InventoryBase.instance.CL = CL; } #endregion #region Another Location private void DropItemOnLocations() { if (transform.GetComponentInChildren().CL.tagItem == CL.tagItem) // If the tags are equal, change places { if (!isExchangePlayerSlot) // If we do not change the places inventory to slot { if (!BackpackSystem.instance.RE4O_IsActive() && MouseEnterPlayerInventory.instance && MouseEnterPlayerInventory.instance.isActive) // If we are in slots for the player (ie from the inventory we drag into slots) DropInPlayersSlots(); else if (!BackpackSystem.instance.RE4O_IsActive() && MouseEnterEnemyPlayerSlots.instance && MouseEnterEnemyPlayerSlots.instance.isActive) // If we are in slots for the player (ie from the inventory we drag into slots) DropInEnemySlots(); if (MouseEnterBackpack.instance && MouseEnterBackpack.instance.IsActive) // In the backpack DropInPlayerBackpack(); else if (MouseEnterEnemyBackpack.instance && MouseEnterEnemyBackpack.instance.isActive) // In the backpack DropInEnemyBackpack(); } else if (!isPlayerSlot && isStashSlot) // If we take from the inventory and drop it the slot for the player StashSystem.instance.CloseIndicesBackpackByIconPosition(CL.indexPos60x60, GetComponent().startPos); } if (vspInstance) Destroy(vspInstance); if (stash) Destroy(stash); } private void DropInPlayersSlots() { bool canChangeSize = false; bool isCreatedIcon = false; if (isRotatedIcon) // If turned and if we drop it in some other place (not on the icon or in inventory) we return to the basic size { if (!canNotBeMoved) canChangeSize = PlayerSystem.instance.CreateNewIcon(itemIcon, CL, transform.parent, false, isRotatedIcon); // transform.parent - you can not transfer deleteVSP = true; isCreatedIcon = true; } if (CL.itWasRotated && !canChangeSize && !isCreatedIcon) // Если мы перетаскиваем уже поверную иконку { canChangeSize = PlayerSystem.instance.CreateNewIcon(itemIcon, CL, transform.parent, true); deleteVSP = true; } if (!canChangeSize) ExchangeIconsSize(); // // In Player Slots // if (isBackpackSlot) // If from a backpack { if (transform.parent == startParent) // If the parent does not changed - close { if (isRotatedIcon) { CL.indexPos60x60 = startIndexPos60x60; CL.tagSize = CL.GetReverseCurrentSizeTag(); } if (isPlayerBackpack) BackpackSystem.instance.CloseIndicesBackpackByIconPosition(CL.indexPos60x60, GetComponent().startPos); else if (isEnemyBackpack) BackpackEnemyBase.instance.CloseIndicesBackpackByIconPosition(CL.indexPos60x60, GetComponent().startPos); } } else if (itemDragged == BackpackItemDragged.STASH) // From inventory { if (!deleteVSP) StashSystem.instance.OpenIndicesBackpackByIconPosition(GetComponent().startPos, CL.indexPos60x60); if (LootBase.instance.isLootWindowMode || LootBase.instance.isLootWindow) { if (CL.IsRenderItem()) CL.SetItemModdingParameters(false, InventoryBase.instance.RootSpawnWeaponModding.transform); else CL.SetItemModdingParameters(false, InventoryBase.instance.RootSpawnItemsAttach.transform); if (CL.destroyItemDrop) Destroy(CL.destroyItemDrop); } } } private void DropInEnemySlots() { if (!isPlayerSlot) // From backpack { bool canChangeSize = false; bool isCreatedIcon = false; if (isRotatedIcon) // If turned and if we drop it in some other place (not on the icon or in inventory) we return to the basic size { if (!canNotBeMoved) canChangeSize = PlayerEnemySystem.instance.CreateNewIcon(itemIcon, CL, transform.parent, false, isRotatedIcon); // transform.parent - you can not transfer deleteVSP = true; isCreatedIcon = true; } if (CL.itWasRotated && !canChangeSize && !isCreatedIcon) { canChangeSize = PlayerEnemySystem.instance.CreateNewIcon(itemIcon, CL, transform.parent, true); deleteVSP = true; } if (!canChangeSize) ExchangeIconsSize(); // // In Player Slots // if (isBackpackSlot) // If from a backpack { if (transform.parent == startParent) // If the parent does not change - close { if (isRotatedIcon) { CL.indexPos60x60 = startIndexPos60x60; CL.tagSize = CL.GetReverseCurrentSizeTag(); } if (isPlayerBackpack) BackpackSystem.instance.CloseIndicesBackpackByIconPosition(CL.indexPos60x60, GetComponent().startPos); else if (isEnemyBackpack) BackpackEnemyBase.instance.CloseIndicesBackpackByIconPosition(CL.indexPos60x60, GetComponent().startPos); } } else if (itemDragged == BackpackItemDragged.STASH && !deleteVSP) // From inventory { StashSystem.instance.OpenIndicesBackpackByIconPosition(GetComponent().startPos, CL.indexPos60x60); } } SetEnemyItemPutOn(); } private void DropInPlayerBackpack() { if (!isExchangeInventory) // If we do not interchange the two items with each other { if (isEnemyBackpack && CL.IsBackpackItemSlot() && CL.isPutOn) BackpackEnemyBase.instance.OpenCells(CL); if (!canNotBeMoved) BackpackSystem.instance.UpdateIconPositionAfterDropOnTacticalRigOrPocketsSlot(itemIcon, CL, isRotatedIcon, startParent, isPlayerSlot, isEnemyBackpack, itemDragged); } } private void DropInEnemyBackpack() { if (!isExchangeInventory) // If we do not interchange the two items with each other { if (isPlayerBackpack && CL.IsBackpackItemSlot() && CL.isPutOn) BackpackSystem.instance.OpenCells(CL); if (!canNotBeMoved) { BackpackEnemyBase.instance.UpdateIconPositionAfterDropOnTacticalRigOrPocketsSlot(itemIcon, CL, isRotatedIcon, startParent, isPlayerSlot, true, itemDragged); CheckRootItem(); } } } private void SetEnemyItemPutOn() { CL.isPutOn = true; CL.isEnemyItem = true; // CL.DestroyItemDrop - т.к. в скрипте Slot мы создали в корне Енеми префам ItemDrop InventoryBase.instance.inventoryEnemy.GetComponent().PutOnSlots(CL, CL.destroyItemDrop); } #endregion #region Start Location private void DropItemToSartLocation() { if (!isExchangeInventory) // If we do not change the places 2 items in the inventory { // If we are in the inventory if (MouseInterStashInventory.instance && MouseInterStashInventory.instance.isActive && itemDragged != DragHandler.BackpackItemDragged.STORE) { DropInStashSlotsByStartLoc(); } else if ((MouseEnterBackpack.instance && MouseEnterBackpack.instance.IsActive) || (MouseEnterEnemyBackpack.instance && MouseEnterEnemyBackpack.instance.isActive)) // In the backpack { DropInBackpackTacticalRigPocketsByStartLoc(); } else if (BackpackSystem.instance.m_vspBackpackWindow && ((BackpackSystem.instance.m_vspBackpackWindow.GetComponentInChildren() && BackpackSystem.instance.m_vspBackpackWindow.GetComponentInChildren().isActive) || (BackpackSystem.instance.m_vspBackpackWindow.GetComponentInChildren() && BackpackSystem.instance.m_vspBackpackWindow.GetComponentInChildren().isActive))) // In the backpack/tactical rig /pockets window { DropInBackpackTacticalRigPocketsWindowByStartLoc(); } else { DropInPlayersSlotsByStartLoc(); } } else // If we swap 2 items in the inventory { if (isRotatedIcon) // If turned and if we drop it in some other place (not on the icon or in inventory) we return to the basic state { CL.indexPos60x60 = startIndexPos60x60; CL.tagSize = CL.GetReverseCurrentSizeTag(); } StashSystem.instance.CloseIndicesBackpackByIconPosition(CL.indexPos60x60, GetComponent().startPos); } } private void DropInBackpackTacticalRigPocketsByStartLoc() { // // Player BACKPACK // if (MouseEnterBackpackSlot.instance && MouseEnterBackpackSlot.instance.IsActive && BackpackSystem.instance.GetBackpackInfo().isActiveBackpack) // If we drop in a backpack { if (!canNotBeMoved) { if (MouseEnterEnemyBackpackSlots.instance && MouseEnterEnemyBackpackSlots.instance.isActive && BackpackEnemyBase.instance.GetBackpackInfo().isActiveBackpack) // Куда переносим { deleteVSP = BackpackSystem.instance.UpdateIconPositionAfterDropInBackpack(mBackpackEnemy.transform, CL, itemIcon, GetComponent().startPos, isPlayerSlot, isRotatedIcon, isBackpackItem, isEnemyBackpack, itemDragged); } if (BackpackSystem.instance.m_vspBackpackWindow && BackpackSystem.instance.m_vspBackpackWindow.GetComponentInChildren() && BackpackSystem.instance.m_vspBackpackWindow.GetComponentInChildren().isActive) { deleteVSP = BackpackSystem.instance.UpdateIconPositionAfterDropInBackpack(BackpackSystem.instance.m_vspBackpackWindow.GetComponentInChildren().mBackpackWindow.transform, CL, itemIcon, GetComponent().startPos, isPlayerSlot, isRotatedIcon, isBackpackItem, isEnemyBackpack, itemDragged); } else // { CloseAllOpendBackpackWindows(); deleteVSP = BackpackSystem.instance.UpdateIconPositionAfterDropInBackpack(mBackpack.transform, CL, itemIcon, GetComponent().startPos, isPlayerSlot, isRotatedIcon, isBackpackItem, isEnemyBackpack, itemDragged); } } GetComponent().startPos = itemIcon.transform.localPosition; // Change the original position of the icon in the inventory // If we do not reassign the parent (ie, drop into the empty place or there is no place or simply drop in the inventory) if (transform.parent == startParent) CloseBackpackSlots(); else OpenBackpackSlots(); } // // Enemy backpack // else if (MouseEnterEnemyBackpackSlots.instance && MouseEnterEnemyBackpackSlots.instance.isActive && BackpackEnemyBase.instance.GetBackpackInfo().isActiveBackpack) // If we drop in a backpack (that is, in this little ***) { if (!canNotBeMoved) { if (MouseEnterBackpackSlot.instance && MouseEnterBackpackSlot.instance.IsActive && BackpackSystem.instance.GetBackpackInfo().isActiveBackpack) { deleteVSP = BackpackEnemyBase.instance.UpdateIconPositionAfterDropInBackpack(mBackpack.transform, CL, itemIcon, GetComponent().startPos, isPlayerSlot, isRotatedIcon, isBackpackItem, itemDragged); } else if (BackpackSystem.instance.m_vspBackpackWindow && ((BackpackSystem.instance.m_vspBackpackWindow.GetComponentInChildren() && BackpackSystem.instance.m_vspBackpackWindow.GetComponentInChildren().isActive) || (BackpackSystem.instance.m_vspBackpackWindow.GetComponentInChildren() && BackpackSystem.instance.m_vspBackpackWindow.GetComponentInChildren().isActive)) && !BackpackSystem.instance.RE4O_IsActive() && !BackpackSystem.instance.RE4_IsActive()) { deleteVSP = BackpackEnemyBase.instance.UpdateIconPositionAfterDropInBackpack(BackpackSystem.instance.m_vspBackpackWindow.GetComponentInChildren().mBackpackWindow.transform, CL, itemIcon, GetComponent().startPos, isPlayerSlot, isRotatedIcon, isBackpackItem, itemDragged); } else { CloseAllOpendBackpackWindows(); deleteVSP = BackpackEnemyBase.instance.UpdateIconPositionAfterDropInBackpack(mBackpackEnemy.transform, CL, itemIcon, GetComponent().startPos, isPlayerSlot, isRotatedIcon, isBackpackItem, itemDragged); } } GetComponent().startPos = itemIcon.transform.localPosition; // Change the original position of the icon in the inventory // If we do not reassign the parent (ie, drop into the empty place or there is no place or simply drop in the inventory) if (transform.parent == startParent) CloseBackpackSlots(); else OpenBackpackSlots(); } // // TACTICAL RIG, POCKETS // else { bool flag = false; if (!canNotBeMoved) { if (MouseEnterBackpack.instance && MouseEnterBackpack.instance.IsActive) // в слоты игрока { flag = BackpackSystem.instance.UpdateIconPositionAfterDropOnTacticalRigOrPocketsSlot(itemIcon, CL, isRotatedIcon, startParent, isPlayerSlot, isEnemyBackpack, itemDragged); } else if (MouseEnterEnemyBackpack.instance && MouseEnterEnemyBackpack.instance.isActive) // Если переносим в слоты другого инвентаря { flag = BackpackEnemyBase.instance.UpdateIconPositionAfterDropOnTacticalRigOrPocketsSlot(itemIcon, CL, isRotatedIcon, startParent, isPlayerSlot, isPlayerBackpack, itemDragged); } } // Many stupid situations happen during the rearrangement of icons, for example: // from the inventory raised - turned a couple of hundred times - it did not rise in its original position (ie if we once clicked on the turn) // and after they drop it in a backpack where such icons are forbidden, here, now it is necessary to return everything in a condition if (transform.parent == startParent && !deleteVSP) // If we do not reassign the parent (ie, drop into the empty place or not) { if (itemDragged != BackpackItemDragged.STASH) // If in a backpack (or tactical rig) { if (isBackpackSlot) { if (isRotatedIcon) { CL.indexPos60x60 = startIndexPos60x60; CL.tagSize = CL.GetReverseCurrentSizeTag(); } if (isPlayerBackpack) BackpackSystem.instance.CloseIndicesBackpackByIconPosition(CL.indexPos60x60, GetComponent().startPos); else if (isEnemyBackpack) BackpackEnemyBase.instance.CloseIndicesBackpackByIconPosition(CL.indexPos60x60, GetComponent().startPos); else if (itemDragged == DragHandler.BackpackItemDragged.BACKPACK_WINDOW && m_vspBackpackWindow) m_vspBackpackWindow.GetComponentInChildren().CloseIndicesBackpackByIconPosition(CL.indexPos60x60, GetComponent().startPos); else if (itemDragged == DragHandler.BackpackItemDragged.TACTICALRIG_OR_POCKETS_WINDOW && m_vspBackpackWindow) m_vspBackpackWindow.GetComponentInChildren().CloseIndicesTacticalRigPockets(CL); } else if (itemDragged == DragHandler.BackpackItemDragged.BACKPACK_WINDOW && m_vspBackpackWindow) { m_vspBackpackWindow.GetComponentInChildren().CloseIndicesBackpackByIconPosition(CL.indexPos60x60, GetComponent().startPos); } else if (itemDragged == DragHandler.BackpackItemDragged.TACTICALRIG_OR_POCKETS_WINDOW && m_vspBackpackWindow) { m_vspBackpackWindow.GetComponentInChildren().CloseIndicesTacticalRigPockets(CL); } else { if (!isPlayerSlot) { if (isRotatedIcon) { CL.indexPos60x60 = startIndexPos60x60; CL.tagSize = CL.GetReverseCurrentSizeTag(); } if (isPlayerBackpack) BackpackSystem.instance.CloseIndicesTacticalRigPockets(CL); else if (isEnemyBackpack) BackpackEnemyBase.instance.CloseIndicesTacticalRigPockets(CL); } else { if (MouseEnterEnemyPlayerSlots.instance && MouseEnterEnemyPlayerSlots.instance.isActive) PlayerEnemySystem.instance.UpdatePlayerSlotOnDrop(CL); else StartCoroutine(PlayerSystem.instance.UpdatePlayerSlotOnDropEndOfFrame(CL)); // Next frame we will update the slots } } } else if (isBackpackSlot) // From a backpack to pockets or tactical rig { if (isRotatedIcon) { CL.indexPos60x60 = startIndexPos60x60; CL.tagSize = CL.GetReverseCurrentSizeTag(); } if (isPlayerBackpack) BackpackSystem.instance.CloseIndicesBackpackByIconPosition(CL.indexPos60x60, GetComponent().startPos); else if (isEnemyBackpack) BackpackEnemyBase.instance.CloseIndicesBackpackByIconPosition(CL.indexPos60x60, GetComponent().startPos); } else { if (isRotatedIcon) { CL.indexPos60x60 = startIndexPos60x60; CL.tagSize = CL.GetReverseCurrentSizeTag(); } StashSystem.instance.CloseIndicesBackpackByIconPosition(CL.indexPos60x60, GetComponent().startPos); } } else { if (flag && itemDragged == BackpackItemDragged.STASH) // If we drag from the inventory into the backpack and at the same time there is no place { if (isRotatedIcon) { CL.indexPos60x60 = startIndexPos60x60; CL.tagSize = CL.GetReverseCurrentSizeTag(); } StashSystem.instance.CloseIndicesBackpackByIconPosition(CL.indexPos60x60, GetComponent().startPos); } else if (!flag) { if (!isRotatedIcon && itemDragged == BackpackItemDragged.STASH && isTagSize2x1) { StashSystem.instance.CloseIndicesBackpackByIconPosition(CL.indexPos60x60, GetComponent().startPos); } else if (isRotatedIcon) { if (itemDragged == BackpackItemDragged.STASH && CL.tagSize == ItemList.SizeIconInventory.Size2x1) { StashSystem.instance.CloseIndicesBackpackByIconPosition(CL.indexPos60x60, GetComponent().startPos); } else if (itemDragged != BackpackItemDragged.STASH) // If in the backpack everything happens { if (isPlayerBackpack) BackpackSystem.instance.CloseIndicesTacticalRigPockets(CL); else if (isEnemyBackpack) BackpackEnemyBase.instance.CloseIndicesTacticalRigPockets(CL); } } } } } if (transform.parent != startParent) CheckRootItem(); } private void DropInBackpackTacticalRigPocketsWindowByStartLoc() { if (!canNotBeMoved && BackpackSystem.instance.m_vspBackpackWindow) { if (MouseEnterEnemyBackpackSlots.instance && MouseEnterEnemyBackpackSlots.instance.isActive && BackpackEnemyBase.instance.GetBackpackInfo().isActiveBackpack) // Куда переносим { deleteVSP = BackpackSystem.instance.m_vspBackpackWindow.GetComponentInChildren().UpdateIconPositionAfterDropInBackpack(mBackpackEnemy.transform, CL, itemIcon, GetComponent().startPos, isPlayerSlot, isRotatedIcon, isBackpackItem, isEnemyBackpack, itemDragged); } else if (BackpackSystem.instance.m_vspBackpackWindow.GetComponentInChildren() && BackpackSystem.instance.m_vspBackpackWindow.GetComponentInChildren().isActive) // Куда переносим { if (!CanDestrorItemIcon()) deleteVSP = BackpackSystem.instance.m_vspBackpackWindow.GetComponentInChildren().UpdateIconPositionAfterDropInBackpack(BackpackSystem.instance.m_vspBackpackWindow.GetComponentInChildren().mBackpackWindow.transform, CL, itemIcon, GetComponent().startPos, isPlayerSlot, isRotatedIcon, isBackpackItem, isEnemyBackpack, itemDragged); } else if (BackpackSystem.instance.m_vspBackpackWindow.GetComponentInChildren() && BackpackSystem.instance.m_vspBackpackWindow.GetComponentInChildren().isActive) // Куда переносим { if (!CanDestrorItemIcon()) BackpackSystem.instance.m_vspBackpackWindow.GetComponentInChildren().UpdateIconPositionAfterDropOnTacticalRigOrPocketsSlot(itemIcon, CL, isRotatedIcon, startParent, isPlayerSlot, itemDragged); } else // { deleteVSP = BackpackSystem.instance.m_vspBackpackWindow.GetComponentInChildren().UpdateIconPositionAfterDropInBackpack(mBackpack.transform, CL, itemIcon, GetComponent().startPos, isPlayerSlot, isRotatedIcon, isBackpackItem, isEnemyBackpack, itemDragged); } } GetComponent().startPos = itemIcon.transform.localPosition; // Change the original position of the icon in the inventory // If we do not reassign the parent (ie, drop into the empty place or there is no place or simply drop in the inventory) if (transform.parent == startParent && !deleteVSP) CloseBackpackSlots(); else OpenBackpackSlots(); if (transform.parent != startParent) CheckRootItem(); } private void DropInPlayersSlotsByStartLoc() { // // PLAYER SLOTS // if (!BackpackSystem.instance.RE4O_IsActive() && MouseEnterPlayerInventory.instance && !MouseEnterPlayerInventory.instance.isActive) { if (!isPlayerSlot) // If we do not drag from the player's slot (not to close our area) CloseBackpackSlotsFromPlayer(); } else if (!BackpackSystem.instance.RE4O_IsActive() && MouseEnterEnemyPlayerSlots.instance && !MouseEnterEnemyPlayerSlots.instance.isActive) { if (!isPlayerSlot) // If we do not drag from the player's slot (not to close our area) CloseBackpackSlotsFromPlayer(); } else { if (!isPlayerSlot) // If we do not drag from the player's slot (not to close our area) { if (itemDragged == BackpackItemDragged.STASH) { if (isRotatedIcon) // If turned and if we drop it in some other place (not on the icon or in inventory) we return to the basic state { CL.indexPos60x60 = startIndexPos60x60; CL.tagSize = CL.GetReverseCurrentSizeTag(); } if (!isAttached) StashSystem.instance.CloseIndicesBackpackByIconPosition(CL.indexPos60x60, GetComponent().startPos); } else if (isBackpackSlot) // If we drag from the backpack into a slot { if (isRotatedIcon) { CL.indexPos60x60 = startIndexPos60x60; CL.tagSize = CL.GetReverseCurrentSizeTag(); } if (isPlayerBackpack) { if (!isAttached) { BackpackSystem.instance.CloseIndicesBackpackByIconPosition(CL.indexPos60x60, GetComponent().startPos); } } else if (isEnemyBackpack) { BackpackEnemyBase.instance.CloseIndicesBackpackByIconPosition(CL.indexPos60x60, GetComponent().startPos); } else if (itemDragged == BackpackItemDragged.BACKPACK_WINDOW && m_vspBackpackWindow) { m_vspBackpackWindow.GetComponentInChildren().CloseIndicesBackpackByIconPosition(CL.indexPos60x60, GetComponent().startPos); } } else if (itemDragged == BackpackItemDragged.BACKPACK_WINDOW && m_vspBackpackWindow) { m_vspBackpackWindow.GetComponentInChildren().CloseIndicesBackpackByIconPosition(CL.indexPos60x60, GetComponent().startPos); } else if (itemDragged == BackpackItemDragged.TACTICALRIG_OR_POCKETS_WINDOW && m_vspBackpackWindow) { m_vspBackpackWindow.GetComponentInChildren().CloseIndicesTacticalRigPockets(CL); } else if (itemDragged == BackpackItemDragged.TACTICALRIG_OR_POCKETS) { if (isPlayerBackpack && !isAttached) // We can't close the index if we attached an item on the weapon BackpackSystem.instance.CloseIndicesTacticalRigPockets(CL); else if (isEnemyBackpack) BackpackSystem.instance.CloseIndicesTacticalRigPockets(CL); } } else { if (isRotatedIcon) // If turned and if we drop it in some other place (not on the icon or in inventory) we return to the basic state { CL.indexPos60x60 = startIndexPos60x60; CL.tagSize = CL.GetReverseCurrentSizeTag(); } } } } private void DropInStashSlotsByStartLoc() { // // STASH // // // We perform the appropriate calculations // if (!canNotBeMoved && StoreBase.instance && !StoreBase.instance.isActive) // Для всего магазина { CloseAllOpendBackpackWindows(); deleteVSP = StashSystem.instance.UpdateIconPositionAfterDropInStash(stash.transform, CL, itemIcon, GetComponent().startPos, isPlayerSlot, isRotatedIcon, isBackpackSlot, itemDragged); } GetComponent().startPos = itemIcon.transform.localPosition; // Change the original position of the icon in the inventory // //// We check, and we drop the backpack in the Stash or something like that // if (itemDragged == BackpackItemDragged.TACTICALRIG_OR_POCKETS) // With tactical rig or pockets { if (transform.parent != startParent) // We look, but we actually dropped OpenBackpackSlots(); } else if (isBackpackSlot && !deleteVSP) // From the backpack { if (transform.parent == startParent) // Look, if the parent has not changed, you need to close the place under the icon { if (isRotatedIcon) { CL.indexPos60x60 = startIndexPos60x60; CL.tagSize = CL.GetReverseCurrentSizeTag(); } if (isPlayerBackpack) BackpackSystem.instance.CloseIndicesBackpackByIconPosition(CL.indexPos60x60, GetComponent().startPos); else if (isEnemyBackpack) BackpackEnemyBase.instance.CloseIndicesBackpackByIconPosition(CL.indexPos60x60, GetComponent().startPos); else if (itemDragged == BackpackItemDragged.BACKPACK_WINDOW && m_vspBackpackWindow) m_vspBackpackWindow.GetComponentInChildren().CloseIndicesBackpackByIconPosition(CL.indexPos60x60, GetComponent().startPos); else if (itemDragged == BackpackItemDragged.TACTICALRIG_OR_POCKETS_WINDOW && m_vspBackpackWindow) m_vspBackpackWindow.GetComponentInChildren().CloseIndicesTacticalRigPockets(CL); } } else if (itemDragged == BackpackItemDragged.BACKPACK_WINDOW && m_vspBackpackWindow) m_vspBackpackWindow.GetComponentInChildren().CloseIndicesBackpackByIconPosition(CL.indexPos60x60, GetComponent().startPos); else if (itemDragged == BackpackItemDragged.TACTICALRIG_OR_POCKETS_WINDOW && m_vspBackpackWindow) m_vspBackpackWindow.GetComponentInChildren().CloseIndicesTacticalRigPockets(CL); else { if (isRotatedIcon && !deleteVSP) // If turned and if we drop it in some other place (not on the icon or in inventory) we return to the basuc state { CL.indexPos60x60 = startIndexPos60x60; CL.tagSize = CL.GetReverseCurrentSizeTag(); } if (!isPlayerSlot) StashSystem.instance.CloseIndicesBackpackByIconPosition(CL.indexPos60x60, GetComponent().startPos); } } private void CloseBackpackSlots() { if (isBackpackSlot) { if (isRotatedIcon && !deleteVSP) // We need to somehow track the situation, when in the backpack we move + the turn + there is no place or beyond the limits left { CL.indexPos60x60 = startIndexPos60x60; if (CL.itWasRotated == false) CL.tagSize = CL.baseTagSize; else CL.tagSize = CL.GetReverseCurrentSizeTag(); } if (isEnemyBackpack) BackpackEnemyBase.instance.CloseIndicesBackpackByIconPosition(CL.indexPos60x60, GetComponent().startPos); else if (isPlayerBackpack) BackpackSystem.instance.CloseIndicesBackpackByIconPosition(CL.indexPos60x60, GetComponent().startPos); else if (itemDragged == BackpackItemDragged.BACKPACK_WINDOW && m_vspBackpackWindow) m_vspBackpackWindow.GetComponentInChildren().CloseIndicesBackpackByIconPosition(CL.indexPos60x60, GetComponent().startPos); else if (itemDragged == BackpackItemDragged.TACTICALRIG_OR_POCKETS_WINDOW && m_vspBackpackWindow) m_vspBackpackWindow.GetComponentInChildren().CloseIndicesTacticalRigPockets(CL); } else if (itemDragged == BackpackItemDragged.STASH) // If we drop from inventory + turn + no place { if (isRotatedIcon) { CL.indexPos60x60 = startIndexPos60x60; CL.tagSize = CL.GetReverseCurrentSizeTag(); } StashSystem.instance.CloseIndicesBackpackByIconPosition(CL.indexPos60x60, GetComponent().startPos); } else if (isPlayerSlot) // If from the player's slot in the backpack + turn + there is no place { if (isRotatedIcon && !deleteVSP) { CL.indexPos60x60 = startIndexPos60x60; CL.tagSize = CL.GetReverseCurrentSizeTag(); } } else if (itemDragged == BackpackItemDragged.TACTICALRIG_OR_POCKETS) { //Если мы переносим из слотов енеми (тактик рик, покетс) и так получилось, что не перенесли (попали в красную обл и тд) нужно закрыть if (isEnemyBackpack) BackpackEnemyBase.instance.CloseIndicesTacticalRigPockets(CL); else if (isPlayerBackpack) BackpackSystem.instance.CloseIndicesTacticalRigPockets(CL); if (isRotatedIcon && !deleteVSP) { CL.indexPos60x60 = startIndexPos60x60; CL.tagSize = CL.GetReverseCurrentSizeTag(); } } else if (itemDragged == BackpackItemDragged.BACKPACK_WINDOW && m_vspBackpackWindow) { m_vspBackpackWindow.GetComponentInChildren().CloseIndicesBackpackByIconPosition(CL.indexPos60x60, GetComponent().startPos); } else if (itemDragged == BackpackItemDragged.TACTICALRIG_OR_POCKETS_WINDOW && m_vspBackpackWindow) { m_vspBackpackWindow.GetComponentInChildren().CloseIndicesTacticalRigPockets(CL); } } private void CloseBackpackSlotsFromPlayer() { if (isRotatedIcon) // If turned and if we drop it in some other place (not on the icon or in inventory) we return to the basic state { CL.indexPos60x60 = startIndexPos60x60; CL.tagSize = CL.GetReverseCurrentSizeTag(); } if (itemDragged == BackpackItemDragged.STASH) { StashSystem.instance.CloseIndicesBackpackByIconPosition(CL.indexPos60x60, GetComponent().startPos); } else if (itemDragged == BackpackItemDragged.TACTICALRIG_OR_POCKETS) // With tactical rig or pockets { if (isPlayerBackpack) BackpackSystem.instance.CloseIndicesTacticalRigPockets(CL); else if (isEnemyBackpack) BackpackEnemyBase.instance.CloseIndicesTacticalRigPockets(CL); } else if (itemDragged == BackpackItemDragged.BACKPACK_WINDOW && m_vspBackpackWindow) { m_vspBackpackWindow.GetComponentInChildren().CloseIndicesBackpackByIconPosition(CL.indexPos60x60, GetComponent().startPos); } else if (itemDragged == BackpackItemDragged.TACTICALRIG_OR_POCKETS_WINDOW && m_vspBackpackWindow) { m_vspBackpackWindow.GetComponentInChildren().CloseIndicesTacticalRigPockets(CL); } else if (isBackpackSlot) // From the backpack { if (isRotatedIcon && !deleteVSP) { CL.indexPos60x60 = startIndexPos60x60; CL.tagSize = CL.GetReverseCurrentSizeTag(); } if (isPlayerBackpack) BackpackSystem.instance.CloseIndicesBackpackByIconPosition(CL.indexPos60x60, GetComponent().startPos); else if (isEnemyBackpack) BackpackEnemyBase.instance.CloseIndicesBackpackByIconPosition(CL.indexPos60x60, GetComponent().startPos); } } private void OpenBackpackSlots() { if (itemDragged != BackpackItemDragged.TACTICALRIG_OR_POCKETS || !CL.isPutOn) return; if (CL.IsBackpackItemSlot()) { if (isPlayerBackpack) BackpackSystem.instance.OpenCells(CL); else if (isEnemyBackpack) BackpackEnemyBase.instance.OpenCells(CL); } } private bool CanDestrorItemIcon() { if (!CL.isPutOn) return false; if (isPlayerBackpack) // Если взяли у игрока { if (CL.tagItem == ItemList.TagItems.BODYBACKPACK) // Если это рюкзак и он надет { if (BackpackSystem.instance.m_vspBackpackWindow.GetComponentInChildren().vspButtonOption.isOpenedFromPlayerInv) // Если переносим в открытый неактивный рюкзак, который был открыт из слотов игрока (из его инвентаря) return true; } } else if (isEnemyBackpack) { if (CL.tagItem == ItemList.TagItems.BODYBACKPACK) // Если это рюкзак и он надет { if (BackpackSystem.instance.m_vspBackpackWindow.GetComponentInChildren().vspButtonOption.isOpenedFromEnemyInv) // Если переносим в открытый неактивный рюкзак, который был открыт из слотов игрока (из его инвентаря) return true; } } return false; } #endregion #region Helpers // Меняем директорию private void CheckRootItem() { if (canNotBeMoved) return; if ((MouseEnterPlayerInventory.instance && MouseEnterPlayerInventory.instance.isActive) || (MouseEnterBackpack.instance && MouseEnterBackpack.instance.IsActive)) // Куда { if (isEnemyBackpack || isEnemy) // От куда { ChangeRootItem(); } } else if (BackpackSystem.instance.m_vspBackpackWindow && ((BackpackSystem.instance.m_vspBackpackWindow.GetComponentInChildren() && BackpackSystem.instance.m_vspBackpackWindow.GetComponentInChildren().isActive) || (BackpackSystem.instance.m_vspBackpackWindow.GetComponentInChildren() && BackpackSystem.instance.m_vspBackpackWindow.GetComponentInChildren().isActive))) // Куда { if (isEnemyBackpack || isEnemy) // От куда { ChangeRootItem(3); } } else if (MouseEnterEnemyPlayerSlots.instance && MouseEnterEnemyPlayerSlots.instance.isActive) // Куда { if (isPlayerBackpack || isPlayer || isEnemyBackpack || itemDragged == BackpackItemDragged.BACKPACK_WINDOW || itemDragged == BackpackItemDragged.TACTICALRIG_OR_POCKETS_WINDOW) // От куда { if (!CL.isPutOn) ChangeRootItem(2); else ChangeRootItem(1); } } else if (MouseEnterEnemyBackpack.instance && MouseEnterEnemyBackpack.instance.isActive) // Куда { if (isPlayerBackpack || isPlayer || isEnemyBackpack || itemDragged == BackpackItemDragged.BACKPACK_WINDOW || itemDragged == BackpackItemDragged.TACTICALRIG_OR_POCKETS_WINDOW) // От куда { if (!CL.isPutOn || isPlayer) ChangeRootItem(1); else ChangeRootItem(2); } } } // Проверяем у кого мы взяли // mode = 0 - Player int // mode = 1 - Enemy Backpack // mode = 2 - Enemy Player slots // mode = 3 - Backpack Window private void ChangeRootItem(int mode = 0) { if (mode == 0 || mode == 3) // Player { // Удалим объект (он больше не нужен) if (CL.destroyItemDrop) { if (isEnemyBackpack) { if (CL.tagItem == ItemList.TagItems.BODYTACTICALRIG) { if (CL.insertCL.Length > 0) { for (int i = 0; i < CL.insertCL.Length; i++) { if (CL.insertCL[i] == null) break; if (CL.insertCL[i].idSlotBackpack > 10) continue; if (mode == 1) { if (CL.insertCL[i].IsRenderItem()) CL.insertCL[i].itemModding.transform.SetParent(InventoryBase.instance.RootSpawnWeaponModding.transform); } else { if (BackpackSystem.instance.m_vspBackpackWindow) CL.insertCL[i].itemModding.transform.SetParent(BackpackSystem.instance.m_vspBackpackWindow.GetComponentInChildren().rootSpawnWeaponModding.transform); } } } } } if (mode == 0) { if (CL.IsRenderItem()) CL.SetItemModdingParameters(false, InventoryBase.instance.RootSpawnWeaponModding.transform); } else { if (BackpackSystem.instance.m_vspBackpackWindow) CL.SetItemModdingParameters(false, BackpackSystem.instance.m_vspBackpackWindow.GetComponent().rootSpawnWeaponModding.transform); } Destroy(CL.destroyItemDrop); CL.destroyItemDrop = null; } } else // Enemy { if (CL.destroyItemDrop) { if (CL.destroyItemDrop.transform.parent) Destroy(CL.destroyItemDrop); CL.destroyItemDrop = null; } if (CL.destroyItemDrop == null) CL.destroyItemDrop = (GameObject)Instantiate(InventoryBase.instance.ItemsDropPrefab); CL.destroyItemDrop.name = CL.id.ToString(); Helper.SetParameters(CL.destroyItemDrop, CL); // New Set if (mode == 1) isChangeEnemyItemRoot = true; // Выносим эту функцию в конец операции (т.к. не все параметры еще присвоены) else if (mode == 2) CL.destroyItemDrop.transform.SetParent(InventoryBase.instance.inventoryEnemy.m_SpawnEnemyDropItems); // Player items CL.destroyItemDrop.transform.localPosition = Vector3.zero; CL.SetItemModdingParameters(false, CL.destroyItemDrop.transform); } } // Зайдем сюда только если повернули в процессе переноса // IMP THIS private void ExchangeIconsSize() { if (CL.tagItem == ItemList.TagItems.WEAPON) { itemIcon.GetComponent().sizeDelta = CL.GetIconSizeForSlots(); } else { // Change the size under the icon 120х120 // Shift to half the icon itemIcon.transform.localPosition = Vector3.zero; itemIcon.GetComponent().sizeDelta = new Vector2(120, 120); itemIcon.GetComponentInChildren().transform.localPosition = Vector3.zero; itemIcon.GetComponentInChildren().Icon.GetComponent().sizeDelta = CL.GetIconSizeForSlots(); } } private void CreateDummies() { // // In the Stash coordinate system (if it is on) // if (InventoryBase.instance.hideStash || LootBase.instance.isActiveLoot || StoreBase.instance.isActive) { stash = new GameObject("mStash"); stash.GetComponent().SetParent(StashSystem.instance.GetRootIconsSpawn().transform); stash.GetComponent().localScale = Vector3.one; stash.GetComponent().localRotation = icon.transform.localRotation; stash.GetComponent().localPosition = Vector3.zero; } // // In the backpack's coordinate system (if it is on) // if (BackpackSystem.instance.GetBackpackInfo().isActiveBackpack) { mBackpack = new GameObject("mBackpackDummy"); mBackpack.GetComponent().SetParent(BackpackSystem.instance.rootIconItemsBackpackSpawn.transform); mBackpack.GetComponent().localScale = Vector3.one; mBackpack.GetComponent().localRotation = icon.transform.localRotation; mBackpack.GetComponent().localPosition = Vector3.zero; } if (BackpackEnemyBase.instance && BackpackEnemyBase.instance.GetBackpackInfo().isActiveBackpack) { mBackpackEnemy = new GameObject("mBackpackEnemyDummy"); mBackpackEnemy.GetComponent().SetParent(BackpackEnemyBase.instance.rootBackpackIconsSpawn.transform); mBackpackEnemy.GetComponent().localScale = Vector3.one; mBackpackEnemy.GetComponent().localRotation = icon.transform.localRotation; mBackpackEnemy.GetComponent().localPosition = Vector3.zero; } BackpackSystem.instance.CreateBackpacksDummy(icon); } #endregion #region Close, Reset, etc private void CloseDragHandler() { // // Audio // if (InventoryBase.instance.audioSource.clip) InventoryBase.instance.audioSource.PlayOneShot(InventoryBase.instance.audioSource.clip); // // Reset // ResetParameters(); ResetDragAndDrop(); if (vspInstance) Destroy(vspInstance); if (stash) Destroy(stash); if (mBackpack) Destroy(mBackpack); if (mBackpackEnemy) Destroy(mBackpackEnemy); BackpackSystem.instance.DestroyBackpackDummies(); } private void ResetParameters() { if (GetComponent()) GetComponent().blocksRaycasts = true; else GetComponentInParent().blocksRaycasts = true; BackpackSystem.instance.rootBackpackCells.GetComponent().blocksRaycasts = true; if (BackpackEnemyBase.instance && BackpackEnemyBase.instance.isActive) BackpackEnemyBase.instance.rootBackpack.GetComponent().blocksRaycasts = true; if (CL.IsBackpackItemSlot()) // If there is a parent, then block it (if it's a weapon slot or the backpack slot) { if (transform.parent == startParent) { if (GetComponentInParent()) if (GetComponentInParent().transform.GetComponent()) GetComponentInParent().transform.GetComponent().blocksRaycasts = true; } else { if (startParent != null && startParent.GetComponentInParent()) if (startParent.GetComponentInParent().transform.GetComponent()) startParent.GetComponentInParent().transform.GetComponent().blocksRaycasts = true; } } if (InventoryBase.instance.hideStash || LootBase.instance.isActiveLoot) StashSystem.instance.GetUpdateAssistent().UpdateIconTextBackpack(); InventoryBase.instance.isDragHandlerIcon = false; InventoryBase.instance.CL = null; // // Определяем, нужно ли нам удалять префаб ItemDrop для предмета // bool flagLoot = false; if (isStashSlot && itemDragged != BackpackItemDragged.STORE) { if (transform.parent == startParent) // Предмет остался в луте flagLoot = false; else flagLoot = true; } // // // if (!BackpackSystem.instance.RE4O_IsActive()) PlayerSystem.instance.UpdateSlots(CL, flagLoot); // If it was a player's slot then you need to update all the slots } // // Для сброса цвета активного оружия // private void ResetBackgroundColor() { if (!BackpackSystem.instance.RE4O_IsActive()) { if (CL != null && gameObject != null) { gameObject.GetComponentInChildren().ResetBaseColor(); } } } private void ResetDragAndDrop() { if (itemIcon.GetComponentInParent()) { if (itemIcon.GetComponentInParent().IsPlayerSlot) { if (InventoryBase.instance.m_Hotbar.isActiveHotbar) InventoryBase.instance.m_Hotbar.UpdateHotbarOnDragAndDrop(CL); // Update hotbar PlayerSystem.instance.UpdatePosition(); isPlayerSlot = true; } else { isPlayerSlot = false; ResetBackgroundColor(); } } if (isPlayerSlot) { if (MouseEnterEnemyPlayerSlots.instance && MouseEnterEnemyPlayerSlots.instance.isActive) CL.isEnemyItem = true; else CL.isEnemyItem = false; ResetBackgroundColor(); } if (isEnemy) { PlayerEnemySystem.instance.isActiveUpdateSlots = true; BackpackEnemyBase.instance.isActiveUpdateSlots = true; isEnemy = false; ResetBackgroundColor(); } else { if (BackpackEnemyBase.instance && BackpackEnemyBase.instance.isActive) // * { PlayerEnemySystem.instance.isActiveUpdateSlots = true; BackpackEnemyBase.instance.isActiveUpdateSlots = true; } } if (itemIcon.GetComponentInParent() || itemIcon.GetComponentInParent()) { CL.isEnemyItem = false; isTacticRigSlot = true; } else isTacticRigSlot = false; if (itemIcon.GetComponentInParent()) { CL.isEnemyItem = true; isTacticRigSlot = true; } if (itemIcon.GetComponentInParent()) isStoreSlot = true; else isStoreSlot = false; if (itemIcon.GetComponentInParent() || itemIcon.GetComponentInParent() || itemIcon.GetComponentInParent()) { isBackpackSlot = true; isTacticRigSlot = false; isPlayerSlot = false; ResetBackgroundColor(); } else isBackpackSlot = false; if (MouseInterStashInventory.instance && itemIcon.GetComponentInParent()) isStashSlot = true; else isStashSlot = false; if (isChangeEnemyItemRoot) { // // Проверка куда мы кинули (туда и спавним предмет) // if (isTacticRigSlot) CL.destroyItemDrop.transform.SetParent(InventoryBase.instance.inventoryEnemy.m_SpawnEnemyTacticalRigItems); // Tactical Rig \ Pockets items else CL.destroyItemDrop.transform.SetParent(InventoryBase.instance.inventoryEnemy.m_SpawnEnemyBackpackItems); // Backpack items isChangeEnemyItemRoot = false; } isExchangeInventory = false; isExchangePlayerSlot = false; isPlayer = false; canNotBeMoved = false; isTagSize2x1 = false; isActiveDrag = false; isActive = false; isRotatedIcon = false; isPlayerBackpack = false; isEnemyBackpack = false; isBackpackItem = false; isAttached = false; m_vspBackpackWindow = null; itemDragged = default; if (itemIcon && itemIcon.transform.parent.GetComponent()) CL.isPutOn = true; else CL.isPutOn = false; if (deleteVSP || isDeleteIcon) { Destroy(itemIcon); CL.isPutOn = false; } itemIcon = null; deleteVSP = false; isDeleteIcon = false; Helper.SetImageAlpha(icon.GetComponent(), 1.0f); if (CL.storeID == -1) gameObject.GetComponentInChildren().SetTextParameters(CL); else gameObject.GetComponentInChildren().SetTextParameters("", CL.statisticList.itemPrice.ToString(), 11, 10, CL.statisticList.GetTypeOfMoney()); if (InventoryBase.instance.m_Hotbar.isActiveHotbar) { // Update hotbar slot InventoryBase.instance.m_Hotbar.UpdateHotbarPutOnSlots(CL); InventoryBase.instance.m_Hotbar.isPutOn = false; } InventoryBase.instance.ResetSortingButton(); if (BackpackSystem.instance.RE4_spaceButtons != null) { for (int i = 0; i < BackpackSystem.instance.RE4_spaceButtons.Length; i++) if (BackpackSystem.instance.RE4_spaceButtons[i] != null) BackpackSystem.instance.RE4_spaceButtons[i].SetActive(false); } } private void CloseAllOpendBackpackWindows() { if (CL.tagItem == ItemList.TagItems.BODYBACKPACK && CL.isPutOn) // Если это рюкзак и он надет { if (BackpackSystem.instance.CheckOpenedBackpackWindow(CL)) BackpackSystem.instance.CloseBackpackWindowSlotForOpenedBackpack(CL); } } #endregion #endregion } } }