protected virtual IEnumerator AnimateAttack(TowerDisplay tower) { if (tower == null || tower is Object && tower.Equals(null)) { yield break; } yield return(StartCoroutine(AnimateAttack())); if (tower == null || tower is Object && tower.Equals(null)) { yield break; } var atkPwrVal = attackPower.GetValue() * (1 + technologyManager.meleeDamageRate); tower.TakeDamage(atkPwrVal, this); if (AnimationIdleIsNotNull() && !dead) { var hitFn = animationAttack.events.FirstOrDefault(x => x.functionName == "Hit"); if (hitFn != null) { yield return(new WaitForSeconds(animationAttack.length - hitFn.time)); } animator.Play(animationIdle.name, 0); } }
public virtual TowerDisplay DetectEnemyTower() { if (enemyTower == null || enemyTower is Object && enemyTower.Equals(null)) { return(null); } var atkRangeVal = rangeAttack.GetValue(); if (settings.debug) { Debug.DrawRay(transform.position, Vector3.right * (int)direction * atkRangeVal, Color.yellow); } var currentX = transform.position.x; var rangeX = currentX + atkRangeVal * (int)direction; switch (direction) { case Direction.LeftToRight: return(enemyTower.transform.position.x > currentX && enemyTower.transform.position.x <= rangeX ? enemyTower : null); case Direction.RightToLeft: return(enemyTower.transform.position.x >= rangeX && enemyTower.transform.position.x < currentX ? enemyTower : null); default: return(null); } }
protected override IEnumerator AnimateAttack(TowerDisplay tower) { if (tower == null || tower is Object && tower.Equals(null)) { yield break; } if (AnimationAttackIsNotNull()) { yield return(StartCoroutine(PrepareAnimateLaunch())); } // var projectileIns = Instantiate<ProjectileObject> (projectileObjectPrefab, _projectilePoint.position, Quaternion.identity); // projectileIns.direction = direction; // // t = h / (uB-uA) // var h = tower.transform.position.x - projectileIns.transform.position.x; // var u = projectileIns.initialVelocity * settings.deltaSpeed * settings.deltaMoveStep * settings.deltaProjectileMoveStep; // var predictedTime = h / u; // Destroy (projectileIns.gameObject, predictedTime); // yield return new WaitForSeconds (predictedTime); if (tower != null && tower is Object && !tower.Equals(null)) { var projectileIns = Instantiate <ProjectileObject> (projectileObjectPrefab, _projectilePoint.position, Quaternion.identity); projectileIns.direction = direction; var deltaDistance = Vector3.zero; var stopPos = new Vector3(transform.position.x, transform.position.y, transform.position.z); projectileIns.Launch(tower.transform.position, deltaDistance, stopPos, () => { if (tower) { var atkPwrVal = attackPower.GetValue() * (1 + technologyManager.rangeDamageRate); tower.TakeDamage(atkPwrVal, this); } }); } // if (AnimationIdleIsNotNull () && !dead) // { // var launchFn = animationAttack.events.FirstOrDefault (x => x.functionName == "Launch"); // if (launchFn != null) // { // yield return new WaitForSeconds (animationAttack.length - launchFn.time); // } // animator.Play (animationIdle.name, 0); // } }