private void Awake() { if (_instance == null) { _instance = this; } }
private void Update() { if (_selfDestructTimerCurrentValue <= _selfDestructTimerDefaultValue) { _selfDestructTimerCurrentValue += Time.deltaTime; } else { Destroy(gameObject); } if (_launched) { transform.position += transform.forward * _enemySpeed * Time.deltaTime; } var screenPoint = Camera.main.WorldToViewportPoint(transform.position); _isVisible = screenPoint.z > 0 && screenPoint.x > 0 && screenPoint.x < 1 && screenPoint.y > 0 && screenPoint.y < 1; if (GameManager.TankControl && !_isVisible && _needShowArrow) { var prevSide = _enemySideIfInvisible; var enemyVector = new Vector3(transform.position.x, transform.position.z); var tankVector = new Vector3(GameManager.TankControl.transform.forward.x, GameManager.TankControl.transform.forward.z); var crossProduct = Vector3.Cross(tankVector, enemyVector); _enemySideIfInvisible = Mathf.Sign(crossProduct.z) < 0 ? Side.Right : Side.Left; if (_enemySideIfInvisible != prevSide) { if (_currentEnemyArrow) { Destroy(_currentEnemyArrow); } _currentEnemyArrow = GaragesManager.SpawnEnemyArrow(_enemySideIfInvisible); } } else { _enemySideIfInvisible = Side.None; if (_currentEnemyArrow) { Destroy(_currentEnemyArrow); } } if (_enemyHealth <= 0) { Die(); } }