/* Copyright 2012 Jan Ove Saltvedt This file is part of KBot. KBot is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. KBot is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with KBot. If not, see <http://www.gnu.org/licenses/>. */ /* * Copyright � 2010 Jan Ove Saltvedt. * All rights reserved. */ package com.kbot2.scriptable.methods.wrappers; import com.kbot2.bot.BotEnvironment; import com.kbotpro.scriptsystem.wrappers.IComponent; import org.apache.commons.lang.builder.ReflectionToStringBuilder; import org.apache.commons.lang.builder.ToStringStyle; import java.awt.*; import java.util.*; import static com.kbot2.scriptable.methods.Calculations.random; /** * Created by IntelliJ IDEA. * User: Jan Ove Saltvedt * Date: Jan 15, 2010 * Time: 3:29:26 PM * To change this template use File | Settings | File Templates. */ public class Interface extends Wrapper { private IComponent inter; private Interface parrentInterface; private InterfaceGroup parrentInterfaceGroup; private int index; public Interface(BotEnvironment botEnv, IComponent iComponent, Interface parrentInterface, InterfaceGroup parrentInterfaceGroup) { super(botEnv); this.inter = iComponent; this.parrentInterface = parrentInterface; this.parrentInterfaceGroup = parrentInterfaceGroup; } /** * Gets a child interface. * * @param childID * @return may return null if interface does not exist. */ public Interface getChild(int childID) { IComponent[] children = inter.getChildren(); if(children == null) return null; if (childID < 0 || childID >= children.length) return null; return new Interface(botEnv, children[childID], this, parrentInterfaceGroup); } public int[] getItemIDArray() { Item[] items = getItems(); int[] out = new int[items.length]; for(int i = 0; i < items.length; i++){ out[i] = items[i].getID(); } return out; } public int[] getItemStackSizeArray() { Item[] items = getItems(); int[] out = new int[items.length]; for(int i = 0; i < items.length; i++){ out[i] = items[i].getStackSize(); } return out; } public Item[] getItems(){ com.kbotpro.scriptsystem.wrappers.Item[] items = botEnv.proBotEnvironment.inventory.getItems(); Item[] out = new Item[items.length]; for(int i = 0; i < items.length; i++){ out[i] = new ExtendedItem(items[i]); } return out; } public boolean hasParrent() { return parrentInterface != null; } public Interface getParrent() { return parrentInterface; } public int getX() { return inter.getRelativeX(); } public int getY() { return inter.getRelativeY(); } public int getMasterX() { return inter.getAbsoluteX()-inter.getRelativeX(); } public int getMasterY() { return inter.getAbsoluteY()-inter.getRelativeY(); } public int getAbsoluteX() { return inter.getAbsoluteX(); } public int getAbsoluteY() { return inter.getAbsoluteY(); } public int getHeight() { return inter.getHeight(); } public int getWidth() { return inter.getWidth(); } public Rectangle getArea() { return new Rectangle(getAbsoluteX(), getAbsoluteY(), getWidth(), getHeight()); } public Point getCenter() { Rectangle area = getArea(); return new Point((int) area.getCenterX(), (int) area.getCenterY()); } /** * Hack for interface debugger. * * @param index */ public void setIndex(int index) { this.index = index; } /** * Hack for interface debugger. * * @return */ public String toString() { return "" + index; } public Interface[] getChildren() { if(inter != null) { java.util.List<Interface> out = new LinkedList<Interface>(); IComponent[] interfaces = inter.getChildren(); if (interfaces == null) return null; for (IComponent child : interfaces) { if (child == null) continue; out.add(new Interface(botEnv, child, this, parrentInterfaceGroup)); } return out.toArray(new Interface[1]); } return null; } public int getContainedItemID() { return inter.getElementID(); } public int getContainedItemStackSize() { return inter.getElementStackSize(); } public String getContainedItemName() { return inter.getElementName(); } public String[] getActions() { return inter.getActions(); } public String getText() { return inter.getText(); } public int getTextColor() { return inter.getTextColor(); } public int getTextureID() { return inter.getTextureID(); } public int getHorizontalScrollBarSize() { return -1; } public int getHorizontalScrollBarThumbPosition() { return -1; } public int getHorizontalScrollBarThumbSize() { return -1; } public int getVerticalScrollBarSize() { return -1; } public int getVerticalScrollBarThumbPosition() { return -1; } public int getVerticalScrollBarThumbSize() { return -1; } public boolean textContains(String text) { String s = getText(); return s != null && s.contains(text); } public boolean textContainsIgnoreCase(String text) { String s = getText(); return s != null && s.toLowerCase().contains(text.toLowerCase()); } public Point getRandomPointInside(){ Rectangle rect = getArea(); int randomX = random(rect.x, rect.x + rect.width); int randomY = random(rect.y, rect.y + rect.height); return new Point(randomX, randomY); } /** * Gets the model id of the interface. * @return -1 if null. */ public int getModelID(){ return inter.getModelID(); } /** * Gets the model type of the interface * @return -1 if null */ public int getModelType(){ return inter.getModelType(); } public void doClick() { Rectangle rect = getArea(); final Point mousePos = getMethods().getMousePos(); if(rect.contains(mousePos)){ int random = random(0, 5); if(random < 4){ botEnv.mouse.clickMouse(true); return; } else if(random == 4){ Point ranPoint = new Point(mousePos.x+random(-5, 5), mousePos.y+random(-5, 5)); if(rect.contains(ranPoint)){ botEnv.methods.clickMouse(ranPoint, true); return; } } } int randomX = random(rect.x, rect.x + rect.width); int randomY = random(rect.y, rect.y + rect.height); botEnv.methods.clickMouse(new Point(randomX, randomY), true); } public boolean doAction(String actionContains) { Rectangle rect = getArea(); int randomX = random(rect.x, rect.x + rect.width); int randomY = random(rect.y, rect.y + rect.height); botEnv.methods.moveMouse(new Point(randomX, randomY)); return botEnv.methods.atMenu(actionContains); } public boolean isValid(){ return inter.isValid(); } public String getReflectedFieldsString(){ return ReflectionToStringBuilder.reflectionToString(inter, ToStringStyle.MULTI_LINE_STYLE, true); } public Point getScreenPos() { return new Point(getAbsoluteX(), getAbsoluteY()); } }