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); } } }
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(); }
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); }
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; }
public void Upgrade(TowerButton button) { TowerItem chosenUpgrade = button.tower; GameLogic.Instance.ChangePoints(-chosenUpgrade.priceToBuy); currentTile.towerHolder.Setup(chosenUpgrade); CloseTowerOptions(); }
protected override void Start() { base.Start(); if (item == null) { item = new TowerItem(Random.Range(0, BaseTower.TOWER_COMPLETE), Random.Range(3, 10)); } }
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); }
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); }
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; } }
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); }
void Update() { if (inventory[0] != null) { TowerItem towerItem = (TowerItem)inventory[0].item; if (!isShowingPreview) { SpawnPreview(towerItem); } else { MovePreview(towerItem); } } }
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; } }
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(); } } }
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); } }
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); } }
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); }
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; }
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(); }
private void SetInventoryOpen(bool setted) { if (!setted) { Pickup(toClone); foreach (Item i in craftingRecipe) { Pickup(i); } toClone = null; craftingRecipe = new CraftableItem[NUM_CRAFTABLES]; UpdateInventory(); } }
private void SpawnPreview(TowerItem towerItem) { previewItem = (GameObject)Instantiate((towerItem.GetPlaceablePreviewItemPrefab())); previewItem.SetActive(false); isShowingPreview = true; }
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); } } }