Пример #1
0
    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);
    }
Пример #2
0
    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;
        }
    }
Пример #3
0
    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);
    }
Пример #4
0
 internal void RegisterItemSpawnpoint(EMapItem pType, Vector3 pPosition)
 {
     if (itemSpawnpoints.ContainsKey(pType))
     {
         itemSpawnpoints[pType].Add(pPosition);
     }
     else
     {
         itemSpawnpoints.Add(pType, new List <Vector3>()
         {
             pPosition
         });
     }
 }
Пример #5
0
    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);
    }
Пример #6
0
    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);
    }
Пример #7
0
    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]);
    }
Пример #8
0
    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);
    }
Пример #9
0
    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);
    }
Пример #10
0
    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);
        }
    }
Пример #11
0
 internal bool HasItem(EMapItem pItem)
 {
     return(itemsCount[pItem] > 0);
 }
Пример #12
0
 private Image GetItemSprite(EMapItem pItem)
 {
     return(itemIcons[(int)pItem - 1]);
 }
Пример #13
0
 internal void OnItemCountChanged(EMapItem pItem, int pCount)
 {
     GetItemSprite(pItem).color = new Color(1, 1, 1, pCount > 0 ? 1 : 0.5f);
 }
Пример #14
0
 internal void Init(EMapItem pType)
 {
     Type        = pType;
     icon.sprite = game.ItemManager.GetMapItemIcon(pType);
 }