internal float GetEffectValue(EPlayerEffect pType) { //bool isEffectApplied = appliedEffects.Find(a => a.Type == pType) != null; //check if effect is applied based on UI. //only UI state is shared across network bool isEffectApplied = uiEffect.IsEffectActive(pType); switch (pType) { case EPlayerEffect.DoubleSpeed: return(isEffectApplied ? 2 : 1); case EPlayerEffect.HalfSpeed: return(isEffectApplied ? 0.5f : 1); case EPlayerEffect.Shield: return(isEffectApplied ? 1 : 0); case EPlayerEffect.DoubleDamage: return(isEffectApplied ? 2 : 1); case EPlayerEffect.HalfDamage: return(isEffectApplied ? 0.5f : 1); } Debug.LogError($"Effect value {pType} undefined"); return(0); }
public void ApplyEffect(EPlayerEffect pType, float pDuration) //, float pValue = 1) { StatsEffect appliedEffect = appliedEffects.Find(a => a.Type == pType); float duration = pDuration; //Debug.Log($"ApplyEffect {pType} for {duration}"); if (appliedEffect != null) { LeanTween.cancel(appliedEffect.id); appliedEffects.Remove(appliedEffect); if (appliedEffect.TimeLeft < 0) { Debug.LogError("Time left cant be < 0"); } duration += appliedEffect.TimeLeft; //Debug.Log($"{pType}: add {appliedEffect.TimeLeft}s => {duration}s"); } StatsEffect newEffect = new StatsEffect(pType, duration); //, pValue); appliedEffects.Add(newEffect); SetEffectActive(pType, true); int id = DoInTime(() => RemoveEffect(pType), duration); newEffect.id = id; }
public StatsEffect(EPlayerEffect pType, float pDuration) //, float pValue) { Type = pType; duration = pDuration; //Value = pValue; timeStarted = Time.time; }
private GameObject GetIconObject(EPlayerEffect pType) { switch (pType) { case EPlayerEffect.None: break; case EPlayerEffect.DoubleSpeed: return(doubleSpeed); case EPlayerEffect.HalfSpeed: return(halfSpeed); case EPlayerEffect.Shield: return(shield); case EPlayerEffect.DoubleDamage: return(doubleDamage); case EPlayerEffect.HalfDamage: return(halfDamage); default: break; } Debug.LogError($"Effect {pType} not found"); return(null); }
private void RemoveEffect(EPlayerEffect pType) { int index = appliedEffects.FindIndex(a => a.Type == pType); if (index < 0) { Debug.LogError($"Effect {pType} not found"); return; } appliedEffects.RemoveAt(index); SetEffectActive(pType, false); }
protected override void HandleMsg2(EPhotonMsg pReceivedMsg, object[] pParams, ByteBuffer bb) { if (!isInited && pReceivedMsg != EPhotonMsg.Player_InitPlayer) { Debug.Log(gameObject.name + " not inited yet. " + pReceivedMsg); player.OnPlayerInited.AddAction(() => HandleMsg2(pReceivedMsg, pParams, bb)); return; } switch (pReceivedMsg) { case EPhotonMsg.Player_ChangeDirection: EDirection dir = (EDirection)pParams[0]; player.Visual.OnDirectionChange(dir); return; case EPhotonMsg.Player_InitPlayer: int playerNumber = (int)pParams[0]; PlayerInitInfo info = brainiacs.GameInitInfo.GetPlayer(playerNumber); player.OnReceivedInitInfo(info, false); return; case EPhotonMsg.Player_ShowWeapon: EWeaponId weapon = (EWeaponId)pParams[0]; player.Visual.ShowWeapon(weapon); return; case EPhotonMsg.Player_ApplyDamage: int damage = (int)pParams[0]; playerNumber = (int)pParams[1]; Player originOfDamage = game.PlayerManager.GetPlayer(playerNumber); player.Health.ApplyDamage(damage, originOfDamage); return; case EPhotonMsg.Player_Push: Vector2 push = (Vector2)pParams[0]; player.Push.Push(push); return; case EPhotonMsg.Player_AddKill: //EPlayerStats stat = (EPlayerStats)pParams[0]; //int value = (int)pParams[1]; //bool force = (bool)pParams[2]; bool force = (bool)pParams[0]; player.Stats.AddKill(force); return; case EPhotonMsg.Player_SetSyncPosition: Vector2 pos = (Vector2)pParams[0]; dir = (EDirection)pParams[1]; bool isActuallyMoving = (bool)pParams[2]; float speed = (float)pParams[3]; bool instantly = (bool)pParams[4]; player.Movement.SetSyncPosition(pos, dir, isActuallyMoving, speed, instantly); return; case EPhotonMsg.Player_UI_PlayerInfo_SetHealth: int health = (int)pParams[0]; player.Visual.PlayerInfo.SetHealth(health); return; case EPhotonMsg.Player_UI_PlayerInfo_SetReloading: bool isReloading = (bool)pParams[0]; float reloadTime = (float)pParams[1]; player.Visual.PlayerInfo.SetReloading(isReloading, reloadTime); return; case EPhotonMsg.Player_UI_PlayerInfo_SetAmmo: int ammo = (int)pParams[0]; bool weaponUsed = (bool)pParams[1]; player.Visual.PlayerInfo.SetAmmo(ammo, weaponUsed); return; case EPhotonMsg.Player_UI_PlayerInfo_SetActiveWeapon: weapon = (EWeaponId)pParams[0]; float cadency = (float)pParams[1]; player.Visual.PlayerInfo.SetActiveWeapon(weapon, cadency); return; case EPhotonMsg.Player_UI_Scoreboard_SetScore: int kills = (int)pParams[0]; int deaths = (int)pParams[1]; player.Visual.Scoreboard.SetScore(kills, deaths); return; case EPhotonMsg.Player_UI_SetEffectActive: EPlayerEffect effect = (EPlayerEffect)pParams[0]; bool state = (bool)pParams[1]; player.Stats.StatsEffect.SetEffectActive(effect, state); return; case EPhotonMsg.Player_OnReceiveDamageEffect: player.Health.OnReceiveDamageEffect(); break; case EPhotonMsg.Player_Visual_OnDie: player.Visual.OnDie(); break; case EPhotonMsg.Player_DoEliminateEffect: player.Health.DoEliminateEffect(); break; case EPhotonMsg.Player_PlayWeaponUseSound: EWeaponId id = (EWeaponId)pParams[0]; player.WeaponController.PlayWeaponUseSound(id); return; case EPhotonMsg.Player_DoShieldHitEffect: player.Stats.DoShieldHitEffect(); return; default: OnMsgUnhandled(pReceivedMsg); break; } }
public void SetEffectActive(EPlayerEffect pType, bool pState) { uiEffect.SetEffectActive(pType, pState); player.Photon.Send(EPhotonMsg.Player_UI_SetEffectActive, pType, pState); }
public bool IsEffectActive(EPlayerEffect pType) { return(GetIconObject(pType).activeSelf); }
internal void SetEffectActive(EPlayerEffect pType, bool pState) { GetIconObject(pType).SetActive(pState); }