private void ShootUnit(UnitGridCombat unitGridCombat, Action onShootComplete) { GetComponent <IMoveVelocity>().Disable(); Vector3 attackDir = (unitGridCombat.GetPosition() - transform.position).normalized; //UtilsClass.ShakeCamera(.6f, .1f); GameHandler_GridCombatSystem.Instance.ScreenShake(); characterBase.PlayShootAnimation(attackDir, (Vector3 vec) => { Shoot_Flash.AddFlash(vec); WeaponTracer.Create(vec, unitGridCombat.GetPosition() + GetRandomDir() * UnityEngine.Random.Range(-2f, 4f)); unitGridCombat.Damage(this, UnityEngine.Random.Range(4, 12)); }, () => { characterBase.PlayIdleAnim(); GetComponent <IMoveVelocity>().Enable(); onShootComplete(); }); }
private void Update() { switch (state) { case State.Normal: if (enemyRTS != null) { float attackRange = 70f; if (Vector3.Distance(transform.position, enemyRTS.GetPosition()) < attackRange) { MoveTo(transform.position); GetComponent <IMoveVelocity>().Disable(); Vector3 attackDir = (enemyRTS.GetPosition() - transform.position).normalized; UtilsClass.ShakeCamera(.6f, .1f); characterBase.PlayShootAnimation(attackDir, (Vector3 vec) => { Shoot_Flash.AddFlash(vec); WeaponTracer.Create(vec, enemyRTS.GetPosition()); enemyRTS.Damage(this, Random.Range(5, 15)); }, () => { characterBase.PlayIdleAnim(); GetComponent <IMoveVelocity>().Enable(); state = State.Normal; }); state = State.Attacking; } else { // Move Closer MoveTo(enemyRTS.GetPosition()); } } else { // No enemy } break; case State.Attacking: break; } }