레벨 밸런스 1000까지 확장 및 박스 상한 규칙 적용
This commit is contained in:
47
Program.cs
47
Program.cs
@@ -10,6 +10,7 @@ using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
using System.Text;
|
||||
|
||||
internal static class Program
|
||||
@@ -332,7 +333,8 @@ internal static class Program
|
||||
Id = level.Id,
|
||||
Grid = newGrid,
|
||||
LowestPush = level.LowestPush,
|
||||
PushLimit = level.PushLimit
|
||||
PushLimit = level.PushLimit,
|
||||
MoveCount = level.MoveCount
|
||||
});
|
||||
}
|
||||
|
||||
@@ -395,7 +397,8 @@ internal static class Program
|
||||
PocketMaxRadius = input.PocketMaxRadius,
|
||||
MaskPadMin = padMin,
|
||||
MaskPadMax = padMax,
|
||||
ShapeMasks = masks
|
||||
ShapeMasks = masks,
|
||||
ApplyTransforms = input.ApplyTransforms
|
||||
};
|
||||
}
|
||||
|
||||
@@ -423,6 +426,21 @@ internal static class Program
|
||||
case "large":
|
||||
AddMasks(resolved, seen, MaskLibrary.Large);
|
||||
break;
|
||||
case "tall8":
|
||||
AddMasks(resolved, seen, MaskLibrary.Tall8);
|
||||
break;
|
||||
case "tall9":
|
||||
AddMasks(resolved, seen, MaskLibrary.Tall9);
|
||||
break;
|
||||
case "tall10":
|
||||
AddMasks(resolved, seen, MaskLibrary.Tall10);
|
||||
break;
|
||||
case "tall11":
|
||||
AddMasks(resolved, seen, MaskLibrary.Tall11);
|
||||
break;
|
||||
case "tall12":
|
||||
AddMasks(resolved, seen, MaskLibrary.Tall12);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -477,7 +495,7 @@ internal sealed class LevelGenerator
|
||||
if (band.ShapeMasksExpanded == null || band.ShapeMasksExpanded.Count == 0)
|
||||
{
|
||||
var baseMasks = band.ShapeMasks.Count > 0 ? band.ShapeMasks : MaskLibrary.Microban;
|
||||
band.ShapeMasksExpanded = MaskLibrary.ExpandWithTransforms(baseMasks, band.MaskPadMin, band.MaskPadMax);
|
||||
band.ShapeMasksExpanded = MaskLibrary.ExpandWithTransforms(baseMasks, band.MaskPadMin, band.MaskPadMax, band.ApplyTransforms);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -594,7 +612,7 @@ internal sealed class LevelGenerator
|
||||
{
|
||||
var failReasons = _trace ? new Dictionary<string, int>() : null;
|
||||
var baseMasks = band.ShapeMasks.Count > 0 ? band.ShapeMasks : MaskLibrary.Microban;
|
||||
band.ShapeMasksExpanded ??= MaskLibrary.ExpandWithTransforms(baseMasks, band.MaskPadMin, band.MaskPadMax);
|
||||
band.ShapeMasksExpanded ??= MaskLibrary.ExpandWithTransforms(baseMasks, band.MaskPadMin, band.MaskPadMax, band.ApplyTransforms);
|
||||
var pockets = ResolvePockets(band);
|
||||
|
||||
var relaxSteps = overrideRelaxSteps ?? _tuning.RelaxationSteps;
|
||||
@@ -627,7 +645,7 @@ internal sealed class LevelGenerator
|
||||
var mask = MaskLibrary.CreateVariant(
|
||||
MaskLibrary.PickRandom(rng, band.ShapeMasksExpanded),
|
||||
rng,
|
||||
_tuning.ApplyMaskTransforms,
|
||||
_tuning.ApplyMaskTransforms && band.ApplyTransforms,
|
||||
_tuning.MaskWallJitter);
|
||||
|
||||
var canvas = LayoutFactory.FromMask(mask, rng, _tuning, pockets);
|
||||
@@ -723,7 +741,8 @@ internal sealed class LevelGenerator
|
||||
Id = id,
|
||||
Grid = lines,
|
||||
LowestPush = solve.Pushes,
|
||||
PushLimit = pushLimit
|
||||
PushLimit = pushLimit,
|
||||
MoveCount = solve.Moves
|
||||
};
|
||||
return true;
|
||||
}
|
||||
@@ -765,6 +784,7 @@ internal sealed class LevelGenerator
|
||||
PocketMaxRadius = src.PocketMaxRadius,
|
||||
MaskPadMin = src.MaskPadMin,
|
||||
MaskPadMax = src.MaskPadMax,
|
||||
ApplyTransforms = src.ApplyTransforms,
|
||||
ShapeMasks = src.ShapeMasks.ToList(),
|
||||
ShapeMasksExpanded = src.ShapeMasksExpanded?.ToList()
|
||||
};
|
||||
@@ -824,7 +844,8 @@ internal sealed class LevelGenerator
|
||||
Id = level.Id,
|
||||
Grid = trimmed,
|
||||
LowestPush = level.LowestPush,
|
||||
PushLimit = level.PushLimit
|
||||
PushLimit = level.PushLimit,
|
||||
MoveCount = level.MoveCount
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -953,10 +974,20 @@ internal static class LevelVerifier
|
||||
|
||||
internal sealed class GeneratedLevel
|
||||
{
|
||||
[JsonPropertyOrder(0)]
|
||||
public int Id { get; init; }
|
||||
|
||||
[JsonPropertyOrder(1)]
|
||||
public List<string> Grid { get; init; } = new();
|
||||
|
||||
[JsonPropertyOrder(2)]
|
||||
public int LowestPush { get; init; }
|
||||
|
||||
[JsonPropertyOrder(3)]
|
||||
public int PushLimit { get; init; }
|
||||
|
||||
[JsonPropertyOrder(4)]
|
||||
public int MoveCount { get; init; }
|
||||
}
|
||||
|
||||
internal sealed class LevelBandConfig
|
||||
@@ -978,6 +1009,7 @@ internal sealed class LevelBandConfig
|
||||
public int PocketMaxRadius { get; set; } = -1;
|
||||
public int MaskPadMin { get; set; } = -1;
|
||||
public int MaskPadMax { get; set; } = 1;
|
||||
public bool ApplyTransforms { get; set; } = true;
|
||||
public List<string[]> ShapeMasks { get; set; } = new();
|
||||
public List<string[]>? ShapeMasksExpanded { get; set; }
|
||||
}
|
||||
@@ -1006,6 +1038,7 @@ internal sealed class LevelBandJson
|
||||
public int PocketMaxRadius { get; set; } = -1;
|
||||
public int MaskPadMin { get; set; } = -1;
|
||||
public int MaskPadMax { get; set; } = 1;
|
||||
public bool ApplyTransforms { get; set; } = true;
|
||||
public List<string> MaskSets { get; set; } = new();
|
||||
public int MaskTake { get; set; } = 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user