Rename NoiseBrush to CloudyBrush and allow brushes to perform configuration/calculation for particular draw ops.

This commit is contained in:
UnknownShadow200 2016-05-11 12:26:27 +10:00
parent c4af44ecfc
commit ba62aae7af
4 changed files with 142 additions and 132 deletions

View File

@ -30,6 +30,9 @@ namespace MCGalaxy.Drawing.Brushes {
/// <summary> Description of the brush, in addition to its syntax. </summary> /// <summary> Description of the brush, in addition to its syntax. </summary>
public abstract string[] Help { get; } public abstract string[] Help { get; }
/// <summary> Performs calcuations (if necessary) for the given drawop. </summary>
public virtual void Configure(DrawOp op, Player p) { }
public abstract byte NextBlock(DrawOp op); public abstract byte NextBlock(DrawOp op);
public abstract byte NextExtBlock(DrawOp op); public abstract byte NextExtBlock(DrawOp op);
@ -40,7 +43,7 @@ namespace MCGalaxy.Drawing.Brushes {
{ "checkered", CheckeredBrush.Process }, { "rainbow", RainbowBrush.Process }, { "checkered", CheckeredBrush.Process }, { "rainbow", RainbowBrush.Process },
{ "bwrainbow", BWRainbowBrush.Process }, { "striped", StripedBrush.Process }, { "bwrainbow", BWRainbowBrush.Process }, { "striped", StripedBrush.Process },
{ "replace", ReplaceBrush.Process }, { "replacenot", ReplaceNotBrush.Process }, { "replace", ReplaceBrush.Process }, { "replacenot", ReplaceNotBrush.Process },
{ "random", RandomBrush.Process }, { "noise", NoiseBrush.Process }, { "random", RandomBrush.Process }, { "cloudy", CloudyBrush.Process },
}; };
public static Dictionary<string, string[]> BrushesHelp = new Dictionary<string, string[]> { public static Dictionary<string, string[]> BrushesHelp = new Dictionary<string, string[]> {
@ -48,7 +51,7 @@ namespace MCGalaxy.Drawing.Brushes {
{ "checkered", CheckeredBrush.HelpString }, { "rainbow", RainbowBrush.HelpString }, { "checkered", CheckeredBrush.HelpString }, { "rainbow", RainbowBrush.HelpString },
{ "bwrainbow", BWRainbowBrush.HelpString }, { "striped", StripedBrush.HelpString }, { "bwrainbow", BWRainbowBrush.HelpString }, { "striped", StripedBrush.HelpString },
{ "replace", ReplaceBrush.HelpString }, { "replacenot", ReplaceNotBrush.HelpString }, { "replace", ReplaceBrush.HelpString }, { "replacenot", ReplaceNotBrush.HelpString },
{ "random", RandomBrush.HelpString }, { "noise", NoiseBrush.HelpString }, { "random", RandomBrush.HelpString }, { "cloudy", CloudyBrush.HelpString },
}; };
} }

View File

@ -23,11 +23,11 @@ using MCGalaxy.Generator;
namespace MCGalaxy.Drawing.Brushes { namespace MCGalaxy.Drawing.Brushes {
public sealed class NoiseBrush : FrequencyBrush { public sealed class CloudyBrush : FrequencyBrush {
readonly ExtBlock[] blocks; readonly ExtBlock[] blocks;
readonly ImprovedNoise noise; readonly ImprovedNoise noise;
public NoiseBrush(ExtBlock[] blocks, NoiseArgs n) { public CloudyBrush(ExtBlock[] blocks, NoiseArgs n) {
this.blocks = blocks; this.blocks = blocks;
Random r = n.Seed == int.MinValue ? new Random() : new Random(n.Seed); Random r = n.Seed == int.MinValue ? new Random() : new Random(n.Seed);
noise = new ImprovedNoise(r); noise = new ImprovedNoise(r);
@ -39,7 +39,7 @@ namespace MCGalaxy.Drawing.Brushes {
noise.Persistence = n.Persistence; noise.Persistence = n.Persistence;
} }
public override string Name { get { return "Noise"; } } public override string Name { get { return "Cloudy"; } }
public override string[] Help { get { return HelpString; } } public override string[] Help { get { return HelpString; } }
@ -57,7 +57,7 @@ namespace MCGalaxy.Drawing.Brushes {
n.Amplitude = 1; n.Frequency = 1; n.Octaves = 1; n.Amplitude = 1; n.Frequency = 1; n.Octaves = 1;
n.Seed = int.MinValue; n.Persistence = 2; n.Lacunarity = 2; n.Seed = int.MinValue; n.Persistence = 2; n.Lacunarity = 2;
if (args.Message == "") if (args.Message == "")
return new NoiseBrush(new[] { new ExtBlock(args.Type, args.ExtType), return new CloudyBrush(new[] { new ExtBlock(args.Type, args.ExtType),
new ExtBlock(Block.Zero, 0) }, n); new ExtBlock(Block.Zero, 0) }, n);
string[] parts = args.Message.Split(' '); string[] parts = args.Message.Split(' ');
@ -67,7 +67,7 @@ namespace MCGalaxy.Drawing.Brushes {
if (toAffect == null) return null; if (toAffect == null) return null;
ExtBlock[] blocks = Combine(toAffect, count); ExtBlock[] blocks = Combine(toAffect, count);
return new NoiseBrush(blocks, n); return new CloudyBrush(blocks, n);
} }
// We want to handle non block options. // We want to handle non block options.
@ -105,6 +105,11 @@ namespace MCGalaxy.Drawing.Brushes {
return false; return false;
} }
public override void Configure(DrawOp op, Player p) {
Player.Message(p, "Calculating noise distribution...");
Player.Message(p, "Finished calculating, now drawing.");
}
int next; int next;
public override byte NextBlock(DrawOp op) { public override byte NextBlock(DrawOp op) {
float N = noise.NormalisedNoise(op.Coords.X, op.Coords.Y, op.Coords.Z); float N = noise.NormalisedNoise(op.Coords.X, op.Coords.Y, op.Coords.Z);

View File

@ -116,6 +116,8 @@ namespace MCGalaxy.Drawing.Ops {
entry.Start = Server.StartTime.AddTicks(timeDelta * TimeSpan.TicksPerSecond); entry.Start = Server.StartTime.AddTicks(timeDelta * TimeSpan.TicksPerSecond);
bool needReveal = item.Op.DetermineDrawOpMethod(item.Level, item.Affected); bool needReveal = item.Op.DetermineDrawOpMethod(item.Level, item.Affected);
if (item.Brush != null)
item.Brush.Configure(item.Op, p);
item.Op.Perform(item.Marks, p, item.Level, item.Brush); item.Op.Perform(item.Marks, p, item.Level, item.Brush);
timeDelta = (int)DateTime.UtcNow.Subtract(Server.StartTime).TotalSeconds; timeDelta = (int)DateTime.UtcNow.Subtract(Server.StartTime).TotalSeconds;
entry.End = Server.StartTime.AddTicks(timeDelta * TimeSpan.TicksPerSecond); entry.End = Server.StartTime.AddTicks(timeDelta * TimeSpan.TicksPerSecond);

View File

@ -432,7 +432,7 @@
<Compile Include="Drawing\Brushes\Brush.cs" /> <Compile Include="Drawing\Brushes\Brush.cs" />
<Compile Include="Drawing\Brushes\CheckeredBrush.cs" /> <Compile Include="Drawing\Brushes\CheckeredBrush.cs" />
<Compile Include="Drawing\Brushes\FrequencyBrush.cs" /> <Compile Include="Drawing\Brushes\FrequencyBrush.cs" />
<Compile Include="Drawing\Brushes\NoiseBrush.cs" /> <Compile Include="Drawing\Brushes\CloudyBrush.cs" />
<Compile Include="Drawing\Brushes\PasteBrush.cs" /> <Compile Include="Drawing\Brushes\PasteBrush.cs" />
<Compile Include="Drawing\Brushes\RainbowBrush.cs" /> <Compile Include="Drawing\Brushes\RainbowBrush.cs" />
<Compile Include="Drawing\Brushes\RandomBrush.cs" /> <Compile Include="Drawing\Brushes\RandomBrush.cs" />