Example #1
0
 public void AddToPool(PlayerAfterImage instance)
 {
     instance.gameObject.SetActive(false);
     instance.transform.position = Vector3.zero;
     instance.transform.SetParent(this.transform);
     _availableObjects.Enqueue(instance);
 }
Example #2
0
    public PlayerAfterImage PlaceAfterImage(Player player)
    {
        PlayerAfterImage afterImage = GetFromPool();

        afterImage.Initialize(player, this);

        return(afterImage);
    }
Example #3
0
 private void GrowPool(int numberOfObjects)
 {
     for (int i = 0; i < numberOfObjects; i++)
     {
         PlayerAfterImage instanceToAdd = Instantiate(_afterImagePrefab);
         instanceToAdd.transform.SetParent(transform);
         AddToPool(instanceToAdd);
     }
 }
Example #4
0
 private void CheckAfterImageSpawn()
 {
     if (_lastAfterImage != null)
     {
         float imageDistance = Vector2.Distance(_player.transform.position, _lastAfterImage.transform.position);
         if (imageDistance >= _distanceBetweenAfterImages)
         {
             _lastAfterImage = _afterImagePool.PlaceAfterImage(_player);
         }
     }
 }
Example #5
0
    private IEnumerator DashRoutine(float dashDuration, float cooldownDuration)
    {
        // ensure dash isn't reusable during dash
        _isReady = false;
        ShowDashReadyVisual(false);
        // perform the dash duration
        float dashElapsed = 0;

        while (dashElapsed < dashDuration)
        {
            _lastAfterImage = _afterImagePool.PlaceAfterImage(_player);

            yield return(new WaitForFixedUpdate());

            CheckAfterImageSpawn();
            dashElapsed += Time.fixedDeltaTime;
        }
        // dash portion is completed
        DashCompleted?.Invoke();
    }