Пример #1
0
 //applies Tougher Enemies bonuses to this enemy
 public void ApplyRiskStatChanges()
 {
     riskHPBoost     = RISK_HP_BOOST_DEFAULT;
     riskSpeedBoost  = RISK_SPEED_BOOST_DEFAULT;
     riskShieldBoost = RISK_SHIELD_BOOST_DEFAULT;
     SetMaxHP(maxhp * (1f + riskHPBoost));
     SetHP(maxhp);
     if (shield != null)
     {
         shield.SetAllShieldHP(shield.GetBaseHP() * (1f + riskShieldBoost));
     }
 }
Пример #2
0
    public void Update()
    {
        if (state == states.REACHING)
        {
            float progress = grabTimer.TimeElapsedSecs() / reachTime;
            float dist;

            if (progress >= 1f)             //if we've reached past
            {
                state = states.GRABBING;
                dist  = distance;
                grabTimer.Restart();
            }
            else if (progress > SLOW_THRESH)
            {
                float subProgress = (progress - SLOW_THRESH) / (1f - SLOW_THRESH);
                dist = headMinimum + fastLegDist + mediLegDist + subProgress * slowLegDist;
            }
            else if (progress > MEDI_THRESH)
            {
                float subProgress = (progress - MEDI_THRESH) / (SLOW_THRESH - MEDI_THRESH); //how much of the medium speed leg has it travered?
                dist = headMinimum + fastLegDist + subProgress * mediLegDist;               //get actual distance
            }
            else
            {
                float subProgress = progress / MEDI_THRESH;               //how much of the fast leg has it traversed?
                dist = headMinimum + subProgress * fastLegDist;           //get actual distance from center to put the thing
            }
            if (progress >= 1f)
            {
                PositionHead();
            }
            else
            {
                PositionHead(dist);
            }
        }
        else if (state == states.GRABBING)
        {
            drainTimer.Restart();
            state = states.DRAINING;
        }
        else if (state == states.DRAINING)
        {
            float drainProg = drainTimer.TimeElapsedSecs() / drainTime;

            if (targetShield != null)
            {
                float targetHP      = initialHP - (initialHP * drainProg);
                float currentHP     = targetShield.GetCurrentHP();
                float drainedAmount = targetShield.Drain(currentHP - targetHP);
                bulk.ReceiveDrainedShields(drainedAmount);
            }

            PositionHead();
            if (drainTimer.TimeElapsedSecs() > drainTime)
            {
                targetShield.Drain(targetShield.GetBaseHP());                //drain any remaining shield
                state = states.FADING;
            }
        }
        else if (state == states.FADING)
        {
            float progress = 1f - (grabTimer.TimeElapsedSecs() / reachTime);
            headImg.color = new Color(headImg.color.r, headImg.color.g, headImg.color.b, progress);
            beamImg.color = new Color(beamImg.color.r, beamImg.color.g, beamImg.color.b, progress);
            float dist = headMinimum + fastLegDist + mediLegDist + slowLegDist;
            PositionHead(dist);
            if (progress < 0)
            {
                target.GetComponent <Enemy>().UndoBulkDrainTarget();
                state = states.DONE;
            }
        }
        else if (state == states.DONE)
        {
            Destroy(gameObject);
        }
    }