Beispiel #1
0
    /// <summary>
    /// Coroutine done when the Ringleader is performing a melee attack.
    /// </summary>
    /// <returns>None</returns>
    private IEnumerator MeleeAttacking()
    {
        isAttacking = true;
        ringleaderMovement.canMove = false;

        ringleaderMovement.TeleportToPlayer();
        while (ringleaderMovement.IsTeleporting())
        {
            yield return(null);
        }

        this.ringleaderAnimatable.MeleeOpen();
        attackHazard.TriggerDamage(this.damage);
        while (ringleaderAnimatable.IsPlaying() && !talkPause)
        {
            yield return(null);
        }

        isAttacking = false;
        ringleaderMovement.canMove = true;

        StartCoroutine(AttackCooldown());
    }
Beispiel #2
0
//	public void FaceOtherDirection() {
//		Vector2 scale = new Vector2 (-transform.localScale.x, transform.localScale.y);
//		transform.localScale = scale;
//		direction *= (int) (transform.localScale.x / Mathf.Abs (transform.localScale.x));
//		attackHazard.transform.localScale = new Vector2 (attackHazard.transform.localScale.x * direction, 1);
////		Vector2 throwDirection = new Vector2 (throwForce.x * -direction, throwForce.y);
////		throwForce = throwDirection;
//	}

    public override void Attack()
    {
        if (!isMeleeAttacking && !isMeleeAttackCooldown && playerTransform != null && !ringleaderMovement.IsTeleporting())
        {
            ringleaderMovement.canMove = true;
        }
        else
        {
            ringleaderMovement.canMove = false;
        }

        if (gambit == Gambit.ROBIN_HOOD)
        {
            ringleaderMovement.MoveTowards(positions [2].position);

            if (!isMeleeAttackCooldown && !isMeleeAttacking && !ringleaderMovement.IsTeleporting() && (Vector3.Distance(transform.position, positions[2].position) < 1.0f))
            {
                ringleaderMovement.TeleportToPlayer();
                StartCoroutine(MeleeAttacking());
            }

            if (!isMeleeAttacking && isCharging && !isOnEnemySpawnCooldown)
            {
                StartCoroutine(SpawnEnemyInterval());

                int spawnIndex    = Random.Range(0, spawnPoints.Count);
                int throwStrength = Random.Range(0, 3);

                switch (throwStrength)
                {
                case 0:
                    throwForce = new Vector2(WEAK * direction, WEAK);
                    Debug.Log("WACK");
                    break;

                case 1:
                    throwForce = new Vector2(MEDIUM * direction, MEDIUM);
                    Debug.Log("MEDI");
                    break;

                case 2:
                    throwForce = new Vector2(STRONG * direction, STRONG);
                    Debug.Log("STRONK");
                    break;
                }

                Debug.Log("Spawn Index: " + spawnIndex);
                GameObject enemy = spawnPoints [spawnIndex].SpawnEnemy(EnemyList.EnemyType.POPCORN, spawnPoints [spawnIndex].transform.position);
                enemy.transform.localScale = new Vector2(direction * enemy.transform.localScale.x, enemy.transform.localScale.y);
                enemy.gameObject.GetComponent <Rigidbody2D> ().AddForce(throwForce);
            }

            if (!isDetonatingPlatforms && !isRestoringPlatforms && !isCharging)
            {
                StartCoroutine(DetonatingPlatforms());
                int        detonationMode = Random.Range(0, 3);
                Parameters parameters     = new Parameters();

                switch (detonationMode)
                {
                case 0:
                    parameters.PutExtra(DetonatingPlatform.DETONATION, DetonatingPlatform.Detonation_Mode.LEFT_TO_RIGHT);
                    break;

                case 1:
                    parameters.PutExtra(DetonatingPlatform.DETONATION, DetonatingPlatform.Detonation_Mode.RIGHT_TO_LEFT);
                    break;

                case 2:
                    parameters.PutExtra(DetonatingPlatform.DETONATION, DetonatingPlatform.Detonation_Mode.EITHER_SIDES);
                    break;
                }

                EventBroadcaster.Instance.PostEvent(EventNames.INITIATE_PLATFORM_DETONATION, parameters);
            }
        }
        else if (gambit == Gambit.RIDING_HOOD)
        {
            Debug.Log("POS COUNT RIDING HOOD " + positions.Count);
            Vector3 target = positions [Random.Range(0, positions.Count)].position;

            if (!isFireballCooldown)
            {
                StartCoroutine(FireballCooldown());

                fireballLionSpawn.SetDamage(this.damage);
                fireballLionSpawn.SendLionTo(target);
                previousLionTarget = target;
            }

            if (!isMeleeAttacking && !isMeleeAttackCooldown && playerTransform != null && !ringleaderMovement.IsTeleporting())
            {
                ringleaderMovement.MoveTowards(playerTransform.position);

                if (!isMeleeAttacking && !isMeleeAttackCooldown && ringleaderMovement.IsNearTarget() && !ringleaderMovement.IsTeleporting())
                {
                    StartCoroutine(MeleeAttacking());
                }

//				attackHazard.TriggerDamage (this.damage);
            }
        }
        else if (gambit == Gambit.ALICE)
        {
//			if (!isUnleashingHell && !isCharging) {
//				StartCoroutine (BulletHellTime ());
//
//				bulletHell.SetDamage (damage);
//				bulletHell.SetTarget (playerTransform);
//				List<int> denominators = new List<int> ();
//
//				switch (operationType) {
//				case YarnballControl.OperationType.DISSIMILAR:
//					List<int> possibleDenominators = FractionsReference.Instance ().RequestDenominators ();
//
//					//NOTE: commented out due to error after EnemyHealth was updated
////					foreach (int denominator in possibleDenominators) {
////						if (denominator != enemyHealth.GetDenominator ())
////							denominators.Add (denominator);
////					}
//					break;
//				case YarnballControl.OperationType.SIMILAR:
//					//NOTE: commented out due to error after EnemyHealth was updated
////					denominators.Add (enemyHealth.GetDenominator ());
//					break;
//				case YarnballControl.OperationType.MIXED:
//
//					break;
//				}
//
//				bulletHell.SetValidDenominators (denominators);
//
//				int hellStyle = Random.Range (0, 2);
//				int spinDirection = Random.Range (0, 2);
//
//				switch (hellStyle) {
//				case 0:
//					bulletHell.SetStyle (BulletHell.HellStyle.SPIRALING_SHOTS);
//					break;
//				case 1:
//					bulletHell.SetStyle (BulletHell.HellStyle.STRAIGHT_SHOTS);
//					break;
//				}
//
//				switch (spinDirection) {
//				case 0:
//					bulletHell.IsCounterClockwise (true);
//					break;
//				case 1:
//					bulletHell.IsCounterClockwise (false);
//					break;
//				}
//				Debug.Log ("Bullet Helling");
//				bulletHell.BeginHell ();
//			}
        }
    }