Joseph Posted May 26, 2015 Posted May 26, 2015 (edited) Hey everybody! Here another snippet from your truly Josedpay. Some time i get lazy having to create paint. Many of you guys probably use that little programs (forget name). i use to use it back in the days, but franky its still too much work. So i created this paint. Have fun everybody(for those who are wondering about that "null" sign. I cant spoon feed everybody, im making it even smarter ). FYI some of the oldest people from OSB contributed on this painter. I use some of their idea/work but revamped it. Hopefully someone in the future could do the same edit: just a head up it comment all over the class LocalPaint.java //the interface is a nested static package com.divine.painter; import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics2D; import java.awt.Rectangle; import java.awt.Shape; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.Collections; import java.util.Set; import org.osbot.rs07.Bot; import org.osbot.rs07.canvas.paint.Painter; import org.osbot.rs07.script.Script; public class LocalPaint extends MouseAdapter implements Painter { private final static String[] SUFFIX = new String[] { "", "K", "M", "B", "T" }; private final Font title = new Font("Tahoma", Font.PLAIN, 17); private final Font stats = new Font("Tahoma", Font.PLAIN, 14); private Color backgroundColor = new Color(0,0,0,.5f); //transparent black private Color extraColor = new Color(0,.8f,0,0.7f); //transparent green private Color textColor = Color.WHITE; // a null color /** * The node that does all you dirty work */ private final LocalPaintHandler localHandler; private Shape shape; private Script ctx; public LocalPaint(Shape shape, LocalPaintHandler handler) { this.shape = shape; this.localHandler = handler; } @Override public void onPaint(Graphics2D g) { drawExtraShapes(g); drawBackground(g); drawText(g); } @Override public void mouseClicked(MouseEvent e) { //passes down both the shape and mouse event //you get to handler the interaction if (localHandler != null) { Shape shape = null; localHandler.handleExtras(e, shape); } } /** * @param true to add and false to remove */ public void enableMouser(boolean add) { Bot bot = ctx.getBot(); if (!add && bot.getMouseListeners().contains(this)) { bot.removeMouseListener(this); } if (add && !bot.getMouseListeners().contains(this)) { bot.addMouseListener(this); } } /** * @param true to add and false to remove */ public void enablePainter(boolean add) { Bot bot = ctx.getBot(); if (!add && bot.getPainters().contains(this)) { bot.removePainter(this); } if (add && !bot.getPainters().contains(this)) { bot.addPainter(this); } } /* * Paint stuff */ private void drawText(Graphics2D g) { FontMetrics fm = g.getFontMetrics(title); //find header boolean addFancy = this.ctx != null; int wName = fm.stringWidth(ctx.getName()) + fm.stringWidth(Double.toString(ctx.getVersion())); //find rec Rectangle rec = shape.getBounds(); int x = rec.x; int y = rec.y; int w = rec.width; //set header g.setColor(textColor); g.setFont(title); if (addFancy) { g.drawString(ctx.getName() +" v" +Double.toString(ctx.getVersion()), x + (w / 2) + 5 - ((wName / 2)), y + 25); g.drawLine(x + 15, y + 30, x + (w - 15), y + 30); } //set data g.setFont(stats); if (localHandler != null && localHandler.getPaintData() != null) { for (int i = 0; i < localHandler.getPaintData().length; i++) { PaintProperty p = localHandler.getPaintData()[i]; g.drawString(p.getValue(), x + 15 + p.getOffset(), y + 45 + (i * 20)); } } } private void drawBackground(Graphics2D g) { g.setColor(backgroundColor); g.fill(shape); //g.draw(shape); //You get to switch between fill or draw //unfinished boolean drawSkill = false; if (drawSkill) { g.fill(shape); } //draw Outline g.setColor(Color.WHITE); g.draw(shape); } /* * Local instances Setter Methods */ public LocalPaint setScriptInstance(Script ctx) { this.ctx = ctx; return this; } public LocalPaint setBackgroundColor(Color color) { this.backgroundColor = color; return this; } public LocalPaint setTextColor(Color color) { this.textColor = color; return this; } public LocalPaint setExtraColor(Color color) { this.extraColor = color; return this; } /* * Static interface (is needed) */ public static interface LocalPaintHandler { public void handleExtras(MouseEvent e, Shape shape); public PaintProperty[] getPaintData(); } public static String getFormatTimer(long time) { final int sec = (int) (time / 1000), h = sec / 3600, m = sec / 60 % 60, s = sec % 60; return (h < 10 ? "0" + h : h) + ":" + (m < 10 ? "0" + m : m) + ":" + (s < 10 ? "0" + s : s); } public static String rsFormat(long value) { int size = (int) Math.log10(Math.max(1, value)); return Math.floor(value / Math.pow(10, size - size % 3) * 10) / 10d + SUFFIX[size / 3]; } public static Color getTransparent(Color c, int amount0to255) { return new Color(c.getRed(), c.getGreen(), c.getBlue(), amount0to255); } } PaintProperty.java public class PaintProperty { private String value; private int offset; public PaintProperty(String value, int offset) { this.value = value; this.offset = offset; } public PaintProperty(String value) { this(value, 0); } public PaintProperty() { this(""); } public PaintProperty value(String value) { this.value = value; return this; } public PaintProperty offset(int offset) { this.offset = offset; return this; } public String getValue() { return this.value; } public int getOffset() { return this.offset; } } exmaple: import java.awt.Shape; import java.awt.event.MouseEvent; import org.osbot.rs07.script.Script; import org.osbot.rs07.script.ScriptManifest; import com.divine.painter.LocalPaint.LocalPaintHandler; @ScriptManifest public class TestScript extends Script implements LocalPaintHandler { Shape myShape = null; //set the location to see the magic LocalPaint localPaint; @Override public void handleExtras(MouseEvent e, Shape shape) {} @Override public PaintProperty[] getPaintData() { //LocalPaint.rsFormat(long) return new PaintProperty[] { //LocalPaint.getFormatTimer(long) new PaintProperty("do you even like it?"), new PaintProperty("just let me know", 15), //the offset move the text over + 15 }; } @Override public int onLoop() throws InterruptedException { if (localPaint == null) { this.localPaint = new LocalPaint(null, this).setScriptInstance(this); this.localPaint.enablePainter(true); } return 700; } } Edited May 26, 2015 by josedpay
Joseph Posted May 29, 2015 Author Posted May 29, 2015 (edited) dam no feedback Edited May 29, 2015 by josedpay
The_Red_Flag Posted June 3, 2015 Posted June 3, 2015 Ha, I'm just starting to think about learning java, but at least the code looks pretty 1