Package org.rsbot.script.wrappers

Source Code of org.rsbot.script.wrappers.RSGroundItem

package org.rsbot.script.wrappers;

import org.rsbot.client.RSGroundEntity;
import org.rsbot.client.RSGroundObject;
import org.rsbot.script.methods.MethodContext;
import org.rsbot.script.methods.MethodProvider;
import org.rsbot.script.methods.Objects;

import java.awt.*;

/**
* Represents an item on a tile.
*/
public class RSGroundItem extends MethodProvider implements RSTarget {
  private final RSItem groundItem;
  private final RSTile location;

  public RSGroundItem(final MethodContext ctx, final RSTile location, final RSItem groundItem) {
    super(ctx);
    this.location = location;
    this.groundItem = groundItem;
  }

  /**
   * Gets the top model on the tile of this ground item.
   *
   * @return The top model on the tile of this ground item.
   */
  public RSModel getModel() {
    final int x = location.getX() - methods.game.getBaseX();
    final int y = location.getY() - methods.game.getBaseY();
    final int plane = methods.client.getPlane();
    final org.rsbot.client.RSGround rsGround = methods.client.getRSGroundArray()[plane][x][y];

    if (rsGround != null) {
      final RSGroundEntity obj = rsGround.getGroundObject();
      if (obj != null) {
        final org.rsbot.client.Model model = ((RSGroundObject) obj).getModel();
        if (model != null) {
          return new RSGroundItemModel(methods, model, obj, this);
        }
      }
    }
    return null;
  }

  /**
   * Performs the given action on this RSGroundItem.
   *
   * @param action The menu action to click.
   * @return <tt>true</tt> if the action was clicked; otherwise <tt>false</tt>.
   */
  public boolean interact(final String action) {
    return interact(action, null);
  }

  /**
   * Performs the given action on this RSGroundItem.
   *
   * @param action The menu action to click.
   * @param option The option of the menu action to click.
   * @return <tt>true</tt> if the action was clicked; otherwise <tt>false</tt>.
   */
  public boolean interact(final String action, final String option) {
    final RSModel model = getModel();
    if (model != null) {
      return model.interact(action, option);
    }
    return methods.tiles.interact(getLocation(), random(0.45, 0.55), random(0.45, 0.55), getHeight(),
        action, option);
  }

  public RSItem getItem() {
    return groundItem;
  }

  public RSTile getLocation() {
    return location;
  }

  public boolean isOnScreen() {
    final RSModel model = getModel();
    if (model == null) {
      return methods.calc.tileOnScreen(location);
    } else {
      return methods.calc.pointOnScreen(model.getPoint());
    }
  }

  public Point getPoint() {
    RSModel model = getModel();
    if (model != null) {
      return model.getPoint();
    }
    return methods.calc.tileToScreen(getLocation(), getHeight());
  }

  /**
   * @return the height of the object this item is on or 0 if on ground.
   */
  public int getHeight() {
    RSObject object = methods.objects.getTopAt(location, Objects.TYPE_INTERACTABLE);
    RSModel object_model;
    if (object != null && (object_model = object.getModel()) != null) {
      return object_model.getHeight();
    }
    return 0;
  }

  public boolean contains(int x, int y) {
    RSModel model = getModel();
    if (model != null) {
      return model.contains(x, y);
    }
    return methods.calc.tileToScreen(getLocation(), getHeight()).distance(x, y) < random(4, 9);
  }
}
TOP

Related Classes of org.rsbot.script.wrappers.RSGroundItem

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.