public bool AddItem(EMapItem pItem, int pCount = 1) { if (pCount > 0 && !itemsCount.ContainsKey(pItem)) { Debug.LogError($"Item {pItem} not in inventory"); return(false); } //we can only carry 1 G if (pItem == EMapItem.GSource) { itemsCount.TryGetValue(pItem, out int count); if (count > 0) { return(false); } } if (itemsCount.ContainsKey(pItem)) { itemsCount[pItem] += pCount; } else { //items[itemsCount.Values.Count] = pItem; itemsCount.Add(pItem, pCount); } Game.Instance.SoundManager.PlaySound(SoundManager.ESound.eCollect); game.HUD.Inventory.OnItemCountChanged(pItem, itemsCount[pItem]); return(true); }
private void GenerateRandomItem() { EMapItem nextItemType = GetNextMapItemType(); if (DebugData.TestGameEffect != EGameEffect.None) { nextItemType = EMapItem.GameEffect; } else if (DebugData.TestPowerUp != EPowerUp.None) { nextItemType = EMapItem.PowerUp; } else if (DebugData.TestGenerateMapWeapon != EWeaponId.None) { nextItemType = EMapItem.Weapon; } else if (DebugData.TestGenerateMapSpecialWeapon != EWeaponId.None) { nextItemType = EMapItem.SpecialWeapon; } int randomIndex = GetRandomItemIndex(nextItemType); Vector2?randomGenPos = game.Map.ActiveMap.GetRandomPosition(); if (randomGenPos == null) { Debug.Log("Skipping GenerateRandomItem"); return; } MapItem newItem = InstanceFactory.Instantiate(mapItemPrefab.gameObject).GetComponent <MapItem>(); Vector2 randomPosition = (Vector2)randomGenPos; switch (nextItemType) { case EMapItem.GameEffect: newItem.Init(randomPosition, MapItem.EType.GameEffect, randomIndex); break; case EMapItem.PowerUp: case EMapItem.PowerUp2: case EMapItem.PowerUp3: //if(DebugData.TestPowerUp != EPowerUp.None) // randomIndex = (int)DebugData.TestPowerUp; newItem.Init(randomPosition, MapItem.EType.PowerUp, randomIndex); break; case EMapItem.Weapon: case EMapItem.Weapon2: newItem.Init(randomPosition, MapItem.EType.Weapon, randomIndex); break; case EMapItem.SpecialWeapon: newItem.Init(randomPosition, MapItem.EType.SpecialWeapon, randomIndex); break; } }
private EMapItem GetNextMapItemType() { int itemTypesCount = Enum.GetNames(typeof(EMapItem)).Length; int rand = Random.Range(0, itemTypesCount); EMapItem nextItem = (EMapItem)(((int)lastItemType + rand) % itemTypesCount); lastItemType = nextItem; return(nextItem); }
internal void RegisterItemSpawnpoint(EMapItem pType, Vector3 pPosition) { if (itemSpawnpoints.ContainsKey(pType)) { itemSpawnpoints[pType].Add(pPosition); } else { itemSpawnpoints.Add(pType, new List <Vector3>() { pPosition }); } }
private int GetRandomItemIndex(EMapItem pType) { int i; switch (pType) { case EMapItem.GameEffect: if (DebugData.TestGameEffect != EGameEffect.None) { return((int)DebugData.TestGameEffect); } i = Random.Range(0, brainiacs.ItemManager.GameEffects.Count); return((int)brainiacs.ItemManager.GameEffects[i].Type); case EMapItem.PowerUp: case EMapItem.PowerUp2: case EMapItem.PowerUp3: if (DebugData.TestPowerUp != EPowerUp.None) { return((int)DebugData.TestPowerUp); } i = Random.Range(0, brainiacs.ItemManager.PowerUps.Count); return((int)brainiacs.ItemManager.PowerUps[i].Type); case EMapItem.Weapon: case EMapItem.Weapon2: if (DebugData.TestGenerateMapWeapon != EWeaponId.None) { return((int)DebugData.TestGenerateMapWeapon); } i = Random.Range(0, brainiacs.ItemManager.MapWeapons.Count); return((int)brainiacs.ItemManager.MapWeapons[i].Id); case EMapItem.SpecialWeapon: if (DebugData.TestGenerateMapSpecialWeapon != EWeaponId.None) { return((int)DebugData.TestGenerateMapSpecialWeapon); } i = Random.Range(0, brainiacs.ItemManager.MapWeaponsSpecial.Count); return((int)brainiacs.ItemManager.MapWeaponsSpecial[i].Id); } Debug.LogError("Invalid item type"); return(-1); }
public Vector3?GetItemSpawnPosition(EMapItem pType) { List <Vector3> positions = new List <Vector3>(); itemSpawnpoints.TryGetValue(pType, out positions); if (positions != null && positions.Count > 0) { Vector3 pos = positions[Random.Range(0, positions.Count)]; //if I dont add random offset the objects stays on top of each other...weird pos += new Vector3(Random.Range(0, 0.5f), Random.Range(0, 0.5f), 0); return(pos); } //Debug.Log($"No position for item {pType} defined"); return(null); }
public void RemoveItem(EMapItem pItem) { Debug.Log("RemoveItem " + pItem); if (!itemsCount.ContainsKey(pItem)) { Debug.LogError($"Item {pItem} not in inventory"); return; } if (itemsCount[pItem] <= 0) { Debug.LogError($"Item {pItem} has 0 count"); return; } itemsCount[pItem] -= 1; game.HUD.Inventory.OnItemCountChanged(pItem, itemsCount[pItem]); }
public bool UseItem(Player pPlayer, EMapItem pType) { switch (pType) { case EMapItem.None: break; case EMapItem.GSource: var hit = Physics2D.CircleCast(pPlayer.transform.position, Tower.MAX_UPG_DISTANCE, Vector2.zero, 0, game.Layers.Tower); if (hit) { hit.transform.gameObject.GetComponent <Tower>().StartUpgrade(pPlayer); } else { Debug.Log("No tower near"); game.SoundManager.PlaySound(SoundManager.ESound.eCannotUse); return(false); } return(true); case EMapItem.TrueNews: TrueNews trueNewsInstance = Instantiate(prefab_TrueNews); trueNewsInstance.transform.parent = transform; trueNewsInstance.Throw(pPlayer); pPlayer.Inventory.RemoveItem(pType); return(true); case EMapItem.TinFoilHat: if (pPlayer.TinFoilHat.IsActive) { Debug.Log("Tinfoil hat is already active"); game.SoundManager.PlaySound(SoundManager.ESound.eCannotUse); return(false); } pPlayer.TinFoilHat.Activate(); pPlayer.Inventory.RemoveItem(pType); return(true); } return(false); }
public Sprite GetMapItemIcon(EMapItem pType) { switch (pType) { case EMapItem.None: break; case EMapItem.GSource: return(mapIcon_gSource); case EMapItem.TrueNews: return(mapIcon_TrueNews); case EMapItem.TinFoilHat: return(mapIcon_TinFoilHat); default: break; } return(null); }
private void TryGenerateItem(EMapItem pItem, bool pForce = false) { Vector3?pos = game.MapController.GetItemSpawnPosition(pItem); if (pos == null) { return; } if (!lastGenerated.ContainsKey(pItem) || (lastGenerated.ContainsKey(pItem) && lastGenerated[pItem] == null)) { pForce = true; } //todo: define chance to generate if (!debug_AlwayGenerate && !pForce && Random.Range(0, 1f) > 0.5f) { return; } //Debug.Log($"Generate item {type} at {pos}"); MapItem itemInstance = Instantiate(mapItemPrefab, (Vector3)pos, Quaternion.identity); itemInstance.transform.parent = transform; itemInstance.Init(pItem); if (lastGenerated.ContainsKey(pItem)) { lastGenerated[pItem] = itemInstance; } else { lastGenerated.Add(pItem, itemInstance); } }
internal bool HasItem(EMapItem pItem) { return(itemsCount[pItem] > 0); }
private Image GetItemSprite(EMapItem pItem) { return(itemIcons[(int)pItem - 1]); }
internal void OnItemCountChanged(EMapItem pItem, int pCount) { GetItemSprite(pItem).color = new Color(1, 1, 1, pCount > 0 ? 1 : 0.5f); }
internal void Init(EMapItem pType) { Type = pType; icon.sprite = game.ItemManager.GetMapItemIcon(pType); }