private EnemyHandler GetClosestEnemyHandler(Vector3 playerPosition) { const float maxDistance = 50f; EnemyHandler closest = null; foreach (EnemyHandler enemyHandler in enemyHandlerList) { if (Vector3.Distance(playerPosition, enemyHandler.GetPosition()) > maxDistance) { continue; } if (closest == null) { closest = enemyHandler; } else { if (Vector3.Distance(playerPosition, enemyHandler.GetPosition()) < Vector3.Distance(playerPosition, closest.GetPosition())) { closest = enemyHandler; } } } return(closest); }
private void SpawnEnemy() { Vector3 spawnPosition = playerHandler.GetPosition() + UtilsClass.GetRandomDir() * UnityEngine.Random.Range(50, 100f); EnemyHandler enemyHandler = EnemyHandler.CreateEnemy(spawnPosition, playerHandler); enemyHandler.OnDead += EnemyHandler_OnDead; enemyHandlerList.Add(enemyHandler); }
private void HandleAttack() { if (Input.GetKeyDown(KeyCode.Space)) { // Attack SetStateBusy(); Vector3 attackDir = lastMoveDir; EnemyHandler enemyHandler = getClosestEnemyHandlerFunc(GetPosition() + attackDir * 4f); if (enemyHandler != null) { // Has a target nearby attackDir = (enemyHandler.GetPosition() - GetPosition()).normalized; // Test if too close to dash const float tooCloseToDashDistance = 10f; if (Vector3.Distance(enemyHandler.GetPosition(), GetPosition()) > tooCloseToDashDistance) { // Dash towards attack distance transform.position = transform.position + attackDir * 4f; } // Is enemy within attack range? const float attackDistance = 30f; if (Vector3.Distance(enemyHandler.GetPosition(), GetPosition()) < attackDistance) { // Close enough to damage enemyHandler.GetHealthSystem().Damage(34); Blood_Handler.SpawnBlood(enemyHandler.GetPosition(), attackDir); } } else { // No nearby target transform.position = transform.position + attackDir * 4f; } lastMoveDir = attackDir; Transform swordSlashTransform = Instantiate(GameAssets.i.pfSwordSlash, GetPosition() + attackDir * 13f, Quaternion.Euler(0, 0, UtilsClass.GetAngleFromVector(attackDir))); swordSlashTransform.GetComponent <SpriteAnimator>().onLoop = () => Destroy(swordSlashTransform.gameObject); UnitAnimType activeAnimType = unitAnimation.GetActiveAnimType(); if (activeAnimType == GameAssets.UnitAnimTypeEnum.dSwordTwoHandedBack_Sword) { swordSlashTransform.localScale = new Vector3(swordSlashTransform.localScale.x, swordSlashTransform.localScale.y * -1, swordSlashTransform.localScale.z); unitAnimation.PlayAnimForced(GameAssets.UnitAnimTypeEnum.dSwordTwoHandedBack_Sword2, lastMoveDir, 1f, (UnitAnim unitAnim) => SetStateNormal(), null, null); } else { unitAnimation.PlayAnimForced(GameAssets.UnitAnimTypeEnum.dSwordTwoHandedBack_Sword, lastMoveDir, 1f, (UnitAnim unitAnim) => SetStateNormal(), null, null); } } }
public static EnemyHandler CreateEnemy(Vector3 spawnPosition, PlayerHandler playerHandler) { Transform enemyTransform = Instantiate(GameAssets.i.pfEnemyTransform, spawnPosition, Quaternion.identity); EnemyHandler enemyHandler = enemyTransform.GetComponent <EnemyHandler>(); HealthSystem healthSystem = new HealthSystem(100); HealthBar healthBar = Instantiate(GameAssets.i.pfHealthBar, spawnPosition + new Vector3(0, 10), Quaternion.identity, enemyTransform).GetComponent <HealthBar>(); healthBar.Setup(healthSystem); enemyHandler.Setup(playerHandler, healthSystem); return(enemyHandler); }
private void EnemyHandler_OnDead(object sender, System.EventArgs e) { EnemyHandler enemyHandler = sender as EnemyHandler; enemyHandlerList.Remove(enemyHandler); }