public void Show(ActivePowerup powerup) { gameObject.SetActive(true); representedPowerup = powerup; icon.sprite = powerup.Powerup.Sprite; InvokeRepeating(nameof(RefreshTimer), 0.1f, 0.3f); Invoke(nameof(Hide), powerup.TimeLeft); }
private void AddPowerup(ActivePowerup powerup) { ActivePowerupUI powerupUI = null; if (!TryGetFromPool(out powerupUI)) { powerupUI = Instantiate(activePowerupUIPrefab, activePowerupContainer); pooledUI.Add(powerupUI); } powerupUI.Show(powerup); }
private void RemovePowerup(ActivePowerup powerup) { for (int i = 0; i < pooledUI.Count; i++) { if (!pooledUI[i].gameObject.activeSelf) { continue; } if (pooledUI[i].IsRepresentingPowerup(powerup)) { pooledUI[i].Hide(); } } }
private void Enqueue(PowerUpBase powerup) { ActivePowerup activeSlot = new ActivePowerup(); activeSlot.Powerup = powerup; activeSlot.Timeout = m_CurrentTime + powerup.Duration; GameObject uiNode = GameObject.Instantiate(kIconPrefab, kUINode); Image image = uiNode.GetComponent <Image>(); Assert.IsNotNull(image); image.sprite = powerup.kSprite; activeSlot.UIElement = uiNode; // Must be done last - ActivePowerup is a struct! m_ActivePowerups.Add(activeSlot); }
public void Apply(PowerUpBase powerup) { int powerUpIndex = Find(powerup); // If we do not have the power, we need to apply its effect and add it to the timeout queue if (powerUpIndex == -1) { powerup.Apply(gameObject); Enqueue(powerup); } else // Otherwise we need to extend its duration(without applying it) { ActivePowerup activeSlot = m_ActivePowerups[powerUpIndex]; activeSlot.Timeout = m_CurrentTime + powerup.Duration; m_ActivePowerups[powerUpIndex] = activeSlot; } }
private void OnPowerupDeactivated(ActivePowerup powerup) => RemovePowerup(powerup);
private void OnPowerupActivated(ActivePowerup powerup) => AddPowerup(powerup);
public bool IsRepresentingPowerup(ActivePowerup powerup) => representedPowerup.Powerup == powerup.Powerup;