Inheritance: PooledObject
Beispiel #1
0
    public void PlantMine()
    {
        GameObject mine = Instantiate(mLandMinePrefab, transform.position, Quaternion.identity) as GameObject;

        mLandMine        = mine.GetComponent <LandMine>();
        mLandMinePlanted = true;
    }
Beispiel #2
0
        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);
        }
Beispiel #3
0
    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);
    }
Beispiel #5
0
        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);
                }
            });
        }
Beispiel #6
0
 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);
 }