public void AddItemToInventory(Item newItem, ChestContents chest, int itemIndex)
    {
        bool breakLoop            = false;
        bool sucessfullyAddedItem = false;

        for (int i = 0; i < inventory.Count; i++)
        {
            if (inventory[i] == null)
            {
                switch (newItem.itemType)
                {
                case Item.ItemType.Consumable:
                    Consumable inventoryConsumable = Instantiate <Consumable>((Consumable)(newItem));
                    Consumable tempConsumable      = (Consumable)newItem;
                    tempConsumable.CopyTo(out inventoryConsumable);
                    inventory[i]              = tempConsumable;
                    breakLoop                 = true;
                    sucessfullyAddedItem      = true;
                    chest.contents[itemIndex] = null;
                    break;

                case Item.ItemType.Armor:
                    break;

                default:
                    break;
                }
            }
            else if (inventory[i].itemName == newItem.itemName)
            {
                if (itemNumberInStack[i] <= inventory[i].stackLimit - chest.itemNumberInStack[itemIndex])
                {
                    itemNumberInStack[i] += chest.itemNumberInStack[itemIndex];
                    breakLoop             = true;
                    sucessfullyAddedItem  = true;
                }
                else
                {
                    while (itemNumberInStack[i] < inventory[i].stackLimit)
                    {
                        itemNumberInStack[i]++;
                        chest.itemNumberInStack[itemIndex]--;
                        breakLoop = true;
                    }
                }
            }
            if (breakLoop)
            {
                break;
            }
        }
        if (!sucessfullyAddedItem)
        {
            inventory.Add(newItem);
            itemNumberInStack.Add(chest.itemNumberInStack[itemIndex]);
            chest.RemoveItem(itemIndex);
        }
        AutoSortInventory();
    }
Exemple #2
0
 // Use this for initialization
 void Start()
 {
     chestButtons        = new Button[transform.childCount];
     inventoryItemImages = new Image[chestButtons.Length];
     backgroundImages    = new Image[chestButtons.Length];
     if (chest == null)
     {
         chest = transform.root.gameObject;
     }
     chestContents = chest.GetComponent <ChestContents>();
     for (int i = 0; i < inventoryItemImages.Length; i++)
     {
         chestButtons[i]        = transform.GetChild(i).GetComponent <Button>();
         inventoryItemImages[i] = transform.GetChild(i).GetChild(1).GetComponent <Image>();
         backgroundImages[i]    = transform.GetChild(i).GetChild(0).GetComponent <Image>();
     }
 }
Exemple #3
0
 public void SetOpenChest(ChestContents chest)
 {
     openChest = chest;
 }
Exemple #4
0
 public void SetToolTipFromChest(int index)
 {
     chest     = chestDisplay.chestContents;
     text.text = chest.contents[index].itemName + " - " + chest.contents[index].itemDescription + "\n" + chest.itemNumberInStack[index] + " in stack";
 }
 public void SetChestContents(ChestContents newContents)
 {
     chestContents = newContents;
 }
    void Update()
    {
        if ((Input.GetKey(control.pauseMenu) || Input.GetKey(control.inventory)) && isCoroutineRunning)
        {
            gameObject.GetComponent <PauseGame>().HideAttachmentMenu();
            StopCoroutine("AttachWeapon");
            attachmentToAttach = null;
            isCoroutineRunning = false;
        }
        Ray        ray = new Ray(cam.transform.position, cam.transform.forward);
        RaycastHit hit;

        Debug.DrawRay(ray.origin, ray.direction);
        if (Physics.Raycast(ray, out hit, 5))
        {
            if (hit.collider.CompareTag("Chest") || hit.collider.gameObject.GetComponent <ChestContents>())
            {
                useText.SetActive(true);
                chest = hit.collider.GetComponent <ChestContents>();
                useText.GetComponent <Text>().text = chest.ammoChest ? "Pick up Ammo" : "Open Chest";
                if (Input.GetKeyDown(control.use))
                {
                    if (chest.ammoChest)
                    {
                        currentAmmo           = weaponSwitch.equippedWeapon.GetComponent <Weapon>().ammo.GetComponent <Amount>();
                        currentAmmo.amountOf += currentAmmo.limit;
                    }
                    else
                    {
                        pause.ShowChestAndInventory();
                        chestDisplay.SetChestContents(chest);
                        inventoryDisplay.SetOpenChest(chest);
                    }
                }
            }
            else if (hit.collider.gameObject.CompareTag("Weapon"))
            {
                useText.SetActive(true);
                useText.GetComponent <Text>().text = "Pick up " + hit.collider.gameObject.GetComponent <PickUpProperties>().actualGunPrefab.name;

                string weaponName = hit.collider.gameObject.GetComponent <PickUpProperties>().actualGunPrefab.name;

                if (weaponSlot.childCount >= weaponSwitch.maxWeapons)
                {
                    useText.GetComponent <Text>().text = "Replace current weapon with " + weaponName;
                }
                UpdateEquippedWeapons();
                if (Input.GetKeyDown(control.use))
                {
                    if (weaponSlot.childCount >= weaponSwitch.maxWeapons)
                    {
                        GameObject tempWeapon = Instantiate(hit.collider.gameObject.GetComponent <PickUpProperties>().actualGunPrefab, weaponSlot.position, weaponSlot.rotation, weaponSlot);
                        tempWeapon.name = weaponName;

                        equippedWeapons[weaponSwitch.currentWeapon].name   = hit.collider.gameObject.GetComponent <PickUpProperties>().actualGunPrefab.name;
                        equippedWeapons[weaponSwitch.currentWeapon].weapon = tempWeapon;

                        Weapon weaponValues = tempWeapon.GetComponent <Weapon>();
                        weaponValues.CopyFrom(hit.collider.gameObject.GetComponent <Weapon>());

                        if (weaponValues.weaponType == Weapon.WeaponType.Gun)
                        {
                            Shoot tempShoot = (Shoot)weaponValues;
                            tempShoot.CopyFrom(hit.collider.gameObject.GetComponent <Shoot>());
                            switch (tempShoot.shootType)
                            {
                            case Shoot.ShootType.GunShoot:
                                GunShoot gunShoot = (GunShoot)tempShoot;
                                gunShoot.CopyFrom(hit.collider.gameObject.GetComponent <GunShoot>());
                                break;

                            case Shoot.ShootType.ShotgunShoot:
                                ShotgunShoot shotgun = (ShotgunShoot)tempShoot;
                                shotgun.CopyFrom(hit.collider.gameObject.GetComponent <ShotgunShoot>());
                                break;

                            case Shoot.ShootType.SemiAutoShoot:
                                break;

                            case Shoot.ShootType.ChargeShoot:
                                ChargeShoot chargeShoot = (ChargeShoot)tempShoot;
                                chargeShoot.CopyFrom(hit.collider.gameObject.GetComponent <ChargeShoot>());
                                break;

                            case Shoot.ShootType.ProjectileShoot:
                                break;
                            }
                        }
                        else
                        {
                            MeleeAttack tempMelee = (MeleeAttack)weaponValues;
                            tempMelee.CopyFrom(hit.collider.GetComponent <MeleeAttack>());
                        }
                        tempWeapon.transform.SetSiblingIndex(weaponSwitch.currentWeapon);

                        GameObject weaponToDestroy = weaponSlot.GetChild(weaponSwitch.currentWeapon + 1).gameObject;
                        hit.collider.gameObject.GetComponent <MiniMapIndicator>().DestroyCurrentIcon();
                        ThrowWeapon(weaponToDestroy);
                        Destroy(weaponToDestroy);
                        UpdateEquippedWeapons();
                        Destroy(hit.collider.gameObject);
                    }
                    else
                    {
                        GameObject weaponPickedUp = hit.collider.gameObject;
                        GameObject tempWeapon     = Instantiate(weaponPickedUp.GetComponent <PickUpProperties>().actualGunPrefab, weaponSlot.position, weaponSlot.rotation, weaponSlot);
                        tempWeapon.name = weaponName;
                        UpdateEquippedWeapons();
                        Weapon weaponValues = tempWeapon.GetComponent <Weapon>();
                        weaponValues.CopyFrom(weaponPickedUp.GetComponent <Weapon>());
                        weaponValues.isPickup = false;
                        if (weaponValues.weaponType == Weapon.WeaponType.Gun)
                        {
                            Shoot tempShoot = (Shoot)weaponValues;
                            tempShoot.CopyFrom(hit.collider.gameObject.GetComponent <Shoot>());
                            switch (tempShoot.shootType)
                            {
                            case Shoot.ShootType.GunShoot:
                                GunShoot gunShoot = (GunShoot)tempShoot;
                                gunShoot.CopyFrom(hit.collider.gameObject.GetComponent <GunShoot>());
                                break;

                            case Shoot.ShootType.ShotgunShoot:
                                ShotgunShoot shotgun = (ShotgunShoot)tempShoot;
                                shotgun.CopyFrom(hit.collider.gameObject.GetComponent <ShotgunShoot>());
                                break;

                            case Shoot.ShootType.SemiAutoShoot:

                                break;

                            case Shoot.ShootType.ChargeShoot:
                                ChargeShoot chargeShoot = (ChargeShoot)tempShoot;
                                chargeShoot.CopyFrom(hit.collider.gameObject.GetComponent <ChargeShoot>());
                                break;

                            case Shoot.ShootType.ProjectileShoot:
                                break;
                            }
                        }
                        else
                        {
                            MeleeAttack tempMelee = (MeleeAttack)weaponValues;
                            tempMelee.CopyFrom(hit.collider.GetComponent <MeleeAttack>());
                        }

                        weaponSwitch.DisableWeapon(tempWeapon);
                        hit.collider.gameObject.GetComponent <MiniMapIndicator>().DestroyCurrentIcon();
                        Destroy(hit.collider.gameObject);
                    }
                }
            }
            else if (hit.collider.gameObject.CompareTag("Door"))
            {
                Door tempDoor = hit.collider.gameObject.GetComponent <Door>();
                useText.SetActive(true);
                Text text = useText.GetComponent <Text>();
                if (tempDoor.GetIsLocked())
                {
                    bool hasKey = false;
                    int  keyLoc = 0;
                    for (int i = 0; i < keyNumbers.Count; i++)
                    {
                        hasKey = tempDoor.IsCorrectKey(keyNumbers[i]);
                        if (hasKey)
                        {
                            keyLoc = i;
                        }
                    }
                    text.text = (hasKey) ? "Unlock door" : "Door requires key!";

                    if (Input.GetKeyDown(control.use) && hasKey)
                    {
                        tempDoor.UnlockDoor(keyNumbers[keyLoc]);
                        keyNumbers.RemoveAt(keyLoc);
                    }
                }
                else if ((tempDoor.doorType == Door.DoorType.Use || tempDoor.doorType == Door.DoorType.RequiresKeyAfter || tempDoor.doorType == Door.DoorType.RequiresKeyInit) && !tempDoor.isOpen)
                {
                    text.text = "Open door";
                    if (Input.GetKeyDown(control.use))
                    {
                        tempDoor.OpenDoorWithUse();
                    }
                }
                else if (tempDoor.isOpen && tempDoor.doorType == Door.DoorType.Use)
                {
                    text.text = "Close door";
                    if (Input.GetKeyDown(control.use))
                    {
                        tempDoor.CloseDoorWithUse();
                    }
                }
                else
                {
                    useText.SetActive(false);
                }
            }
            else if (hit.collider.gameObject.CompareTag("Key"))
            {
                useText.SetActive(true);
                Text text = useText.GetComponent <Text>();
                text.text = "Pickup key";

                if (Input.GetKeyDown(control.use))
                {
                    try
                    {
                        Key key = hit.collider.gameObject.GetComponent <Key>();
                        keyNumbers.Add(key.keyNumber);
                        Destroy(hit.collider.gameObject);
                    }
                    catch (MissingComponentException e)
                    {
                        Debug.LogException(e);
                    }
                }
            }
            else
            {
                useText.SetActive(false);
            }
        }
        else
        {
            useText.SetActive(false);
        }

        if (Input.GetKeyDown(control.throwWeapon))
        {
            if (weaponSlot.GetChild(weaponSwitch.currentWeapon).gameObject != null)
            {
                ThrowWeapon(weaponSlot.GetChild(weaponSwitch.currentWeapon).gameObject);
                weaponSwitch.SwitchWeaponUp();
            }
            UpdateEquippedWeapons();
        }
    }