private IEnumerator LaunchTemporaryPowerUpSequence(PowerUpEffect effect) { float duration = effect.mainDuration; float timer = 0; WaitForEndOfFrame wait = new WaitForEndOfFrame(); paddleLengthBonusMultiplier += (effect.paddleLengthMultiplier - 1); UpdatePaddleLengthToTargetLength(); globalBallSpeedBonusMultiplier += (effect.ballSpeedMultiplier - 1); ApplyGlobalBallSpeedScale(globalBallSpeedBonusMultiplier); Debug.Log($"Started temporary effect {effect.name}."); while (timer < duration) { timer += Time.deltaTime; yield return(wait); } paddleLengthBonusMultiplier -= (effect.paddleLengthMultiplier - 1); UpdatePaddleLengthToTargetLength(); globalBallSpeedBonusMultiplier -= (effect.ballSpeedMultiplier - 1); ApplyGlobalBallSpeedScale(globalBallSpeedBonusMultiplier); Debug.Log($"Ended temporary effect {effect.name}."); yield return(null); }
/// <summary> /// Handle changes to settings over time /// </summary> /// <param name="powerUp">An effect to apply</param> /// <returns></returns> private IEnumerator ApplyPowerUpEnum(PowerUpEffect powerUp) { movable.speed += powerUp.playerMotionSpeedBoost; rotateable.rotationSpeed += powerUp.playerRotationSpeedBoost; var startScatterAmount = shooter.scatterAmount; shooter.scatterAmount = Mathf.Clamp(shooter.scatterAmount - powerUp.playerShootAccuracyBoost, 0f, 360f); var scatterAmountDelta = startScatterAmount - shooter.scatterAmount; shooter.scatterAmount = Mathf.Max(shooter.scatterAmount - powerUp.playerShootAccuracyBoost, 0); shooter.projectileLifeTime += powerUp.projectilesLifeTimeBoost; shooter.delay -= powerUp.shootFrequencyBoost; var startTimeScale = Time.timeScale; Time.timeScale = Mathf.Clamp(Time.timeScale - powerUp.timeScaleBoost, 0.3f, 2f); var timeScaleDelta = startTimeScale - Time.timeScale; yield return(new WaitForSeconds(powerUp.effectTime)); movable.speed = Mathf.Max(movable.speed - powerUp.playerMotionSpeedBoost, GameManager.Instance.gamePreset.motionSpeed); rotateable.rotationSpeed = Mathf.Max(rotateable.rotationSpeed - powerUp.playerRotationSpeedBoost, GameManager.Instance.gamePreset.rotationSpeed); shooter.scatterAmount += scatterAmountDelta; shooter.projectileLifeTime -= powerUp.projectilesLifeTimeBoost; shooter.delay += powerUp.shootFrequencyBoost; Time.timeScale += timeScaleDelta; }
/// <summary> /// Event function for collected magnet /// </summary> /// <param name="eventName"></param> /// <param name="actionParams"></param> private void OnCollectedMagnet(string eventName, ActionParams actionParams) { m_Scene.GetEventManager().RemoveListenerFromEvent(ApplicationConstants.EVENT_PLAYER_COLLECTED_MAGNET, OnCollectedMagnet); mActivePowerUp = PowerUpEffect.Magnet; isMagnetActive = true; }
private new void Start() { base.Start(); isMagnetActive = false; mActivePowerUp = PowerUpEffect.None; origValue = _value; }
//private PowerUpType _powerUpSlot = PowerUpType.POWERUP_NULL; private PRActions TypeToAction(PowerUpEffect effect) { switch (effect) { case PowerUpEffect.None: return(PRActions.POWERUP_NONE); case PowerUpEffect.Magnet: return(PRActions.POWERUP_MAGNET); default: return(PRActions.NULL); } }
public void OnSpawned() { if (effects.Count == 0) { if (GameManager.Instance.Log(LogLevel.ErrorsAndWarnings)) { Debug.LogWarning("No effects to choose from", gameObject); } return; } _chosenEffect = effects.Count == 1 ? effects[0] : effects[Random.Range(0, effects.Count)]; movable.MakeImmuneToBorderControl(onSpawnBorderImmunityTime); movable.AddForceTowardsCenter(GameManager.Instance.gamePreset.spawnedCenterTargetOffset); }
public override void Init() { base.Init(); isMagnetActive = false; mActivePowerUp = m_Scene.GetLocalPowerUpManager().GetActivatedPowerUp(); if (mActivePowerUp.Equals(PowerUpEffect.Magnet)) { OnCollectedMagnet("", ActionParams.EmptyParams); } mPlayer = m_Scene.GetPlayer(); m_Scene.GetEventManager().ListenToEvent(ApplicationConstants.EVENT_PLAYER_COLLECTED_MAGNET, OnCollectedMagnet); }
public void ReceivePowerUp(PowerUpEffect effect) { if (GameManager.instance.allowEvents) { //Debug.Log(effect.name); //One-time effects SpawnNewBalls(effect.balls); SetMoney(money + effect.money); SetShields(shields + effect.shield); permaBonusBasePaddleLength += effect.paddleLength; UpdatePaddleLengthToTargetLength(); if (effect.mainDuration != 0) { StartCoroutine(LaunchTemporaryPowerUpSequence(effect)); } } }
private void Awake() { rb = GetComponent <Rigidbody2D>(); vaus = GameManager.instance.vaus; if (effectPool.Length == 0) { effectPool = Resources.LoadAll <PowerUpEffect>("PowerUpEffects"); } effect = effectPool[Random.Range(0, effectPool.Length)]; baseSpeed = effect.baseSpeed; acceleration = effect.acceleration; backgroundSR.color = effect.backgroundColor; iconSR.color = effect.iconColor; if (effect.sprite != null) { iconSR.sprite = effect.sprite; } rb.velocity = new Vector2(0, -baseSpeed); }
/// <summary> /// Temporarily alter the player's settings with a power up. Display the power up name /// </summary> /// <param name="powerUp">An effect to apply</param> public void ApplyPowerUp(PowerUpEffect powerUp) { _powerUpCoroutine = StartCoroutine(ApplyPowerUpEnum(powerUp)); HUDManager.Instance.DisplayMessage(powerUp.name); }
public void SetEffect(PowerUpEffect effect) { this.effect = effect; }
void Start() { pickupEffect = GetComponent <ParticleSystem>(); powerEffect = GetComponent <PowerUpEffect>(); }