Пример #1
0
        protected internal override void Evolve()
        {
            base.Evolve();

            for (var i = 0; i < Length; i++)
            {
                Character ch;
                if (Cur[i] > 0 && (ch = FindChar(i)) != null)
                {
                    Buff.Prolong <Vertigo>(ch, Vertigo.Duration(ch));
                }
            }
        }
Пример #2
0
        protected internal override void OnZap(int cell)
        {
            var ch = Actor.FindChar(cell);

            if (ch != null)
            {
                if (ch == Dungeon.Hero)
                {
                    Buff.Affect <Vertigo>(ch, Vertigo.Duration(ch));
                }
                else
                {
                    Buff.Affect <Amok>(ch, 3f + Level);
                }
            }
            else
            {
                GLog.Information("nothing happened");
            }
        }
    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (!collider.IsTouching(collision))
        {
            return;
        }

        if (IsEffectEnable && collision.gameObject.layer == 9 && !Player.IsDefence)
        {
            PlayerBase other       = collision.gameObject.GetComponent <PlayerBase>();
            float      AttackPower = 0.0f;
            if (!other)
            {
                Vector2 origin2target = (collision.transform.position - transform.position).normalized;
                float   angle         = Vector2.Angle(LastVelocity, origin2target);
                AttackPower = LastVelocity.magnitude * Mathf.Cos(Mathf.Deg2Rad * angle);
            }
            else
            {
                if (other.FunctionBases.ContainsKey("VertigoAction"))
                {
                    VertigoAction vertigoActionOther = other.FunctionBases["VertigoAction"] as VertigoAction;
                    Vector2       otherVelocity      = vertigoActionOther.LastVelocity;
                    Vector2       myVelocity         = LastVelocity;
                    Vector2       origin2target      = (collision.transform.position - transform.position).normalized;
                    Vector2       attackVelocity     = myVelocity - otherVelocity;
                    float         angle = Vector2.Angle(origin2target, attackVelocity);
                    AttackPower = attackVelocity.magnitude * Mathf.Cos(Mathf.Deg2Rad * angle);
                }
            }

            if (AttackPower > MaxAttackPower)
            {
                Vertigo vertigo = new Vertigo(VertigoTime, AttackForceCoefficientAdd);
                Player.BuffManager.AddBuff(vertigo);
                vertigo.MaxTime.OnTimeOut += OnVertigoEnd;
                VertigoAct?.Invoke(true);
            }
        }
    }
Пример #4
0
        public override bool Proc(Weapon weapon, Character attacker, Character defender, int damage)
        {
            // lvl 0 - 20%
            // lvl 1 - 33%
            // lvl 2 - 43%
            var level = Math.Max(0, weapon.level);

            if (pdsharp.utils.Random.Int(level + 5) < 4)
            {
                return(false);
            }

            if (defender == Dungeon.Hero)
            {
                Buff.Affect <Vertigo>(defender, Vertigo.Duration(defender));
            }
            else
            {
                Buff.Affect <Terror>(defender, Terror.Duration).Source = attacker;
            }

            return(true);
        }