59 lines
2.1 KiB
C#
59 lines
2.1 KiB
C#
using System.Collections.Generic;
|
|
using GeometryTD.Definition;
|
|
using GeometryTD.Procedure;
|
|
|
|
namespace GeometryTD.Factory
|
|
{
|
|
public static class RunStateFactory
|
|
{
|
|
public static RunState CreateFixedRun(
|
|
LevelThemeType themeType,
|
|
BackpackInventoryData initialInventorySnapshot,
|
|
string runId = null,
|
|
int runSeed = 0)
|
|
{
|
|
IReadOnlyList<RunNodeSeed> fixedNodeSeeds = FixedRunNodeSequenceBuilder.Build(themeType);
|
|
return Create(themeType, initialInventorySnapshot, fixedNodeSeeds, runId, runSeed);
|
|
}
|
|
|
|
public static RunState Create(
|
|
LevelThemeType themeType,
|
|
BackpackInventoryData initialInventorySnapshot,
|
|
IEnumerable<RunNodeSeed> nodeSeeds,
|
|
string runId = null,
|
|
int runSeed = 0)
|
|
{
|
|
List<RunNodeState> nodes = new List<RunNodeState>();
|
|
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, runSeed, themeType, nodes, initialInventorySnapshot);
|
|
}
|
|
|
|
public static int CreateRunSeed()
|
|
{
|
|
int seed = System.Guid.NewGuid().GetHashCode();
|
|
return seed == 0 ? 1 : seed;
|
|
}
|
|
}
|
|
} |