Esempio n. 1
0
        private void CheckForStateChange()
        {
            if (_currentState == TransformStates.NotMoving)
            {
                if (_redArrowRect.Contains(_lastMousePosition.ToPoint()))
                {
                    if (InputManager.Instance.CurrentMouseState.LeftButton == ButtonState.Pressed)
                    {
                        _currentState     = TransformStates.MovingX;
                        MouseDownPosition = MousePosition;
                    }
                }

                if (_greenArrowRect.Contains(_lastMousePosition.ToPoint()))
                {
                    if (InputManager.Instance.CurrentMouseState.LeftButton == ButtonState.Pressed)
                    {
                        _currentState = TransformStates.MovingY;
                    }
                }

                if (yellowDotRect.Contains(_lastMousePosition.ToPoint()))
                {
                    if (InputManager.Instance.CurrentMouseState.LeftButton == ButtonState.Pressed)
                    {
                        _currentState = TransformStates.Moving;
                    }
                }

                if (_blueArrowRect.Contains((_lastMousePosition.ToPoint())))
                {
                    if (InputManager.Instance.CurrentMouseState.LeftButton == ButtonState.Pressed)
                    {
                        _currentState = TransformStates.Rotate;
                    }
                }
            }

            if (_currentState == TransformStates.MovingX || _currentState == TransformStates.MovingY || _currentState == TransformStates.Moving ||
                _currentState == TransformStates.Rotate)
            {
                if (InputManager.Instance.CurrentMouseState.LeftButton == ButtonState.Released &&
                    InputManager.Instance.PreviousMouseState.LeftButton == ButtonState.Released)
                {
                    _currentState = TransformStates.NotMoving;
                }
            }
        }
Esempio n. 2
0
 protected override void Reinit(int index)
 {
     TransformStates.Add(new TransformState(IdIn[index], FInitialValueIn[index]));
 }
Esempio n. 3
0
        public static float GetRealDamage(SpellSlot slot, Obj_AI_Base target, TransformStates state = TransformStates.Automatic)
        {
            // Helpers
            var spellLevel = Player.Instance.Spellbook.GetSpell(slot).Level;
            var damageType = DamageType.Physical;
            float damage = 0;
            float extraDamage = 0;

            // Validate spell level
            if (spellLevel == 0)
                return 0;
            spellLevel--;

            switch (slot)
            {
                case SpellSlot.Q:

                    if (state == TransformStates.Mini || state == TransformStates.Automatic && Player.Instance.IsMiniGnar())
                    {
                        // Throws a boomerang that deals 5/35/65/95/125 (+1.15) physical damage and slows enemies by 15/20/25/30/35% for 2 seconds.
                        // The boomerang returns towards Gnar after hitting an enemy, dealing 50% damage to subsequent targets. Each enemy can only be hit once.
                        damage = new[] { 5, 35, 65, 95, 125 }[spellLevel] + 1.15f * Player.Instance.TotalAttackDamage;
                    }
                    else if (state == TransformStates.Mega || state == TransformStates.Automatic && Player.Instance.IsMegaGnar())
                    {
                        // Throws a boulder that stops when it hits an enemy, slowing all nearby enemies and dealing 5/45/85/125/165 (+1.2) physical damage.
                        damage = new[] { 5, 45, 85, 125, 165 }[spellLevel] + 1.2f * (Player.Instance.BaseAttackDamage + Player.Instance.FlatPhysicalDamageMod);
                    }

                    break;

                case SpellSlot.W:

                    if (state == TransformStates.Mini || state == TransformStates.Automatic && Player.Instance.IsMiniGnar())
                    {
                        // Every 3rd attack or spell on the same target deals an additional 10/20/30/40/50 (+1) + 6/8/10/12/14% of the target's max Health as magic damage
                        // and grants Gnar undefined% Movement Speed that decays over 3 seconds (max 100/150/200/250/300 damage vs. monsters). 
                        var buff = target.Buffs.FirstOrDefault(b => b.IsActive && Game.Time < b.EndTime && b.DisplayName == "GnarWProc" && b.Caster.NetworkId == Player.Instance.NetworkId);
                        if (buff != null && buff.Count == 2)
                        {
                            damageType = DamageType.Magical;
                            damage = new[] { 10, 20, 30, 40, 50 }[spellLevel] + Player.Instance.TotalMagicalDamage + new[] { 0.06f, 0.08f, 0.1f, 0.12f, 0.14f }[spellLevel] * target.MaxHealth;

                            // Special case for minions
                            if (target is Obj_AI_Minion)
                            {
                                var maxDamage = new[] { 100, 150, 200, 250, 300 }[spellLevel];
                                if (Player.Instance.CalculateDamageOnUnit(target, damageType, damage) > maxDamage)
                                {
                                    damageType = DamageType.True;
                                    damage = maxDamage;
                                }
                            }
                        }
                    }
                    else if (state == TransformStates.Mega || state == TransformStates.Automatic && Player.Instance.IsMegaGnar())
                    {
                        // Stuns enemies in an area for 1.25 seconds, dealing 25/45/65/85/105 (+1) physical damage.
                        damage = new[] { 25, 45, 65, 85, 105 }[spellLevel] + (Player.Instance.BaseAttackDamage + Player.Instance.FlatPhysicalDamageMod);
                    }

                    break;

                case SpellSlot.E:

                    if (state == TransformStates.Mini || state == TransformStates.Automatic && Player.Instance.IsMiniGnar())
                    {
                        // Leaps to a location, gaining 20/30/40/50/60% Attack Speed for 3 seconds. If Gnar lands on a unit he will bounce off it, traveling further.
                        // Deals 20/60/100/140/180 (+undefined) [6% of Gnar's Max Health] physical damage and slows briefly if the unit landed on was an enemy.
                        damage = new[] { 20, 60, 100, 140, 180 }[spellLevel] + 0.06f * Player.Instance.MaxHealth;
                    }
                    else if (state == TransformStates.Mega || state == TransformStates.Automatic && Player.Instance.IsMegaGnar())
                    {
                        // Leaps to a location and deals 20/60/100/140/180 (+undefined) [6% of Gnar's Max Health] physical damage to all nearby enemies on landing.
                        // Enemies Gnar lands directly on top of are slowed briefly.
                        damage = new[] { 20, 60, 100, 140, 180 }[spellLevel] + 0.06f * Player.Instance.MaxHealth;
                    }

                    break;

                case SpellSlot.R:

                    if (state == TransformStates.Mega || state == TransformStates.Automatic && Player.Instance.IsMegaGnar())
                    {
                        // Knocks all nearby enemies in the specified direction, dealing 200/300/400 (+0.2) (+0.5) physical damage and slowing them by 45% for 1.25/1.5/1.75 seconds.
                        // Any enemy that hits a wall takes 150% damage and is stunned instead of slowed.
                        damage = new[] { 200, 300, 400 }[spellLevel] + 0.2f * Player.Instance.TotalAttackDamage;
                        extraDamage = Player.Instance.CalculateDamageOnUnit(target, DamageType.Magical, Player.Instance.BaseAbilityDamage + Player.Instance.FlatMagicDamageMod);
                    }

                    break;
            }

            // No damage set
            if (damage <= 0 && extraDamage <= 0)
            {
                return 0;
            }

            // Calculate damage on target and return (-20 to make it actually more accurate Kappa)
            return Player.Instance.CalculateDamageOnUnit(target, damageType, damage) + extraDamage - 20;
        }
Esempio n. 4
0
        public static float GetRealDamage(SpellSlot slot, Obj_AI_Base target, TransformStates state = TransformStates.Automatic)
        {
            // Helpers
            var   spellLevel  = Player.Instance.Spellbook.GetSpell(slot).Level;
            var   damageType  = DamageType.Physical;
            float damage      = 0;
            float extraDamage = 0;

            // Validate spell level
            if (spellLevel == 0)
            {
                return(0);
            }
            spellLevel--;

            switch (slot)
            {
            case SpellSlot.Q:

                if (state == TransformStates.Mini || state == TransformStates.Automatic && Player.Instance.IsMiniGnar())
                {
                    // Throws a boomerang that deals 5/35/65/95/125 (+1.15) physical damage and slows enemies by 15/20/25/30/35% for 2 seconds.
                    // The boomerang returns towards Gnar after hitting an enemy, dealing 50% damage to subsequent targets. Each enemy can only be hit once.
                    damage = new[] { 5, 35, 65, 95, 125 }[spellLevel] +1.15f * Player.Instance.TotalAttackDamage;
                }
                else if (state == TransformStates.Mega || state == TransformStates.Automatic && Player.Instance.IsMegaGnar())
                {
                    // Throws a boulder that stops when it hits an enemy, slowing all nearby enemies and dealing 5/45/85/125/165 (+1.2) physical damage.
                    damage = new[] { 5, 45, 85, 125, 165 }[spellLevel] +1.2f * (Player.Instance.BaseAttackDamage + Player.Instance.FlatPhysicalDamageMod);
                }

                break;

            case SpellSlot.W:

                if (state == TransformStates.Mini || state == TransformStates.Automatic && Player.Instance.IsMiniGnar())
                {
                    // Every 3rd attack or spell on the same target deals an additional 10/20/30/40/50 (+1) + 6/8/10/12/14% of the target's max Health as magic damage
                    // and grants Gnar undefined% Movement Speed that decays over 3 seconds (max 100/150/200/250/300 damage vs. monsters).
                    var buff = target.Buffs.FirstOrDefault(b => b.IsActive && Game.Time < b.EndTime && b.DisplayName == "GnarWProc" && b.Caster.NetworkId == Player.Instance.NetworkId);
                    if (buff != null && buff.Count == 2)
                    {
                        damageType = DamageType.Magical;
                        damage     = new[] { 10, 20, 30, 40, 50 }[spellLevel] +Player.Instance.TotalMagicalDamage + new[] { 0.06f, 0.08f, 0.1f, 0.12f, 0.14f }[spellLevel] *target.MaxHealth;

                        // Special case for minions
                        if (target is Obj_AI_Minion)
                        {
                            var maxDamage = new[] { 100, 150, 200, 250, 300 }[spellLevel];
                            if (Player.Instance.CalculateDamageOnUnit(target, damageType, damage) > maxDamage)
                            {
                                damageType = DamageType.True;
                                damage     = maxDamage;
                            }
                        }
                    }
                }
                else if (state == TransformStates.Mega || state == TransformStates.Automatic && Player.Instance.IsMegaGnar())
                {
                    // Stuns enemies in an area for 1.25 seconds, dealing 25/45/65/85/105 (+1) physical damage.
                    damage = new[] { 25, 45, 65, 85, 105 }[spellLevel] +(Player.Instance.BaseAttackDamage + Player.Instance.FlatPhysicalDamageMod);
                }

                break;

            case SpellSlot.E:

                if (state == TransformStates.Mini || state == TransformStates.Automatic && Player.Instance.IsMiniGnar())
                {
                    // Leaps to a location, gaining 20/30/40/50/60% Attack Speed for 3 seconds. If Gnar lands on a unit he will bounce off it, traveling further.
                    // Deals 20/60/100/140/180 (+undefined) [6% of Gnar's Max Health] physical damage and slows briefly if the unit landed on was an enemy.
                    damage = new[] { 20, 60, 100, 140, 180 }[spellLevel] +0.06f * Player.Instance.MaxHealth;
                }
                else if (state == TransformStates.Mega || state == TransformStates.Automatic && Player.Instance.IsMegaGnar())
                {
                    // Leaps to a location and deals 20/60/100/140/180 (+undefined) [6% of Gnar's Max Health] physical damage to all nearby enemies on landing.
                    // Enemies Gnar lands directly on top of are slowed briefly.
                    damage = new[] { 20, 60, 100, 140, 180 }[spellLevel] +0.06f * Player.Instance.MaxHealth;
                }

                break;

            case SpellSlot.R:

                if (state == TransformStates.Mega || state == TransformStates.Automatic && Player.Instance.IsMegaGnar())
                {
                    // Knocks all nearby enemies in the specified direction, dealing 200/300/400 (+0.2) (+0.5) physical damage and slowing them by 45% for 1.25/1.5/1.75 seconds.
                    // Any enemy that hits a wall takes 150% damage and is stunned instead of slowed.
                    damage      = new[] { 200, 300, 400 }[spellLevel] +0.2f * Player.Instance.TotalAttackDamage;
                    extraDamage = Player.Instance.CalculateDamageOnUnit(target, DamageType.Magical, Player.Instance.BaseAbilityDamage + Player.Instance.FlatMagicDamageMod);
                }

                break;
            }

            // No damage set
            if (damage <= 0 && extraDamage <= 0)
            {
                return(0);
            }

            // Calculate damage on target and return (-20 to make it actually more accurate Kappa)
            return(Player.Instance.CalculateDamageOnUnit(target, damageType, damage) + extraDamage - 20);
        }
Esempio n. 5
0
 protected override void Reinit(int index)
 {
     TransformStates.Add(new TransformState(IdIn[index], new Vector2D()));
 }
Esempio n. 6
0
 public void Enter()
 {
     _currentState = TransformStates.NotMoving;
 }