public override float Apply(PaintLayer layer, Color color, byte glow, PaintBrushSize brushSize, float pressurePercent, int randSeed, int worldX, int worldY) { var mymod = BetterPaintMod.Instance; int iterRange = (int)((brushSize == PaintBrushSize.Small ? 1 : 3) * mymod.Config.BrushSizeMultiplier); float radius = (brushSize == PaintBrushSize.Small ? 0.5f : 3f) * mymod.Config.BrushSizeMultiplier; int tileX = worldX / 16; int tileY = worldY / 16; float uses = 0; for (int i = -iterRange; i <= iterRange; i++) { for (int j = -iterRange; j <= iterRange; j++) { float dist = (float)Math.Sqrt((double)((i * i) + (j * j))); if (dist > radius) { continue; } uses += this.PaintAt(layer, color, glow, pressurePercent, (ushort)(tileX + i), (ushort)(tileY + j)); } } return(uses); }
internal float ApplyColorAtNoSync(BetterPaintMod mymod, PaintLayerType layer, PaintBrushType brushType, Color color, byte glow, PaintBrushSize brushSize, float pressurePrecent, int randSeed, int worldX, int worldY) { if (Main.netMode == 2) { throw new ModHelpersException("No server."); } PaintBrush brush = mymod.Modes[brushType]; float paintsUsed = 0f; switch (layer) { case PaintLayerType.Background: paintsUsed += brush.Apply(this.Background, color, glow, brushSize, pressurePrecent, randSeed, worldX, worldY); break; case PaintLayerType.Foreground: paintsUsed += brush.Apply(this.Foreground, color, glow, brushSize, pressurePrecent, randSeed, worldX, worldY); break; case PaintLayerType.Anyground: paintsUsed += brush.Apply(this.Background, color, glow, brushSize, pressurePrecent, randSeed, worldX, worldY); paintsUsed += brush.Apply(this.Foreground, color, glow, brushSize, pressurePrecent, randSeed, worldX, worldY); break; default: throw new ModHelpersException("Not implemented."); } return(paintsUsed); }
public override float Apply(PaintLayer layer, Color _, byte __, PaintBrushSize brushSize, float pressurePercent, int randSeed, int worldX, int worldY) { var mymod = BetterPaintMod.Instance; int diameter = brushSize == PaintBrushSize.Small ? 1 : 6; diameter = (int)((float)diameter * mymod.Config.BrushSizeMultiplier); int iterRange = Math.Max(1, diameter / 2); float radius = (float)diameter / 2f; int tileX = worldX / 16; int tileY = worldY / 16; for (int i = -iterRange; i <= iterRange; i++) { for (int j = -iterRange; j <= iterRange; j++) { float dist = (float)Math.Sqrt((double)((i * i) + (j * j))); if (dist > radius) { continue; } this.EraseAt(layer, pressurePercent, (ushort)(tileX + i), (ushort)(tileY + j)); } } return(0); }
private PaintStrokeProtocol(PaintLayerType layer, PaintBrushType brushType, Color color, byte glow, PaintBrushSize brushSize, float pressurePercent, int randSeed, int worldX, int worldY) { this.Layer = (int)layer; this.BrushType = (int)brushType; this.MyColor = color; this.Glow = glow; this.BrushSize = (int)brushSize; this.PressurePercent = pressurePercent; this.WorldX = worldX; this.WorldY = worldY; }
public static void SyncToAll(PaintLayerType layer, PaintBrushType brushType, Color color, byte glow, PaintBrushSize brushSize, float pressurePercent, int randSeed, int worldX, int worldY) { if (Main.netMode != 1) { throw new ModHelpersException("Not client"); } var protocol = new PaintStrokeProtocol(layer, brushType, color, glow, brushSize, pressurePercent, randSeed, worldX, worldY); protocol.SendToServer(true); }
//////////////// public float ApplyColorAt(BetterPaintMod mymod, PaintLayerType layer, PaintBrushType brushType, Color color, byte glow, PaintBrushSize brushSize, float pressurePrecent, int worldX, int worldY) { if (Main.netMode == 2) { throw new ModHelpersException("No server."); } int randSeed = DateTime.Now.Millisecond; float paintsUsed = this.ApplyColorAtNoSync(mymod, layer, brushType, color, glow, brushSize, pressurePrecent, randSeed, worldX, worldY); if (Main.netMode == 1) { PaintStrokeProtocol.SyncToAll(layer, brushType, color, glow, brushSize, pressurePrecent, randSeed, worldX, worldY); } return(paintsUsed); }
public override float Apply(PaintLayer layer, Color color, byte glow, PaintBrushSize brushSize, float pressurePercent, int randSeed, int worldX, int worldY) { var mymod = BetterPaintMod.Instance; int diameter = brushSize == PaintBrushSize.Small ? 3 : 8; diameter = (int)((float)diameter * mymod.Config.BrushSizeMultiplier); int iterRange = diameter / 2; float maxRange = (float)diameter / 2f; float uses = 0; int tileX = worldX / 16; int tileY = worldY / 16; double tileOffsetX = (double)(worldX % 16) / 16f; double tileOffsetY = (double)(worldY % 16) / 16f; for (int i = -iterRange; i <= iterRange; i++) { for (int j = -iterRange; j <= iterRange; j++) { double iOff = i + tileOffsetX; double jOff = j + tileOffsetY; float dist = (float)Math.Sqrt((iOff * iOff) + (jOff * jOff)); if (dist > maxRange) { continue; } ushort x = (ushort)(tileX + i); ushort y = (ushort)(tileY + j); uses += this.PaintAt(layer, color, glow, pressurePercent, maxRange, dist, x, y); } } return(uses); }
public override float Apply(PaintLayer layer, Color color, byte glow, PaintBrushSize brushSize, float pressurePercent, int randSeed, int worldX, int worldY) { var mymod = BetterPaintMod.Instance; var rand = new Random(randSeed); int tileX = worldX / 16; int tileY = worldY / 16; float uses = 0; int diameter = brushSize == PaintBrushSize.Small ? 3 : 6; diameter = (int)((float)diameter * mymod.Config.BrushSizeMultiplier); int spats = (int)((float)(diameter * diameter) * mymod.Config.BrushSpatterDensity); int minRadius = Math.Max(1, diameter / 3); int extendedRadiusRange = diameter - minRadius; for (int i = 0; i < spats; i++) { int extendedRadius = rand.Next(extendedRadiusRange); int radius = minRadius + extendedRadius; int xOff = rand.Next(-radius, radius); radius = minRadius + extendedRadius; int yOff = rand.Next(-radius, radius); float randPercent = pressurePercent * (1f - (float)rand.NextDouble()); if (randPercent >= 0.01f) { uses += this.PaintAt(layer, color, glow, randPercent, (ushort)(tileX + xOff), (ushort)(tileY + yOff)); } } return(uses); }
//////////////// public abstract float Apply(PaintLayer layer, Color color, byte glow, PaintBrushSize brushSize, float pressurePercent, int randSeed, int worldX, int worldY);