public static EnemyShuriken Create(Enemy enemySpawner, Vector3 spawnPosition, Vector3 moveDir) { Transform enemyShurikenTransform = null;// Instantiate(GameAssets.i.pfEnemyShuriken, spawnPosition, Quaternion.identity); EnemyShuriken enemyShuriken = enemyShurikenTransform.GetComponent <EnemyShuriken>(); enemyShuriken.Setup(enemySpawner, moveDir); return(enemyShuriken); }
private void Update() { switch (state) { case State.Normal: enemyTarget = enemyMain.EnemyTargeting.GetActiveTarget(); if (enemyTarget != null) { Vector3 targetPosition = enemyTarget.GetPosition(); enemyMain.EnemyPathfindingMovement.MoveToTimer(targetPosition); float attackDistance = 80f; float targetDistance = Vector3.Distance(GetPosition(), targetPosition); if (targetDistance < attackDistance) { // Target within attack distance //int layerMask = ~(1 << GameAssets.i.enemyLayer | 1 << GameAssets.i.ignoreRaycastLayer | 1 << GameAssets.i.shieldLayer); int layerMask = ~0; RaycastHit2D raycastHit2D = Physics2D.Raycast(GetPosition(), (targetPosition - GetPosition()).normalized, targetDistance, layerMask); if (raycastHit2D.collider != null && raycastHit2D.collider.GetComponent <Player>()) { // Player in line of sight enemyMain.EnemyPathfindingMovement.Disable(); SetStateAttacking(); Vector3 targetDir = (targetPosition - GetPosition()).normalized; characterBase.PlayPunchAnimation(targetDir, (Vector3 hitPosition) => { // Throw rock enemyTarget = enemyMain.EnemyTargeting.GetActiveTarget(); if (enemyTarget != null) { Vector3 throwDir = (enemyTarget.GetPosition() - hitPosition).normalized; EnemyShuriken enemyShuriken = EnemyShuriken.Create(enemyMain.Enemy, hitPosition, throwDir); } //CMDebug.TextPopup("#", hitPosition); }, () => { // Punch complete enemyMain.EnemyPathfindingMovement.Enable(); SetStateNormal(); }); } } } break; case State.Attacking: break; case State.Busy: break; } }