IEnumerator Attack() { trigger2D.enabled = false; yield return(new WaitForSeconds(chargeTime)); trigger2D.enabled = true; animator.SetTrigger("Attack"); yield return(new WaitForSeconds(afterEffectTime)); trigger2D.enabled = false; // TODO: POOL pooler.ReturnToPool(Constants.PoolTags.Spell, gameObject, 0); }
private void OnTriggerEnter2D(Collider2D other) { // Debug.Log("Collided with " + other.tag); if (other.tag == "Enemy") { // Damage enemy other.GetComponentInParent <Heart>().Damage(damage); pooler.ReturnToPool(Constants.PoolTags.Fireball, gameObject, 0); } }
private void OnTriggerEnter2D(Collider2D col) { if (col.transform.tag == "Player") { Debug.Log("Collide with " + col.transform.name); // Damage player col.transform.GetComponent <Witch>().TakeDamage(damage); // run some anim if any // and pool it back afterwards pooler.ReturnToPool(Constants.PoolTags.Arrow, gameObject, 0); } }
private void OnTriggerEnter2D(Collider2D collision) { foreach (string typetag in shredTags) { var thisType = idManager.GetObjType(collision.gameObject); if (thisType.Equals(typetag)) { pooler.ReturnToPool(collision.gameObject); } else { Debug.Log("Type does not match shredder"); } } }
private IEnumerator DoAttack() { isAttacking = true; // for dual stick input Vector2 direction = new Vector2(Input.GetAxis("Aim_Horizontal"), Input.GetAxis("Aim_Vertical")); Debug.DrawRay(transform.position, direction, Color.red, 1); GameObject obj = pooler.RetrieveFromPool(Constants.PoolTags.Fireball, transform.position, Vector3Int.zero, transform); obj.GetComponent <Fireball>().damage = attackPower; Rigidbody2D rb = obj.GetComponent <Rigidbody2D>(); // rb.AddForce( // (direction * projectileSpeed) // ); rb.velocity = (direction * projectileSpeed); pooler.ReturnToPool(Constants.PoolTags.Fireball, obj, 3f); yield return(new WaitForSeconds(1 / attackSpeed)); isAttacking = false; }
IEnumerator SpawnEnemies(Vector2 spawnCenter) { isSpawning = true; levelNum++; // increase spawn amount linearly int spawnAmount = this.spawnAmount + levelNum % 2; levelObj.text = levelTextPrefix + (levelNum + 1); Vector2[] spawnPostions = new Vector2[spawnAmount]; for (int i = 0; i < spawnAmount; i++) { DoSpawnAnimation(i); } yield return(new WaitForSeconds(spawnAnimDuration)); for (int i = 0; i < spawnAmount; i++) { SpawnEnemy(i); } // mark the end of spawn yield return(null); // Debug.Log("Enemies Alive - " + enemiesAlive); isSpawning = false; void DoSpawnAnimation(int index) { var spawnpos = spawnPostions[index] = spawnCenter + UnityEngine.Random.insideUnitCircle * spawnRadius; var obj = pooler.RetrieveFromPool(Constants.PoolTags.SpawnAnim, spawnpos, Vector3Int.zero, transform); pooler.ReturnToPool(Constants.PoolTags.SpawnAnim, obj, spawnAnimDuration); } void SpawnEnemy(int index) { // find spawn position var spawnpos = spawnPostions[index]; var enemyTag = GetEnemyTag(); var enemyObj = pooler.RetrieveFromPool(enemyTag, spawnpos, Vector3Int.zero); // set target as player enemyObj.GetComponent <Enemy>().target = playerTransform; // set world camera enemyObj.GetComponentInChildren <Canvas>().worldCamera = cameraMain; // increase enemy count as we spawned one enemiesAlive++; textObj.text = enemiesAlive.ToString(); characterObjs.Add(enemyObj); // on death decrease enemy count enemyObj.GetComponent <Heart>().deathEvent += () => { enemiesAlive--; textObj.text = enemiesAlive.ToString(); characterObjs.Remove(enemyObj); Debug.Log("Enemies Alive - " + enemiesAlive); // if enemiesAlive goes to zero // then spawn item rewards }; // set enemy movement speed enemyObj.GetComponent <CharacterMotor>().movementSpeed = baseSpeed + levelNum * speedIncrement; } }