Example #1
0
File: Tower.cs Project: JakBlack/TD
    public void Setup(TowerItem config)
    {
        if (currentItem != null)
        {
            if (currentItem.type == 6)
            {
            }
        }
        foreach (Enemy enemy in targets)
        {
            enemy.UnSlow(currentItem.speedMultiplier);
        }


        currentItem = config;
        GetComponent <SpriteRenderer>().sprite = config.baseSprite;
        GetComponent <SphereCollider>().radius = config.range * 2;
        radiusObect.localScale = new Vector3(config.range, config.range, 1);
        gun.sprite             = config.gunSprite;

        if (fireIsRunning)
        {
            StopCoroutine(Fire());
            StartCoroutine(Fire());
        }

        if (currentItem.type == 6 && targets.Count > 0)
        {
            foreach (Enemy enemy in targets)
            {
                enemy.Slow(currentItem.speedMultiplier);
            }
        }
    }
Example #2
0
    public void PlaceTurret(TowerItem item)
    {
        GameObject newTower = GameLogic.Instance.towerPool.GetObject(transform, true);

        towerHolder = newTower.GetComponent <Tower>();
        towerHolder.Setup(item);
        rendererComponent.color   = defaultColor;
        obstacleComponent.enabled = true;
        empty = false;
        newTower.transform.localPosition = new Vector3(2, -2, 0);
        walkable = false;

        foreach (Enemy e in headingHere)
        {
            e.StopMoving();
        }

        MyGrid.Instance.DoHeatMap();

        foreach (Enemy e in headingHere)
        {
            e.StartMoving(Vector3.zero);
        }

        headingHere.Clear();
    }
Example #3
0
    private void MovePreview(TowerItem towerItem)
    {
        Ray       ray             = Camera.main.ScreenPointToRay(new Vector3(Screen.width / 2f, Screen.height / 2f, 0f));
        LayerMask tmpIgnoreLayers = ~towerItem.GetLayerMask();

        RaycastHit hitInfo;

        if (Physics.Raycast(ray, out hitInfo, 20f, tmpIgnoreLayers))
        {
            if (hitInfo.collider.gameObject.layer == LayerMask.NameToLayer("Ground") && Vector3.Dot(hitInfo.normal, Vector3.up) > 0.9)
            {
                GameObject  prefab       = towerItem.GetPlaceableItemPrefab();
                BoxCollider box          = prefab.GetComponent <BoxCollider>();
                int         boxlayerMask = ~LayerMask.GetMask("AreaEffect", "Projectile", "Item", "Ground");
                Collider[]  boxHit       = Physics.OverlapBox(hitInfo.point + box.center, box.size / 2, Quaternion.identity, boxlayerMask, QueryTriggerInteraction.Ignore);
                if (boxHit.Length == 0)
                {
                    previewItem.SetActive(true);
                    previewItem.transform.position = hitInfo.point;
                    previewItem.transform.rotation = Quaternion.FromToRotation(Vector3.up, hitInfo.normal);
                    return;
                }
            }
        }
        previewItem.SetActive(false);
    }
    public void jumpToMissionFromHide()
    {
        TowerItem jumtoItem = null;

        for (int i = 0; i < itemList.Count; i++)
        {
            if (itemList[i].mission.sid == FuBenManagerment.Instance.getPassChapter())
            {
                if (i == 0)
                {
                    jumtoItem = itemList[0];
                }
                else
                {
                    jumtoItem = itemList[i - 1];
                }
            }
        }
        if (jumtoItem == null && lastItem == null)
        {
            missionsParentPos.GetComponent <UICenterOnChild> ().CenterOn(itemList [itemList.Count - 1].transform);
        }
        else if (jumtoItem == null && lastItem != null)
        {
            missionsParentPos.GetComponent <UICenterOnChild> ().CenterOn(lastItem.transform);
        }
        else
        {
            missionsParentPos.GetComponent <UICenterOnChild> ().CenterOn(jumtoItem.transform);
        }
        setBgIsCanMove(true);
    }
Example #5
0
File: Tower.cs Project: JakBlack/TD
    public void Sell()
    {
        if (targets.Count > 0)
        {
            if (currentItem.type == 6)
            {
                foreach (Enemy enemy in targets)
                {
                    enemy.UnSlow(currentItem.speedMultiplier);
                }

                targets.Clear();
            }
            else
            {
                StopAllCoroutines();
                fireIsRunning = false;
                facesEnemy    = false;
                currentTarget = null;
                targets.Clear();
                partSys.Stop();
            }
        }

        currentItem = null;
    }
Example #6
0
    public void Upgrade(TowerButton button)
    {
        TowerItem chosenUpgrade = button.tower;

        GameLogic.Instance.ChangePoints(-chosenUpgrade.priceToBuy);
        currentTile.towerHolder.Setup(chosenUpgrade);
        CloseTowerOptions();
    }
Example #7
0
    protected override void Start()
    {
        base.Start();

        if (item == null) {
            item = new TowerItem(Random.Range(0, BaseTower.TOWER_COMPLETE), Random.Range(3, 10));
        }
    }
Example #8
0
        private static int BalancingTheWeight(TowerItem towerItem)
        {
            var unbalancedItem = towerItem.Children.GroupBy(x => x.PrevWeight + x.Weight).Select(g => new { Weight = g.Key, Count = g.Count() }).FirstOrDefault(x => x.Count == 1);
            var unbalanced     = towerItem.Children.Single(x => unbalancedItem != null && x.Weight + x.PrevWeight == unbalancedItem.Weight);

            var correctedWeight = towerItem.Children[0] == unbalanced
                ? towerItem.Children[1].Weight + towerItem.Children[1].PrevWeight
                : towerItem.Children[0].Weight + towerItem.Children[0].PrevWeight;

            return(correctedWeight - unbalanced.PrevWeight);
        }
Example #9
0
        private static int AssignDescWeights(TowerItem towerItem)
        {
            if (towerItem.Children == null)
            {
                towerItem.PrevWeight = 0;
                return(towerItem.Weight);
            }

            towerItem.PrevWeight = towerItem.Children.Sum(AssignDescWeights);
            return(towerItem.PrevWeight + towerItem.Weight);
        }
Example #10
0
 private void OnTriggerEnter(Collider other)
 {
     if (other.gameObject.CompareTag("Tower") && dropItem.toDrop == null)
     {
         Pickable tower = other.gameObject.GetComponent <Pickable>();
         //DropItem dropItem = this.gameObject.GetComponent<DropItem>();
         TowerItem t = (TowerItem)tower.getItemObject();
         dropItem.toDrop = t.GetPlaceableItemPrefab();
         //Inventory inventory = this.gameObject.GetComponent<Inventory>();
         tower.Interact(this.gameObject);
         this.gameObject.GetComponent <SphereCollider>().enabled = false;
     }
 }
Example #11
0
        private static TowerItem GetChild(string name, ICollection <TowerItem> towerItems)
        {
            var towerItem = towerItems.SingleOrDefault(x => x.Name == name);

            if (towerItem != null)
            {
                return(towerItem);
            }
            towerItem = new TowerItem {
                Name = name, Children = new List <TowerItem>()
            };
            towerItems.Add(towerItem);
            return(towerItem);
        }
Example #12
0
 void Update()
 {
     if (inventory[0] != null)
     {
         TowerItem towerItem = (TowerItem)inventory[0].item;
         if (!isShowingPreview)
         {
             SpawnPreview(towerItem);
         }
         else
         {
             MovePreview(towerItem);
         }
     }
 }
Example #13
0
        private static void CreateRelationships(string input, TowerItem towerItem, ICollection <TowerItem> towerItems)
        {
            var childNames = GetNames(input);

            if (childNames == null)
            {
                return;
            }
            foreach (var childName in childNames)
            {
                var childItem = GetChild(childName, towerItems);
                towerItem.Children.Add(childItem);
                childItem.Parent = towerItem;
            }
        }
Example #14
0
    private void SetupUpgrades(TowerItem first, TowerItem second, TowerItem third)
    {
        TowerItem[] tempUpArray = { first, second, third };

        for (int i = 0; i < 3; i++)
        {
            TowerButton currButton = upgradeButtons[i];
            if (tempUpArray[i] == null)
            {
                currButton.gameObject.SetActive(false);
            }
            else
            {
                currButton.gameObject.SetActive(true);
                currButton.tower = tempUpArray[i];
                currButton.Setup();
            }
        }
    }
Example #15
0
    public void ShowTowerSellPanel()
    {
        if (!isOpen)
        {
            OpenPanel();

            int startAngle = 90;



            GameObject item      = Instantiate(towerItemPrefab, towerItemHolder);
            TowerItem  towerItem = item.GetComponent <TowerItem>();
            towerItem.buildPriceText.text = ((int)(mTowerSO.buildPrice * gameValuesManager.sellCoefficient)).ToString();
            towerItem.towerImage.sprite   = sellBtnSprite;
            towerItem.buildButton.onClick.AddListener(() => SellTower());
            panelItems.Add(item);


            PlaceItems(panelItems, startAngle);
        }
    }
Example #16
0
    public void ShowTowerBuildPanel()
    {
        if (!isOpen)
        {
            OpenPanel();
            isBuilding = true;


            int towerCount = gameValuesManager.towersSOHolder.Objects.Count;
            int startAngle = -90;


            for (int i = 0; i < towerCount; i++)
            {
                GameObject item = Instantiate(towerItemPrefab, towerItemHolder);
                item.SetActive(false);

                TowerItem towerItem = item.GetComponent <TowerItem>();
                TowerSO   towerSO   = gameValuesManager.towersSOHolder.Objects[i];

                towerItem.towerImage.sprite   = towerSO.towerSprite;
                towerItem.buildPriceText.text = towerSO.buildPrice.ToString();

                if (PlayerStats.Coins < towerSO.buildPrice)
                {
                    towerItem.buildButton.interactable = false;
                }

                int foo = i;

                towerItem.buildButton.onClick.AddListener(() => BuildTower(foo));
                panelItems.Add(item);

                item.SetActive(true);
            }

            PlaceItems(panelItems, startAngle);
        }
    }
Example #17
0
        private static int FindUnbalancedNodeCorrectWeight(TowerItem towerItem)
        {
            if (towerItem.Children == null)
            {
                return(-1);
            }

            foreach (var child in towerItem.Children)
            {
                var childResult = FindUnbalancedNodeCorrectWeight(child);
                if (childResult != -1)
                {
                    return(childResult);
                }
            }

            if (towerItem.Children.Select(childItem => childItem.PrevWeight + childItem.Weight).Distinct().Count() > 1)
            {
                return(BalancingTheWeight(towerItem));
            }

            return(-1);
        }
Example #18
0
        private static List<Room> GenerateFloorRooms(ulong floorLevel)
        {
            var minRooms = 25 + (int) floorLevel / 20;
            var maxRooms = 35 + (int) floorLevel / 10;
            if (minRooms < 25 || minRooms > 100) minRooms = 100;
            if (maxRooms < 35 || maxRooms > 200) maxRooms = 200;
            var roomsCount = Services.Fun.GetRandomValue(minRooms, maxRooms);

            // create unique item for hidden room
            var item = new TowerItem
            {
                Level = floorLevel,
                Rarity = ItemRairty.Legendary,
                UseType = ItemUseType.Wearable,
                Type = Database.Models.Tower.ItemType.Ring,
                Name = $"Pierścień szczęścia #{floorLevel}",
                Effect = new Effect
                {
                    Duration = 0,
                    Level = floorLevel,
                    Target = EffectTarget.Luck,
                    Change = ChangeType.ChangeNow,
                    Value = 10 + (int) floorLevel,
                    ValueType = Database.Models.Tower.ValueType.Normal,
                    Name = $"Blask pierścienia szczęścia #{floorLevel}",
                }
            };

            // create list with predefined special rooms
            // index 0: start room
            // index 1: boss room
            // index 2: hidden room
            var rooms = new List<Room>()
            {
                new Room
                {
                    Count = 0,
                    Item = null,
                    IsHidden = false,
                    Type = RoomType.Start,
                    ItemType = ItemInRoomType.None,
                    ConnectedRooms = new List<RoomConnection>(),
                    RetConnectedRooms = new List<RoomConnection>()
                },
                new Room
                {
                    Item = null,
                    IsHidden = false,
                    Type = RoomType.BossBattle,
                    ItemType = ItemInRoomType.None,
                    ConnectedRooms = new List<RoomConnection>(),
                    RetConnectedRooms = new List<RoomConnection>(),
                    Count = floorLevel > 100 ? Services.Fun.GetRandomValue(0, 4): 0,
                },
                new Room
                {
                    Count = 5,
                    Item = item,
                    IsHidden = true,
                    Type = RoomType.Treasure,
                    ItemType = ItemInRoomType.ToOpen,
                    ConnectedRooms = new List<RoomConnection>(),
                    RetConnectedRooms = new List<RoomConnection>()
                }
            };

            var randRooms = new List<Room>();
            var campfires = roomsCount / 15;
            for (int i = 0; i < campfires; i++)
            {
                randRooms.Add(new Room
                {
                    Count = 0,
                    Item = null,
                    IsHidden = false,
                    Type = RoomType.Campfire,
                    ItemType = ItemInRoomType.None,
                    ConnectedRooms = new List<RoomConnection>(),
                    RetConnectedRooms = new List<RoomConnection>()
                });
            }

            var treasures = roomsCount / 20;
            for (int i = 0; i < treasures; i++)
            {
                randRooms.Add(new Room
                {
                    Item = null,
                    IsHidden = false,
                    Type = RoomType.Treasure,
                    ItemType = ItemInRoomType.None,
                    Count = Services.Fun.GetRandomValue(1, 3),
                    ConnectedRooms = new List<RoomConnection>(),
                    RetConnectedRooms = new List<RoomConnection>()
                });
            }

            var events = roomsCount / 30;
            for (int i = 0; i < events; i++)
            {
                randRooms.Add(new Room
                {
                    Count = 0,
                    Item = null,
                    IsHidden = false,
                    Type = RoomType.Event,
                    ItemType = ItemInRoomType.None,
                    ConnectedRooms = new List<RoomConnection>(),
                    RetConnectedRooms = new List<RoomConnection>()
                });
            }

            var leftRooms = roomsCount - 3 - campfires - treasures - events;
            for (int i = 0; i < leftRooms; i++)
            {
                if (Services.Fun.TakeATry(2))
                {
                    randRooms.Add(new Room
                    {
                        Count = 0,
                        Item = null,
                        IsHidden = false,
                        Type = RoomType.Empty,
                        ItemType = ItemInRoomType.None,
                        ConnectedRooms = new List<RoomConnection>(),
                        RetConnectedRooms = new List<RoomConnection>()
                    });
                }
                else
                {
                    randRooms.Add(new Room
                    {
                        Item = null,
                        IsHidden = false,
                        Type = RoomType.Fight,
                        ItemType = ItemInRoomType.None,
                        Count = Services.Fun.GetRandomValue(1, 5),
                        ConnectedRooms = new List<RoomConnection>(),
                        RetConnectedRooms = new List<RoomConnection>()
                    });
                }
            }

            // generate maze
            randRooms.Shuffle();
            var nextRooms = new List<Room>() { rooms[0] };

            do
            {
                var futureRooms = new List<Room>();
                for (int j = nextRooms.Count; j > 0; j--)
                {
                    var startRoom = nextRooms[j - 1];
                    nextRooms.Remove(startRoom);

                    var connectionsCnt = Services.Fun.GetRandomValue(1, 4);
                    if (nextRooms.Count == 0 || !Services.Fun.TakeATry(5))
                    {
                        for (int i = 0; i < connectionsCnt; i++)
                        {
                            if (randRooms.Count > 0)
                            {
                                var rN = Services.Fun.GetOneRandomFrom(randRooms);
                                randRooms.Remove(rN);
                                futureRooms.Add(rN);
                                rooms.Add(rN);

                                startRoom.ConnectedRooms.Add(new RoomConnection { ConnectedRoom = rN });
                                rN.ConnectedRooms.Add(new RoomConnection { ConnectedRoom = startRoom });
                            }
                        }
                    }
                }

                nextRooms.AddRange(futureRooms);
                futureRooms.Clear();

            } while (randRooms.Count > 0);

            // connect special rooms
            var randRoom = Services.Fun.GetOneRandomFrom(rooms);
            rooms[2].ConnectedRooms.Add(new RoomConnection { ConnectedRoom = randRoom });
            randRoom.ConnectedRooms.Add(new RoomConnection { ConnectedRoom = rooms[2] });

            var lastRoom = rooms.Last();
            rooms[1].ConnectedRooms.Add(new RoomConnection { ConnectedRoom = lastRoom });
            lastRoom.ConnectedRooms.Add(new RoomConnection { ConnectedRoom = rooms[1] });

            return rooms;
        }
Example #19
0
    private void SetupButtons(TowerItem item)
    {
        switch (item.upgradeLevel)
        {
        case 0:
            switch (item.type)
            {
            case 0:
                SetupUpgrades(upgradesList[0], upgradesList[1], upgradesList[2]);
                break;

            case 6:
                SetupUpgrades(upgradesList[3], null, null);
                break;

            case 3:
                SetupUpgrades(upgradesList[6], upgradesList[7], upgradesList[8]);
                break;

            default:
                Debug.Log("Not yet implemented");
                SetupUpgrades(null, null, null);
                break;
            }
            break;

        case 1:
            switch (item.type)
            {
            case 6:
                SetupUpgrades(upgradesList[4], null, null);
                break;

            case 0:
                SetupUpgrades(upgradesList[5], null, null);
                break;

            case 3:
                SetupUpgrades(upgradesList[9], null, null);
                break;

            case 4:
                SetupUpgrades(upgradesList[10], null, null);
                break;

            case 1:
                SetupUpgrades(upgradesList[11], null, null);
                break;

            case 2:
                SetupUpgrades(upgradesList[12], null, null);
                break;

            case 5:
                SetupUpgrades(upgradesList[13], null, null);
                break;

            default:
                Debug.Log("Not yet implemented");
                SetupUpgrades(null, null, null);
                break;
            }
            break;

        default:
            SetupUpgrades(null, null, null);
            break;
        }

        CheckUpgradePrice();
    }
Example #20
0
 private void SetInventoryOpen(bool setted)
 {
     if (!setted) {
         Pickup(toClone);
         foreach (Item i in craftingRecipe) {
             Pickup(i);
         }
         toClone = null;
         craftingRecipe = new CraftableItem[NUM_CRAFTABLES];
         UpdateInventory();
     }
 }
Example #21
0
 private void SpawnPreview(TowerItem towerItem)
 {
     previewItem = (GameObject)Instantiate((towerItem.GetPlaceablePreviewItemPrefab()));
     previewItem.SetActive(false);
     isShowingPreview = true;
 }
Example #22
0
    protected Item[][] GenerateItemDropArray(int numMobs, int waveNumber)
    {
        int[] droppables = new int[4];
        droppables[0] = Random.Range(BASESDROP_MIN, BASESDROP_MAX + 1);
        droppables[1] = Random.Range(TURRETDROP_MIN, TURRETDROP_MAX + 1);
        droppables[2] = Random.Range(WEAPONDROP_MIN, WEAPONDROP_MAX + 1);
        droppables[3] = Random.Range(CRAFTDROP_MIN, CRAFTDROP_MAX + 1);
        Debug.Log("Drops: " + droppables[0] + "/" + droppables[1] + "/" + droppables[2] + "/" + droppables[3]);
        Item[][] drops = new Item[numMobs][];

        float itemLevel = waveNumber * LEVELCONST_MULT + WaveController.WAVESTART_PERMOB_COST;

        int mobNumber;	// Which mob is going to drop the item
        for (int dropCounter = 0; dropCounter < droppables.Length; dropCounter++) {
            for (int i = 0; i < droppables[dropCounter]; i++) {
                Item toDrop = null;
                switch (dropCounter) {
                    case BASEDROP:
                        toDrop = new TowerItem(BaseTower.TOWER_BASE, itemLevel);
                        break;
                    case TURRETDROP:
                        toDrop = new TowerItem(BaseTower.TOWER_TURRET, itemLevel);
                        break;
                    case WEAPONDROP:
                        toDrop = WeaponItem.RandomItem(itemLevel);
                        break;
                    case CRAFTDROP:
                        toDrop = new CraftableItem(itemLevel);
                        break;
                }

                mobNumber = Random.Range(0, numMobs);
                if (drops[mobNumber] == null) {
                    drops[mobNumber] = new Item[1];
                    drops[mobNumber][0] = toDrop;
                } else {
                    Item[] temp = drops[mobNumber];
                    drops[mobNumber] = new Item[temp.Length + 1];
                    int o = 0;
                    for (; o < temp.Length; o++) {
                        drops[mobNumber][o] = temp[o];
                    }
                    drops[mobNumber][o] = toDrop;
                }
            }
        }
        return drops;
    }
    /**更新坐骑或普通行动力 */
    void createItem()
    {
        if (itemList != null)
        {
            itemList.Clear();
            itemList = null;
        }
        lastItem = null;
        itemList = new List <TowerItem> ();
        //解决部分机型高宽不分的BUG
        int        width   = Screen.width < Screen.height ? Screen.width : Screen.height;
        float      y       = 0; //每个副本点位之间的高度差
        float      x       = 0; //每一行X坐标
        float      centerX = 0; //屏幕中间值
        GameObject a;

        for (int i = 0; i < missionList.Length; i++)
        {
            Mission mission = MissionInfoManager.Instance.getMissionBySid(missionList[i]);
            centerX = (width * UiManager.Instance.screenScaleX) / 2 - (width / 3);

            if (i % 2 == 0)
            {
                x = 144;
            }
            else
            {
                x = -126;
            }
            // x = UnityEngine.Random.Range(-2 * centerX, 2*centerX);
            a = Instantiate(itemPrefab) as GameObject;
            TowerItem item = a.GetComponent <TowerItem>();
            item.name = StringKit.intToFixString(i + 1);
            item.initButton(mission, i + 1, this);
            item.transform.parent        = missionsParentPos;
            item.transform.localScale    = Vector3.one;
            item.transform.localPosition = new Vector3(x, y, 0);
            y += 182;
            if (mission.sid == FuBenManagerment.Instance.getPassChapter())  //需要通的SID
            {
                lastItem = item;
                NGUITools.AddChild(lastItem.gameObject, newItemRayPrefab);
            }
            itemList.Add(item);
        }
        //这里是连线的
        for (int i = 0; i < itemList.Count; i++)
        {
            if (i + 1 >= itemList.Count)
            {
                break;
            }
            if (i % 2 == 0)
            {
                itemList[i].line[0].SetActive(true);
                itemList[i].line[1].SetActive(false);
            }
            else
            {
                itemList[i].line[0].SetActive(false);
                itemList[i].line[1].SetActive(true);
            }
        }
    }