Пример #1
0
    /// <summary>
    /// Generates the biomes each area has
    /// </summary>
    void GenerateBiomes()
    {
        AreaGraph = new AreaGraph(Areas.Values.ToList(), this);
        AreaGraph.ColorGraph();

        MergeAreasWithSameBiome(AreaGraph);

        foreach (AreaNode node in AreaGraph.GetNodes())
        {
            if (Areas.ContainsKey(node.NodeID))
            {
                Area areaForNode = Areas[node.NodeID];
                areaForNode.GenerateBiomeForArea(node.GetColor());
            }
        }
    }
Пример #2
0
    /// <summary>
    /// TEMP
    /// </summary>
    /// <param name="g"></param>
    void DrawGraph(AreaGraph g)
    {
        foreach (AreaNode node in g.GetNodes())
        {
            Gizmos.color = biomeTypeToMaterialDictionary[node.GetColor()].color;
            HexCell centerCell = map.GetAreaByID(node.NodeID).Cells[0];
            Vector3 nodePos    = Converter.V2ToV3(Map.HexCellToWorldPosition(centerCell));
            Gizmos.DrawSphere(nodePos, 1);

            Gizmos.color = Color.cyan;
            foreach (uint node2 in node.Edges)
            {
                HexCell edgeNode = map.GetAreaByID(node2).Cells[0];
                Vector3 nodePos2 = Converter.V2ToV3(Map.HexCellToWorldPosition(edgeNode));
                Gizmos.DrawLine(nodePos, nodePos2);
            }
        }// end i
    }
Пример #3
0
    /// <summary>
    /// Merges areas that have the same color in the area graph
    /// </summary>
    void MergeAreasWithSameBiome(AreaGraph g)
    {
        // FIND ALL AREAS THAT HAVE TO BE MERGED WITH THIS AREA
        // MERGE ALL AT ONCE

        List <List <uint> > listOfAreasToMerge = g.GetAreasToMerge();

        foreach (List <uint> areasToMerge in listOfAreasToMerge)
        {
            int            size           = 0;
            List <HexCell> cellsInNewArea = new List <HexCell>();
            int            tier           = 0;

            foreach (uint areaID in areasToMerge)
            {
                if (Areas.ContainsKey(areaID))
                {
                    Area mergeArea = Areas[areaID];

                    // use capacity if merge area not completely filled
                    // aka can add to this area if map is expanding
                    size += mergeArea.Cells.Capacity;
                    cellsInNewArea.AddRange(mergeArea.Cells);
                    tier = (tier < mergeArea.Tier) ? mergeArea.Tier : tier;
                    RemoveArea(areaID);
                }
                else
                {
                    Debug.LogError("trying to acces area that does not exist. ID: " + areaID);
                }
            }// end foreach uint areaID
            // accumulated all things about the merging ares from cell to capcaity to tier
            Area newMergedArea = new Area(size);
            newMergedArea.SetTier(tier);
            foreach (HexCell cellInNewArea in cellsInNewArea)
            {
                newMergedArea.TryEstablishRelationWithCell(cellInNewArea);
            }
            Areas.Add(newMergedArea.AreaID, newMergedArea);
            //Debug.Log("Created new Area  with ID: " + newMergedArea.AreaID);
            AreaGraph.MergeNodesIntoNewNode(areasToMerge, newMergedArea.AreaID);
        }// end foreach list uint
    }