# Web Generation Settings

## ⚙️ WebGenerationSettings Struct

Settings used to generate Webs at runtime.

> Namespace: `Esper.SkillWeb.Procedural`\
> Type: `struct`

***

### 📦 Fields

| Access   | Field                            | Type                  | Description                                                                                                                                               |
| -------- | -------------------------------- | --------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `public` | `skillGroups`                    | `List<SkillGroup>`    | Skill node groups to generate.                                                                                                                            |
| `public` | `connectionAlgorithm`            | `ConnectionAlgorithm` | The connection algorithm to use.                                                                                                                          |
| `public` | `possibleStartingSkillSizes`     | `List<Skill.Size>`    | The skill sizes that are possible of being a starting skill.                                                                                              |
| `public` | `skillTags`                      | `List<string>`        | Only the skills with a tag in this list will be included. Leave this empty if all tags should be allowed.                                                 |
| `public` | `minPreferredFocusPointDistance` | `float`               | The minimum distance away a focus point should be from all other skills. This is not a strict min. A focus point is a randomized center of a skill group. |
| `public` | `maxPreferredFocusPointDistance` | `float`               | The maximum distance away a focus point should be from all other nodes. This is not a strict max. A focus point is a randomized center of a skill group.  |
| `public` | `minStartingSkills`              | `int`                 | The min number of skills that aren't connection dependant.                                                                                                |
| `public` | `maxStartingSkills`              | `int`                 | The max number of skills that aren't connection dependant.                                                                                                |
| `public` | `maxPossibleConnectionsPerSkill` | `int`                 | The max number of connections each skill can have.                                                                                                        |
| `public` | `connectionToTinyStyleIndex`     | `int`                 | The connection style index for a connection that connects to a tiny skill.                                                                                |
| `public` | `connectionToSmallStyleIndex`    | `int`                 | The connection style index for a connection that connects to a small skill.                                                                               |
| `public` | `connectionToMediumStyleIndex`   | `int`                 | The connection style index for a connection that connects to a medium skill.                                                                              |
| `public` | `connectionToLargeStyleIndex`    | `int`                 | The connection style index for a connection that connects to a large skill.                                                                               |
| `public` | `connectionToGiantStyleIndex`    | `int`                 | The connection style index for a connection that connects to a giant skill.                                                                               |
| `public` | `centerPoint`                    | `Vector2`             | The center point of the nodes.                                                                                                                            |

***

### 🧩 Nested Structs

`public struct SkillGroup`

Represents a group of nodes to generate.

| Access   | Field                  | Type                | Description                                                                                                                                                              |
| -------- | ---------------------- | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `public` | `count`                | `int`               | The total number of skill nodes to generate.                                                                                                                             |
| `public` | `filter`               | `Func<Skill, bool>` | A function used by the randomization algorithm to filter out unwanted skills. If this is null, any skill can be selected.                                                |
| `public` | `minPreferredDistance` | `float`             | The minimum distance away a each skill in this group should be from all other skills. This is not a strict min.                                                          |
| `public` | `maxPreferredDistance` | `float`             | The maximum distance away a each skill in this group should be from all other skills. This is not a strict max.                                                          |
| `public` | `uniqueNodes`          | `bool`              | If duplicate skills should be disallowed for this skill group. Setting this to true may result in the count value being disregarded if no possible unique skills remain. |
| `public` | `positionSearch`       | `PositionSearch`    | The position search algorithm settings.                                                                                                                                  |

***

`public struct PositionSearch`

The position search algorithm settings.

| Access   | Field               | Type      | Description                                                              |
| -------- | ------------------- | --------- | ------------------------------------------------------------------------ |
| `public` | `angleStep`         | `float`   | Base angular step in degrees for spiral iterations.                      |
| `public` | `spiralGrowth`      | `float`   | Base growth factor for spiral radius.                                    |
| `public` | `angleStepRange`    | `Vector2` | Minimum and maximum bounds for randomized angle step.                    |
| `public` | `spiralGrowthRange` | `Vector2` | Minimum and maximum bounds for randomized spiral growth.                 |
| `public` | `randomize`         | `bool`    | Whether to randomize angle step and spiral growth within defined ranges. |

| Access          | Property  | Type             | Description                      |
| --------------- | --------- | ---------------- | -------------------------------- |
| `public static` | `Default` | `PositionSearch` | Returns a default configuration. |

| Access   | Method              | Returns | Description                                                 |
| -------- | ------------------- | ------- | ----------------------------------------------------------- |
| `public` | `GetAngleStep()`    | `float` | Gets an actual angle step (randomized if enabled).          |
| `public` | `GetSpiralGrowth()` | `float` | Gets an actual spiral growth value (randomized if enabled). |

***

### 🧩 Nested Enums

`public enum ConnectionAlgorithm`

Web generation connection algorithm types.

| Value          | Description                                                            |
| -------------- | ---------------------------------------------------------------------- |
| `SmallToLarge` | Generally starts from the smaller skills and connects to larger ones.  |
| `LargeToSmall` | Generally starts from the largest skills and connects to smaller ones. |
| `Random`       | Randomly connects skills.                                              |
