public void AddToPool(PlayerAfterImage instance) { instance.gameObject.SetActive(false); instance.transform.position = Vector3.zero; instance.transform.SetParent(this.transform); _availableObjects.Enqueue(instance); }
public PlayerAfterImage PlaceAfterImage(Player player) { PlayerAfterImage afterImage = GetFromPool(); afterImage.Initialize(player, this); return(afterImage); }
private void GrowPool(int numberOfObjects) { for (int i = 0; i < numberOfObjects; i++) { PlayerAfterImage instanceToAdd = Instantiate(_afterImagePrefab); instanceToAdd.transform.SetParent(transform); AddToPool(instanceToAdd); } }
private void CheckAfterImageSpawn() { if (_lastAfterImage != null) { float imageDistance = Vector2.Distance(_player.transform.position, _lastAfterImage.transform.position); if (imageDistance >= _distanceBetweenAfterImages) { _lastAfterImage = _afterImagePool.PlaceAfterImage(_player); } } }
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(); }