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)); }
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(); } }
// 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)); }
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)); } }
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); }
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)); } }