Example #1
0
    // 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);
            }
        }
    }
Example #2
0
    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);
    }
Example #4
0
    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);
            }
        }
    }