CaveworldFlora.Cluster.GetExclusivityRadius C# (CSharp) Method

GetExclusivityRadius() public static method

public static GetExclusivityRadius ( ThingDef_ClusterPlant plantDef, int clusterSize ) : float
plantDef ThingDef_ClusterPlant
clusterSize int
return float
        public static float GetExclusivityRadius(ThingDef_ClusterPlant plantDef, int clusterSize)
        {
            return (plantDef.clusterExclusivityRadiusOffset + (float)clusterSize * plantDef.clusterExclusivityRadiusFactor);
        }
        public static float GetMaxExclusivityRadius(ThingDef_ClusterPlant plantDef)

Usage Example

示例#1
0
        /// <summary>
        /// Try to get a valid cell to spawn a new cluster away from plant.
        /// </summary>
        public static void TryGetRandomSpawnCellAwayFromCluster(Cluster cluster, int newDesiredClusterSize, out IntVec3 spawnCell)
        {
            spawnCell = IntVec3.Invalid;
            float newClusterExclusivityRadius = Cluster.GetExclusivityRadius(cluster.plantDef, newDesiredClusterSize);
            //Log.Message("newCluster size/ExclusivityRadius = " + newClusterSize + "/" + newClusterExclusivityRadius);

            // Current cluster and new cluster zones are exclusive and should not overlap.
            float newClusterMinDistance = cluster.exclusivityRadius + newClusterExclusivityRadius;
            float newClusterMaxDistance = 2f * newClusterMinDistance;
            //Log.Message("newClusterMinDistance/newClusterMaxDistance = " + newClusterMinDistance + "/" + newClusterMaxDistance);

            Predicate <IntVec3> validator = delegate(IntVec3 cell)
            {
                // Check cell is not too close from current cluster.
                if (cell.InHorDistOf(cluster.Position, newClusterMinDistance))
                {
                    return(false);
                }
                //Log.Message("not too close");
                // Check cell is not too distant from current cluster.
                if (cell.InHorDistOf(cluster.Position, newClusterMaxDistance) == false)
                {
                    return(false);
                }
                //Log.Message("not too distant");
                // Check cell is in the same room.
                if (cell.GetRoom() != cluster.GetRoom())
                {
                    return(false);
                }
                // Check a plant can be spawned here.
                if (IsValidPositionToGrowPlant(cluster.plantDef, cell) == false)
                {
                    return(false);
                }
                //Log.Message("IsValidPositionToSpawnPlant OK");
                // Check there is no third cluster nearby.
                if (IsClusterAreaClear(cluster.plantDef, newDesiredClusterSize, cell) == false)
                {
                    return(false);
                }
                return(true);
            };

            bool validCellIsFound = CellFinder.TryFindRandomCellNear(cluster.Position, (int)newClusterMaxDistance, validator, out spawnCell);

            if (validCellIsFound == false)
            {
                // Note that TryFindRandomCellNear set result to root if no valid cell is found!
                spawnCell = IntVec3.Invalid;
            }
        }
All Usage Examples Of CaveworldFlora.Cluster::GetExclusivityRadius