public void PlantMine() { GameObject mine = Instantiate(mLandMinePrefab, transform.position, Quaternion.identity) as GameObject; mLandMine = mine.GetComponent <LandMine>(); mLandMinePlanted = true; }
public override Mine CreateMine(MinePower power) { Mine mineToReturn = null; if (this.createdMines.ContainsKey(power)) { mineToReturn = this.createdMines[power]; } else { switch (power) { case MinePower.One: mineToReturn = new LimpetMine(); break; case MinePower.Two: mineToReturn = new LandMine(); break; case MinePower.Three: mineToReturn = new NavelMine(); break; case MinePower.Four: mineToReturn = new NuclearMine(); break; case MinePower.Five: mineToReturn = new FatherBomb(); break; default: throw new ArgumentException(string.Format("Mine with power: {0}, does not exists YET!", power)); } this.createdMines.Add(power, mineToReturn); } return(mineToReturn); }
public override void Activate() { if (!this.OnCooldown()) { this.lastUseTime = Time.time; if (this.type == Ability.Type.CONSUMABLE) { --this.chargesRemaining; } GameObject spawnedProjectile = (GameObject)GameObject.Instantiate(landMinePrefab, (this.transform.position + (-this.transform.forward * 2)), landMinePrefab.transform.rotation); LandMine landMine = spawnedProjectile.GetComponent <LandMine>(); landMine.Init(this); //hard coded garbage switch (this.player.team.teamNumber) { case 1: landMine.gameObject.layer = 11; break; case 2: landMine.gameObject.layer = 12; break; default: break; } } }
public override void Action(int dirx, int diry) { Vector2 position = new Vector2(parent.transform.position.x, parent.transform.position.y); LandMine mine = Instantiate(AttackPrefab, position, Quaternion.identity).GetComponent <LandMine>(); mine.parent = parent; mine.transform.SetParent(transform); }
public BombManager(Updater updater) { _updater = updater; FullBombList = new List <BombBase>(); RemoteMines = new List <RemoteMine>(); StasisTraps = new List <StasisTrap>(); LandMines = new List <LandMine>(); var dict = new Dictionary <AbilityId, bool> { { AbilityId.techies_remote_mines, true }, { AbilityId.techies_stasis_trap, true }, { AbilityId.techies_land_mines, true } }; AbilityRangeToggle = updater._main.MenuManager.RangeMenu.CreateAbilityToggler("Show range", dict); //TODO: проверить че за хуйня // var lastDict = AbilityRangeToggle.Values.ToDictionary(x => x.Key, z => z.Value); // AbilityRangeToggle.ValueChanged += (sender) => // { // foreach (var d in dict) // { // foreach (var f in lastDict) // { // if (f.Key != d.Key) continue; // if (f.Value == d.Value) continue; // foreach (var bombBase in FullBombList) // { // var bombName = bombBase.Owner.Name.Replace("npc_dota_", ""); // var searchName = d.Key.Replace("_mines", "_mine"); // if (bombName == searchName) // { // bombBase.ChangeDrawType(d.Value, // bombBase is RemoteMine ? Color.Red : Color.White); // } // } // } // } // // // lastDict = AbilityRangeToggle.Value.Dictionary.ToDictionary(x => x.Key, z => z.Value); // }; foreach (var unit in EntityManager.GetEntities <Unit>()) { var bomb = FullBombList.Find(x => x.Owner.Handle == unit.Handle); if (bomb == null) { var name = unit.Name; BombBase bombBase = null; switch (name) { case "npc_dota_techies_land_mine": bombBase = new LandMine(unit).SetDamage(_updater._main.LandMine.GetDamage()); AddNewBombToSystem(bombBase, BombEnums.BombTypes.LandMine); break; case "npc_dota_techies_stasis_trap": bombBase = new StasisTrap(unit, new CantDetonate()); AddNewBombToSystem(bombBase, BombEnums.BombTypes.StasisTrap); break; case "npc_dota_techies_remote_mine": bombBase = new RemoteMine(unit).UpdateStacker(RemoteMines) .SetDamage(_updater._main.RemoteMine.GetDamage(), true); AddNewBombToSystem(bombBase, BombEnums.BombTypes.RemoveMine); break; } if (bombBase != null) { bombBase.IsActive = true; bombBase.ChangeDrawType(true && IsDrawEnabledForBombType(bombBase), bombBase is RemoteMine ? Color.Red : Color.White); } } } EntityManager.EntityAdded += (sender) => { if (sender.IsCollection) { return; } UpdateManager.BeginInvoke(0, () => { var unit = sender.Entity as Unit; if (unit == null) { return; } var name = unit.Name; switch (name) { case "npc_dota_techies_land_mine": AddNewBombToSystem(new LandMine(unit).SetDamage(_updater._main.LandMine.GetDamage()), BombEnums.BombTypes.LandMine); break; case "npc_dota_techies_stasis_trap": AddNewBombToSystem(new StasisTrap(unit, new CantDetonate()), BombEnums.BombTypes.StasisTrap); break; case "npc_dota_techies_remote_mine": var bomb = new RemoteMine(unit).UpdateStacker(RemoteMines) .SetDamage(_updater._main.RemoteMine.GetDamage(), true); AddNewBombToSystem(bomb, BombEnums.BombTypes.RemoveMine); (bomb as RemoteMine)?.DrawSpawnRange(); break; } }); }; EntityManager.EntityRemoved += (sender) => { var unit = sender.Entity as Unit; if (unit == null) { return; } var name = unit.Name; var bomb = FullBombList.Find(x => x.Owner.Handle == unit.Handle); if (bomb != null) { RemoveBombFromSystem(bomb); } }; Entity.NetworkPropertyChanged += (unit, args) => { var propertyName = args.PropertyName; if (!propertyName.Equals("m_iHealth") && !propertyName.Equals("m_NetworkActivity") && !propertyName.Equals("m_iTaggedAsVisibleByTeam")) { return; } UpdateManager.BeginInvoke(() => { var bomb = FullBombList.Find(x => x.Owner.Handle == unit.Handle); if (bomb == null) { return; } if (propertyName == "m_iHealth") { if (args.NewValue.GetInt32() <= 0) { RemoveBombFromSystem(bomb); } if (args.NewValue.GetInt32() <= 150) { (bomb as RemoteMine)?.Owner.Spellbook.Spell1.Cast(); } } else if (propertyName == "m_NetworkActivity") { // Console.WriteLine(args.NewValue.GetInt32()); bomb.IsActive = args.NewValue.GetInt32() == (int)BombEnums.SpawnStatus.IsActive; if (bomb.IsActive) { (bomb as RemoteMine)?.DisposeSpawnRange(); var isVisible = bomb.Owner.IsVisibleToEnemies; bomb.ChangeDrawType(IsDrawEnabledForBombType(bomb), isVisible ? Color.Red : Color.White); if (bomb is LandMine mine) { if (isVisible) { mine.StartTimer(); } } } else { bomb.ChangeDrawType(true && IsDrawEnabledForBombType(bomb), Color.Gray); } } if (bomb is RemoteMine) { if (propertyName == "m_iTaggedAsVisibleByTeam") { var isVisible = (args.NewValue.GetInt32() & 15) == 14; bomb.ChangeDrawType(true, isVisible ? Color.Red : Color.White); } } else if (bomb is LandMine land) { if (propertyName == "m_iTaggedAsVisibleByTeam") { //UpdateManager.BeginInvoke(() => //{ land.BombStatus = (BombEnums.BombStatus)args.NewValue.GetInt32(); var willDetonate = land.BombStatus == BombEnums.BombStatus.WillDetonate; bomb.ChangeDrawType(true && IsDrawEnabledForBombType(bomb), willDetonate ? Color.Red : Color.White); if (willDetonate) { land.StartTimer(); } else { land.StopTimer(); } //}, 25); } } }); }; UpdateManager.BeginInvoke(5000, async() => { while (true) { try { if (Me.GetAbilityById(AbilityId.special_bonus_unique_techies_4).Level > 0) { var list = RemoteMines.ToList(); var tempList = new List <RemoteMine>(); foreach (var remoteMine in list) { remoteMine.Stacker.Counter = 0; } foreach (var remoteMine in list) { remoteMine.UpdateStacker(tempList); tempList.Add(remoteMine); } } } catch (Exception e) { Console.WriteLine(e); } await Task.Delay(1000); } }); }
private void Start() { lm = transform.parent.GetComponent <LandMine>(); }
/// <summary> /// Adds the land mine. /// </summary> /// <param name="mine">The mine.</param> public static void AddLandMine(LandMine mine) { //adds the given land mine landmines.Add(mine); }