WKLib 0.2.3
A modding library for White Knuckle
Loading...
Searching...
No Matches
RegionBuilder.cs
Go to the documentation of this file.
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using UnityEngine;
5
6namespace WKLib.API.Gamemodes;
7
12public class RegionBuilder
13{
14 private string _name = "New Region";
15 private List<M_Subregion> _subregions = [];
16 private bool _hasStartingLevel = true;
17
23 public RegionBuilder WithName(string regionName)
24 {
25 _name = regionName;
26 return this;
27 }
28
34 public RegionBuilder WithSubregions(List<M_Subregion> subregions)
35 {
36 _subregions = subregions ?? [];
37 return this;
38 }
39
49 [Obsolete("Game Handles this automatically, Let the game decide")]
50 public RegionBuilder WithStartingLevel(bool hasStartingLevel)
51 {
52 _hasStartingLevel = hasStartingLevel;
53 return this;
54 }
55
60 public M_Region Build()
61 {
62 var region = ScriptableObject.CreateInstance<M_Region>();
63 region.regionName = _name;
64 region.name = _name;
65
66 List<M_Region.SubregionGroup> subRegGroups = [];
67 foreach (var subregion in _subregions)
68 {
69 subRegGroups.Add(new M_Region.SubregionGroup(){subregions = [subregion]});
70 }
71
72 // Wrap the subregions in SubregionGroups
73 region.subregionGroups = subRegGroups;
74
75 if (_subregions.Count > 1 && _subregions[0].levelReferences.Count > 1)
76 {
77 region.transitionLevels =
78 [
79 new M_Region.TransitionLevels() {
80 fromRegion = _name,
81 levels = [_subregions[0].levelReferences[^1].level]
82 }
83 ];
84
85 _subregions[0].levelReferences.RemoveAt(_subregions[0].levelReferences.Count - 1);
86 }
87
88 region.regionHeight = _subregions.Sum(sr => sr.subregionHeight);
89
90
91 // pick a default start level - M1_Intro_01 (if exists)
92 var defaultPrefab = CL_AssetManager.GetFullCombinedAssetDatabase().levelAssets
93 .FirstOrDefault(pref => pref.level.levelName == "M1_Intro_01");
94 var defaultLevelComp = defaultPrefab?.level;
95 if (defaultLevelComp is not null && _hasStartingLevel)
96 {
97 region.startLevels = [defaultLevelComp];
98 }
99
100 region.regionOrder = M_Region.RegionOrder.playlist;
101 region.introText = _name;
102
103 // Flatten all sessionEventLists from subregions
104 region.sessionEventLists = _subregions
105 .SelectMany(sr => sr.sessionEventLists)
106 .ToList();
107
108 return region;
109 }
110}
A fluent builder class for creating and configuring an M_Region instance It simplifies the process o...
M_Region Build()
Constructs and returns a new M_Region instance based on the properties configured in this builder.
RegionBuilder WithSubregions(List< M_Subregion > subregions)
Sets the list of subregions that belong to this region.
RegionBuilder WithStartingLevel(bool hasStartingLevel)
Sets whether the region should attempt to include a default starting level.
RegionBuilder WithName(string regionName)
Sets the name for the region. This name will be used for both display and internal identification.