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); }
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); } } } }
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); }