Пример #1
0
    public List <GameObject> CheckTileResource(List <GameObject> tiles, MapHelper.ResourceType resource)
    {
        List <GameObject> resourceList   = new List <GameObject>();
        List <GameObject> noResourceList = new List <GameObject>();

        foreach (GameObject obj in tiles)
        {
            switch (resource)
            {
            case MapHelper.ResourceType.Hunt:
                if (obj.GetComponent <TileStats>().hasHunt)
                {
                    resourceList.Add(obj);
                }
                break;

            case MapHelper.ResourceType.Gather:
                if (obj.GetComponent <TileStats>().hasGather)
                {
                    resourceList.Add(obj);
                }
                break;

            case MapHelper.ResourceType.Warmth:
                if (obj.GetComponent <TileStats>().hasWarmth)
                {
                    resourceList.Add(obj);
                }
                break;

            case MapHelper.ResourceType.Collect:
                if (obj.GetComponent <TileStats>().hasCollect)
                {
                    resourceList.Add(obj);
                }
                break;

            default:
                if (!obj.GetComponent <TileStats>().hasCollect&& !obj.GetComponent <TileStats>().hasWarmth &&
                    !obj.GetComponent <TileStats>().hasGather&& !obj.GetComponent <TileStats>().hasHunt)
                {
                    noResourceList.Add(obj);
                }
                break;
            }
        }

        List <GameObject> tileList = noResourceList;

        if (resource != MapHelper.ResourceType.None)
        {
            if (resourceList.Count > 0)
            {
                tileList = resourceList;
            }
        }

        return(tileList);
    }
Пример #2
0
    public GameObject[] FindTile(GameObject[] tileset, Locator nextLoc, MapHelper.ResourceType resourceType)
    {
        List <GameObject> availableTiles = new List <GameObject>();

        foreach (GameObject tile in tileset)
        {
            TileStats tileStats = tile.GetComponent <TileStats>();
            foreach (Locator loc in tileStats.locators)
            {
                if (!loc.req.Equals(nextLoc.req))
                {
                    continue;
                }
                switch (nextLoc.dir)
                {
                case MapHelper.LocatorDirection.North:

                    if (loc.dir == MapHelper.LocatorDirection.South)
                    {
                        //print("add tile North");
                        availableTiles.Add(tile);
                    }
                    break;

                case MapHelper.LocatorDirection.East:

                    if (loc.dir == MapHelper.LocatorDirection.West)
                    {
                        //print("add tile East");
                        availableTiles.Add(tile);
                    }
                    break;

                case MapHelper.LocatorDirection.South:

                    if (loc.dir == MapHelper.LocatorDirection.North)
                    {
                        //print("add tile South");
                        availableTiles.Add(tile);
                    }
                    break;

                case MapHelper.LocatorDirection.West:

                    if (loc.dir == MapHelper.LocatorDirection.East)
                    {
                        //print("add tile West");
                        availableTiles.Add(tile);
                    }
                    break;
                }
            }
        }
        List <GameObject> filteredTiles = CheckTileResource(availableTiles, resourceType);

        return(filteredTiles.ToArray());
    }
Пример #3
0
    public void GenerateRegion(List <Locator> openLocators, out List <Locator> previousRegionLocators)
    {
        previousRegionLocators = openLocators;
        if (openLocators.Count <= 0)
        {
            Debug.LogWarning("no locators left!");
            return;
        }

        int     randomIndex = UnityEngine.Random.Range(0, openLocators.Count);
        Locator locator     = openLocators[randomIndex];

        openLocators = new List <Locator>();
        openLocators.Add(locator);

        int difficulty = locator.difficulty + 1;

        GameObject[] currentTileSet = setRandomRegion(difficulty);
        int          regionSize     = UnityEngine.Random.Range(regionMinSize, regionMaxSize);

        //int resourceNum = Mathf.CeilToInt((regionSize * 0.2f) * (difficulty * 0.3f) + (float)UnityEngine.Random.Range(0, 3));

        print("Region: " + currentRegion);
        print("Region Size: " + regionSize);

        print("Region Difficulty: " + difficulty);

        //get random locator
        for (int x = 0; x < regionSize; x++)
        {
            bool locatorFound = false;
            int  y            = 0;

            MapHelper.ResourceType currentResource = MapHelper.ResourceType.None;
            float rand = UnityEngine.Random.Range(0f, 1f);
            if (rand < currentResourceChance)
            {
                //print(rand);
                //print(currentResourceChance);
                currentResource = (MapHelper.ResourceType)UnityEngine.Random.Range(0, 3);
                //print(currentResource);
            }

            while (!locatorFound)
            {
                y++;
                if (openLocators.Count <= 0)
                {
                    Debug.LogWarning("no locators left!");
                    return;
                }

                randomIndex = UnityEngine.Random.Range(0, openLocators.Count);
                //print(randomIndex);
                locator = openLocators[randomIndex];

                GameObject[] possibleTiles = FindTile(currentTileSet, locator, currentResource);

                if (possibleTiles.Length > 0)
                {
                    //print("found locator");
                    locatorFound = true;
                    openLocators.Remove(locator);
                    GameObject     currentTile   = possibleTiles[UnityEngine.Random.Range(0, possibleTiles.Length)];
                    Tilemap        prefabTilemap = currentTile.GetComponent <Tilemap>();
                    List <Locator> newLocs;
                    //print(prefabTilemap);
                    CopyTiles(currentMap, prefabTilemap, locator, out newLocs);
                    openLocators.AddRange(newLocs);
                    y = 0;
                }
                else
                {
                    Debug.LogWarning("possible tile not found");
                    //print(locator.dir);
                }
                if (y == 1000)
                {
                    Debug.LogWarning("infinite loop????");
                    locatorFound = true;
                }
            }

            List <Locator> noOverlapLocators = new List <Locator>();

            foreach (Locator l in openLocators)
            {
                if (!isLocatorOverlap((int)l.location.x, (int)l.location.y, l.dir))
                {
                    noOverlapLocators.Add(l);
                }
            }

            openLocators = noOverlapLocators;
        }

        for (int i = 0; i < openLocators.Count; i++)
        {
            Locator temp = openLocators[i];
            temp.difficulty = difficulty;
            openLocators[i] = temp;
        }

        previousRegionLocators.AddRange(openLocators);
    }