Ejemplo n.º 1
0
    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);
    }
Ejemplo n.º 2
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;
    }
Ejemplo n.º 3
0
 public StatsEffect(EPlayerEffect pType, float pDuration)        //, float pValue)
 {
     Type     = pType;
     duration = pDuration;
     //Value = pValue;
     timeStarted = Time.time;
 }
Ejemplo n.º 4
0
    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);
    }
Ejemplo n.º 5
0
    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);
    }
Ejemplo n.º 6
0
    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;
        }
    }
Ejemplo n.º 7
0
 public void SetEffectActive(EPlayerEffect pType, bool pState)
 {
     uiEffect.SetEffectActive(pType, pState);
     player.Photon.Send(EPhotonMsg.Player_UI_SetEffectActive, pType, pState);
 }
Ejemplo n.º 8
0
 public bool IsEffectActive(EPlayerEffect pType)
 {
     return(GetIconObject(pType).activeSelf);
 }
Ejemplo n.º 9
0
 internal void SetEffectActive(EPlayerEffect pType, bool pState)
 {
     GetIconObject(pType).SetActive(pState);
 }