Пример #1
0
        public Timbersaw(Unit9 owner, MultiSleeper abilitySleeper, Sleeper orbwalkSleeper, ControllableUnitMenu menu)
            : base(owner, abilitySleeper, orbwalkSleeper, menu)
        {
            this.ComboAbilities = new Dictionary <AbilityId, Func <ActiveAbility, UsableAbility> >
            {
                {
                    AbilityId.shredder_chakram, x =>
                    {
                        var chakram = new Chakram(x);
                        this.chakrams.Add(chakram);
                        return(chakram);
                    }
                },
                {
                    AbilityId.shredder_chakram_2, x =>
                    {
                        var chakram = new Chakram(x);
                        this.chakrams.Add(chakram);
                        return(chakram);
                    }
                },
                { AbilityId.shredder_whirling_death, x => this.whirlingDeath = new NukeAbility(x) },
                { AbilityId.shredder_timber_chain, x => this.timberChain = new TimberChain(x) },

                { AbilityId.item_blink, x => this.blink = new BlinkDaggerTimbersaw(x) },
                { AbilityId.item_shivas_guard, x => this.shiva = new DebuffAbility(x) },
                { AbilityId.item_sheepstick, x => this.hex = new DisableAbility(x) },
                { AbilityId.item_blade_mail, x => this.bladeMail = new ShieldAbility(x) },
            };

            this.MoveComboAbilities.Add(AbilityId.shredder_timber_chain, x => this.timberChainBlink = new TimberChainBlink(x));
        }
Пример #2
0
    void Attack()
    {
        switch (weapon)
        {
        case PlayerEquipment.Weapon.Sword:
            state = PlayerState.Attacking;
            animator.SetTrigger("Attack");
            GameManager.managerInstance.audioManager.PlaySwordSound();
            break;

        case PlayerEquipment.Weapon.Chakram:
            if (_chakramInstance == null)
            {
                _chakramInstance           = Instantiate(chakramPrefab, transform.position, transform.rotation);
                _chakramInstance.owner     = gameObject;
                _chakramInstance.direction = _direction;
                GameManager.managerInstance.audioManager.PlayProjectileSound();
            }
            break;

        case PlayerEquipment.Weapon.Bomb:
            if (_bombInstance == null)
            {
                _bombInstance = Instantiate(bombPrefab, transform.position, transform.rotation);
                _bombInstance.GetComponent <Rigidbody2D>().velocity = _direction * 20;
            }
            break;

        default:
            throw new InvalidOperationException();
        }
    }
Пример #3
0
        // Token: 0x06000274 RID: 628 RVA: 0x000104E4 File Offset: 0x0000E6E4
        public override bool Combo(TargetManager targetManager, ComboModeMenu comboModeMenu)
        {
            int     damagingChakrams = this.chakrams.Count((Chakram x) => comboModeMenu.IsAbilityEnabled(x.Ability) && x.IsDamaging(targetManager));
            Chakram chakram          = this.chakrams.Find((Chakram x) => comboModeMenu.IsAbilityEnabled(x.Ability) && x.ShouldReturnChakram(targetManager, damagingChakrams));

            if (chakram != null && chakram.Return())
            {
                return(true);
            }
            AbilityHelper abilityHelper = new AbilityHelper(targetManager, comboModeMenu, this);

            if (abilityHelper.UseAbility(this.whirlingDeath, true))
            {
                return(true);
            }
            if (abilityHelper.UseAbility(this.hex, true))
            {
                return(true);
            }
            if (abilityHelper.UseAbilityIfCondition(this.blink, new UsableAbility[]
            {
                this.timberChain,
                this.whirlingDeath
            }))
            {
                if (abilityHelper.CanBeCasted(this.whirlingDeath, false, false, true, true))
                {
                    abilityHelper.ForceUseAbility(this.whirlingDeath, true, true);
                }
                return(true);
            }
            if (abilityHelper.UseAbility(this.shiva, true))
            {
                return(true);
            }
            if (abilityHelper.UseAbility(this.bladeMail, 400f))
            {
                return(true);
            }
            if (abilityHelper.UseAbilityIfCondition(this.timberChain, new UsableAbility[]
            {
                this.blink
            }))
            {
                return(true);
            }
            Chakram ability = this.chakrams.Find((Chakram x) => x.Ability.CanBeCasted(true));

            return(abilityHelper.UseAbility(ability, true));
        }
Пример #4
0
        public void SetUnavailableTrees(Vector3 start, Vector3 end, Chakram chakram)
        {
            var precision = chakram.Radius;
            var count     = (int)Math.Ceiling(start.Distance2D(end) / precision);

            var ping = Game.Ping / 1000;
            var time = Game.RawGameTime;

            for (var i = 1; i <= count; i++)
            {
                var position = i == count ? end : start.Extend(end, precision * i);

                unavailableTrees.Add(
                    Tuple.Create(
                        position,
                        chakram.Radius,
                        chakram.CastPoint + ping + start.Distance2D(position) / chakram.Speed + time));
            }
        }
Пример #5
0
        public void OnLoad()
        {
            hero        = ObjectManager.LocalHero;
            menuManager = new MenuManager(hero.Name);
            treeFactory = new TreeFactory();
            orbwalker   = new Orbwalker(hero);

            TimberPrediction.OnLoad();

            whirlingDeath = new WhirlingDeath(hero.Spellbook.SpellQ);
            timberChain   = new TimberChain(hero.Spellbook.SpellW);
            chakram       = new Chakram(
                hero.Spellbook.Spells.First(x => x.Name == "shredder_chakram"),
                hero.Spellbook.Spells.First(x => x.Name == "shredder_return_chakram"));
            chakram2 = new Chakram(
                hero.Spellbook.Spells.First(x => x.Name == "shredder_chakram_2"),
                hero.Spellbook.Spells.First(x => x.Name == "shredder_return_chakram_2"));

            chakrams.Add(chakram);
            //chakrams.Add(chakram2);
        }
Пример #6
0
        public void SetUnavailableTrees(Vector3 start, Vector3 end, Chakram chakram)
        {
            var precision = chakram.Radius;
            var count = (int)Math.Ceiling(start.Distance2D(end) / precision);

            var ping = Game.Ping / 1000;
            var time = Game.RawGameTime;

            for (var i = 1; i <= count; i++)
            {
                var position = i == count ? end : start.Extend(end, precision * i);

                unavailableTrees.Add(
                    Tuple.Create(
                        position,
                        chakram.Radius,
                        chakram.CastPoint + ping + start.Distance2D(position) / chakram.Speed + time));
            }
        }