using System.Collections.Generic; using GeometryTD.Definition; namespace GeometryTD.Procedure { public static class RunStateFactory { public static RunState CreateFixedRun( LevelThemeType themeType, BackpackInventoryData initialInventorySnapshot, string runId = null) { IReadOnlyList fixedNodeSeeds = FixedRunNodeSequenceBuilder.Build(themeType); return Create(themeType, initialInventorySnapshot, fixedNodeSeeds, runId); } public static RunState Create( LevelThemeType themeType, BackpackInventoryData initialInventorySnapshot, IEnumerable nodeSeeds, string runId = null) { List nodes = new List(); if (nodeSeeds != null) { int sequenceIndex = 0; foreach (RunNodeSeed seed in nodeSeeds) { if (seed == null) { continue; } nodes.Add(new RunNodeState { NodeId = seed.NodeId > 0 ? seed.NodeId : sequenceIndex + 1, NodeType = seed.NodeType, ThemeType = seed.ThemeType == LevelThemeType.None ? themeType : seed.ThemeType, LinkedLevelId = seed.LinkedLevelId, SequenceIndex = seed.SequenceIndex >= 0 ? seed.SequenceIndex : sequenceIndex, Status = sequenceIndex == 0 ? RunNodeStatus.Available : RunNodeStatus.Locked }); sequenceIndex++; } } return new RunState(runId, themeType, nodes, initialInventorySnapshot); } } }