//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)); } }
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); } }