Ejemplo n.º 1
0
        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);
Ejemplo n.º 8
0
 public bool IsRepresentingPowerup(ActivePowerup powerup) => representedPowerup.Powerup == powerup.Powerup;