// I decided that i didn't want to support the drag and drop on chests to create new items. /* * public void OnDrop (PointerEventData eventData) { * if (DragHandler.itemBeingDragged == null) { * return; * } * * GameObject containerSlot = null; * if (DragHandler.itemBeingDragged.transform.parent.GetComponent<ContainerSlot>()) { * containerSlot = DragHandler.startParent.gameObject; * } * * CreateSlotWithItem (DragHandler.itemBeingDragged.GetComponent<SlotObjectContainer>().obj); * * if (containerSlot) { * Destroy (containerSlot); * } * DestroyImmediate (DragHandler.itemBeingDragged.transform.gameObject); * * DragHandler.itemBeingDragged = null; * } */ public void CreateSlotWithItem(GameObject Item) { GameObject slot = Instantiate(Slot, transform.GetChild(0).transform.GetChild(0), false); GameObject slotItem = Instantiate(ContainerSlotItem, slot.transform, false); slotItem.GetComponent <SlotObjectContainer> ().obj = Item; GameObject item = slotItem.GetComponent <SlotObjectContainer> ().obj; Component objectData = item.GetComponent(typeof(IObjectData)); IObjectData data = objectData as IObjectData; slotItem.GetComponent <Text> ().text = data.objectName(); if (data.count() != 1) { slotItem.GetComponent <Text> ().text += " x" + data.count(); } // Process Quest UnTrigger. QuestTriggerWrapper questTriggerWrapper = item.GetComponent <QuestTriggerWrapper> (); if (questTriggerWrapper != null) { QuestTrigger trigger = questTriggerWrapper.questTrigger; if (trigger != null) { GameObject.Find("QuestManager").GetComponent <QuestManager> ().ProcessQuestUnTrigger(trigger); } } }
public void CreateSlotItemAsChildOfExistingSlot(GameObject item) { GameObject newSlotItem = Instantiate(slotItem, transform, false); Component comp = item.GetComponent <SlotObjectContainer>().obj.GetComponent(typeof(IObjectData)); IObjectData objectData = comp as IObjectData; string uiText; if (objectData.count() == 1) { uiText = objectData.objectName(); } else { uiText = objectData.objectName() + " x" + objectData.count(); } newSlotItem.GetComponent <SlotObjectContainer> ().obj = item.GetComponent <SlotObjectContainer>().obj; newSlotItem.GetComponent <Text> ().text = uiText; QuestTriggerWrapper questTriggerWrapper = newSlotItem.GetComponent <SlotObjectContainer> ().obj.GetComponent <QuestTriggerWrapper>(); if (questTriggerWrapper != null) { QuestTrigger trigger = questTriggerWrapper.questTrigger; if (trigger != null) { Debug.Log("Process Quest Trigger."); GameObject.Find("QuestManager").GetComponent <QuestManager> ().ProcessQuestTrigger(trigger); } } Destroy(item); }
public void OnPointerClick(PointerEventData eventData) { if (selectCountButtonCreated) { return; } Component comp = GetComponent <SlotObjectContainer>().obj.GetComponent(typeof(IObjectData)); IObjectData objData = comp as IObjectData; if (objData.count() > 1) { selectCountButtonCreated = true; GameObject selectCountButtonReference = Instantiate(selectCountButton, Canvas.transform); selectCountButtonReference.GetComponent <RectTransform> ().localPosition = new Vector3(0, 0, 0); selectCountButtonReference.GetComponentInChildren <Text> ().text = "1"; selectCountButtonReference.GetComponentInChildren <PlusButtonOnClick> ().maxCount = objData.count(); selectCountButtonReference.SetActive(true); // Give the count button reference the gameobject and a reference to the character position. selectCountButtonReference.GetComponent <PlayerReferenceAndItemContainer>().Player = transform.root.GetComponent <PlayerReferenceContainer> ().Player; selectCountButtonReference.GetComponent <PlayerReferenceAndItemContainer> ().Item = GetComponent <SlotObjectContainer> ().obj; selectCountButtonReference.GetComponent <PlayerReferenceAndItemContainer> ().SlotObjectContainer = GetComponent <SlotObjectContainer> (); return; } DropItem(); // TODO Wrap this nicely so other drop logic can use it. // See if the item has a quest trigger. QuestTriggerWrapper questTriggerWrapper = GetComponent <SlotObjectContainer> ().obj.GetComponent <QuestTriggerWrapper> (); if (questTriggerWrapper != null) { QuestTrigger pickupQuestTrigger = questTriggerWrapper.questTrigger; if (pickupQuestTrigger != null) { GameObject.Find("QuestManager").GetComponent <QuestManager> ().ProcessQuestUnTrigger(pickupQuestTrigger); } } gameObject.transform.SetParent(null); Destroy(gameObject); }
public bool Interact(GameObject gameobject) { CharacterInventory characterInventory = gameobject.GetComponent <CharacterInventory> (); Debug.Assert(characterInventory != null); bool foundSlotForItem = false; Component component = GetComponent(typeof(IObjectData)); IObjectData objData = component as IObjectData; if (objData.stackable()) { for (int i = 0; i < characterInventory.INVENTORY_SIZE; ++i) { if (characterInventory.inventory[i] != null) { Component comp = characterInventory.inventory[i].GetComponent(typeof(IObjectData)); IObjectData objectData = comp as IObjectData; // This equality check is hacky. It incorrectly assumes every // object in the game will have a unique name. if (objectData.objectName() == objData.objectName()) { objectData.increaseCount(objData.count()); foundSlotForItem = true; // We added this item to a stack. Destroy(gameObject); break; } } } } if (!foundSlotForItem) { for (int i = 0; i < characterInventory.INVENTORY_SIZE; ++i) { if (characterInventory.inventory[i] == null) { // Assign the inventory slot to this gameObject (not the one that was passed in). characterInventory.inventory[i] = gameObject; foundSlotForItem = true; break; } } } if (foundSlotForItem) { gameObject.transform.position = gameobject.transform.position; QuestTriggerWrapper qt = GetComponent <QuestTriggerWrapper> (); if (qt != null) { GameObject.Find("QuestManager").GetComponent <QuestManager>().ProcessQuestTrigger(qt.questTrigger); } if (gameObject.activeInHierarchy) { gameObject.SetActive(false); } } return(foundSlotForItem); }
public void OnDrop(PointerEventData eventData) { if (DragHandler.itemBeingDragged == null) { return; } if (DragHandler.startParent.GetComponent <PlayerInventorySlot> ()) { // This is the easiest case. The Player is swapping items around in the inventory. // No need to process a quest trigger or anything like that. if (item) { item.transform.SetParent(DragHandler.startParent); } DragHandler.itemBeingDragged.transform.SetParent(transform); DragHandler.itemBeingDragged = null; transform.root.GetComponent <PlayerReferenceContainer> ().Player.GetComponent <UICharacterInventoryFactory> ().RefreshCharacterInventory(); } else if (DragHandler.startParent.GetComponent <EquipmentSlot> ()) { // The Player is trying to drag an item from an equipment slot to an inventory slot. // If there is no item in this slot, no big deal. Else they are trying to swap and we // need to be a little careful. if (item) { GameObject uiObject = DragHandler.itemBeingDragged.GetComponent <SlotObjectContainer> ().obj; Equipment equipmentComponent = uiObject.GetComponent <Equipment> (); if (equipmentComponent == null || item.GetComponent <SlotObjectContainer> ().obj.GetComponent <Equipment> () == null || !equipmentComponent.equipmentType.Equals(item.GetComponent <SlotObjectContainer> ().obj.GetComponent <Equipment> ().equipmentType)) { DragHandler.itemBeingDragged.transform.SetParent(DragHandler.startParent); return; } item.transform.SetParent(DragHandler.startParent); } DragHandler.itemBeingDragged.transform.SetParent(transform); DragHandler.itemBeingDragged = null; transform.root.GetComponent <PlayerReferenceContainer> ().Player.GetComponent <UICharacterInventoryFactory> ().RefreshCharacterInventory(); } else if (DragHandler.startParent.GetComponent <ContainerSlot>()) { // The Player is trying to move an item from a container to an inventory slot. // It may be a swap or it may not be. if (item) { GameObject itemCopy = item; itemCopy.transform.SetParent(null); DragHandler.itemBeingDragged.transform.SetParent(transform); transform.root.GetComponent <PlayerReferenceContainer> ().Player.GetComponent <UICharacterInventoryFactory> ().RefreshCharacterInventory(); DragHandler.itemBeingDragged.transform.SetParent(null); // Create a slot item. GameObject newSlotItem = Instantiate(slotItemInteractingWithContainer, transform, false); Component comp = DragHandler.itemBeingDragged.GetComponent <SlotObjectContainer>().obj.GetComponent(typeof(IObjectData)); IObjectData objectData = comp as IObjectData; string uiText; if (objectData.count() == 1) { uiText = objectData.objectName(); } else { uiText = objectData.objectName() + " x" + objectData.count(); } newSlotItem.GetComponent <Text> ().text = uiText; newSlotItem.GetComponent <SlotObjectContainer> ().obj = DragHandler.itemBeingDragged.GetComponent <SlotObjectContainer>().obj; // Tell the container to create its slot item. Destroy(DragHandler.itemBeingDragged); DragHandler.startParent.GetComponent <ContainerSlot> ().CreateSlotItemAsChildOfExistingSlot(itemCopy); QuestTriggerWrapper questTriggerWrapper = newSlotItem.GetComponent <SlotObjectContainer> ().obj.GetComponent <QuestTriggerWrapper>(); if (questTriggerWrapper != null) { QuestTrigger trigger = questTriggerWrapper.questTrigger; if (trigger != null) { Debug.Log("Process Quest Trigger."); GameObject.Find("QuestManager").GetComponent <QuestManager> ().ProcessQuestTrigger(trigger); } } } else { // Not a swap. GameObject itemCopy = item; Destroy(item); DragHandler.itemBeingDragged.transform.SetParent(transform); transform.root.GetComponent <PlayerReferenceContainer> ().Player.GetComponent <UICharacterInventoryFactory> ().RefreshCharacterInventory(); // Create a slot item. itemCopy = item; Destroy(item); GameObject newSlotItem = Instantiate(slotItemInteractingWithContainer, transform, false); Component comp = itemCopy.GetComponent <SlotObjectContainer>().obj.GetComponent(typeof(IObjectData)); IObjectData objectData = comp as IObjectData; string uiText; if (objectData.count() == 1) { uiText = objectData.objectName(); } else { uiText = objectData.objectName() + " x" + objectData.count(); } newSlotItem.GetComponent <Text> ().text = uiText; newSlotItem.GetComponent <SlotObjectContainer> ().obj = DragHandler.itemBeingDragged.GetComponent <SlotObjectContainer>().obj; QuestTriggerWrapper questTriggerWrapper = newSlotItem.GetComponent <SlotObjectContainer> ().obj.GetComponent <QuestTriggerWrapper>(); if (questTriggerWrapper != null) { QuestTrigger trigger = questTriggerWrapper.questTrigger; if (trigger != null) { Debug.Log("Process Quest Trigger."); GameObject.Find("QuestManager").GetComponent <QuestManager> ().ProcessQuestTrigger(trigger); } } Destroy(DragHandler.startParent.gameObject); } } }