Jump to content

[Snippet] Smart Painter


Recommended Posts

Posted (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 tongue.png).

 

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 happy.png

 

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 by josedpay

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...