private void SpawnRainDrop()
    {
        GameObject rainDrop = rainDrops.Retrieve();

        // This keeps the Hierarchy clean by parenting the raindrops. Not required in build.
#if UNITY_EDITOR
        rainDrop.transform.SetParent(this.transform);
#endif

        Vector3 spawnPosition = new Vector3()
        {
            x = camera.transform.position.x + Random.Range(-screenBounds.x, screenBounds.x) + spawnOffset.x,
            y = camera.transform.position.y + Random.Range(-screenBounds.y, screenBounds.y) + spawnOffset.y
        };

        rainDrop.transform.position = spawnPosition;
        rainDrop.gameObject.SetActive(true);
    }
Exemple #2
0
    public void Drop(Vector2 location)
    {
        for (int i = 0; i < itemsToDrop.Length; i++)
        {
            int dropCount = Random.Range(itemsToDrop[i].dropCount.x, itemsToDrop[i].dropCount.y);

            for (int i2 = 0; i2 < dropCount; i2++)
            {
                LootableItem lootableItem = lootableItemPool?.Retrieve <LootableItem>();

                if (lootableItem != null)
                {
                    int itemCount = Random.Range(itemsToDrop[i].itemAmount.x, itemsToDrop[i].itemAmount.y);

                    lootableItem.Configure(itemsToDrop[i].itemData, itemCount);
                    lootableItem.transform.position = location + ((Vector2)Random.insideUnitSphere * dropRadius);
                    lootableItem.gameObject.SetActive(true);
                }
            }
        }
    }
Exemple #3
0
    public override IEnumerator ItemUseAction(Inventory userInventory, int itemIndex)
    {
        Aimer getAimer = userInventory.GetComponent <Aimer>();
        Mover getMover = userInventory.GetComponent <Mover>();

        //GridSelector getGridSelector = userInventory.GetComponent<GridSelector>();

        if (getMover.IsMovementFrozen)
        {
            yield break;
        }

        Vector2 attackLocation = (Vector2)userInventory.transform.position + (getAimer.GetAimDirection() * attackDistance);

        //Vector2 attackLocation = getGridSelector.GetGridWorldSelectionPosition();

        getAimer.LookAt(attackLocation);

        BodyAnimation[] getEntityAnimator = userInventory.GetComponentsInChildren <BodyAnimation>();

        float animationTime = 0;

        for (int i = 0; i < getEntityAnimator.Length; i++)
        {
            switch (attackType)
            {
            case AttackType.Smash:
                animationTime = getEntityAnimator[i].ApplySmashAnimation(speed, userInventory.GetItem(itemIndex).Data.Icon);
                break;

            case AttackType.Slash:
                animationTime = getEntityAnimator[i].ApplySlashAnimation(speed, userInventory.GetItem(itemIndex).Data.Icon);
                break;

            default:
                break;
            }
        }

        getMover.FreezeMovement(true);

        yield return(new WaitForSeconds(animationTime * 0.5f));

        GameObject damageVolume = damageVolumePool.Retrieve(attackLocation, new Quaternion());

        damageVolume.GetComponent <DamageVolume>().Configure(new DamageVolumeConfiguration()
        {
            Damage               = damage,
            Owner                = userInventory.gameObject,
            ActiveTime           = 0.5f,
            TargetTags           = targetTags,
            AllowDuplicateDamage = true,
            CanDamageMultiple    = hitMultipleTargets,
            Size = new Vector2(0.10f, 0.10f)
        });

        yield return(new WaitForSeconds(animationTime * 0.5f));

        getMover.FreezeMovement(false);

        yield return(null);
    }