Package org.moparscape.msc.gs.model

Source Code of org.moparscape.msc.gs.model.Mob

package org.moparscape.msc.gs.model;

import org.moparscape.msc.gs.Instance;
import org.moparscape.msc.gs.core.GameEngine;
import org.moparscape.msc.gs.event.DelayedEvent;
import org.moparscape.msc.gs.event.DuelEvent;
import org.moparscape.msc.gs.event.FightEvent;
import org.moparscape.msc.gs.states.Action;
import org.moparscape.msc.gs.states.CombatState;
import org.moparscape.msc.gs.util.Logger;

public abstract class Mob extends Entity {

  /**
   * Prayers that are currently turned on
   */
  protected boolean[] activatedPrayers = new boolean[14];
  /**
   * ID for our current appearance, used client side to detect changed
   */
  private int appearanceID = 0;
  /**
   * Used to block new requests when we are in the middle of one
   */
  private boolean busy = false;
  /**
   * Our combat level
   */
  private int combatLevel = 3;
  /**
   * Timer used to track start and end of combat
   */
  private long combatTimer = 0;
  /**
   * Who they are in combat with
   */
  private Mob combatWith = null;
  /**
   * Have we moved since last update?
   */
  private boolean hasMoved;
  /**
   * How many times we have hit our opponent
   */
  private int hitsMade = 0;
  /**
   * The end state of the last combat encounter
   */
  private CombatState lastCombatState = CombatState.WAITING;
  /**
   * Amount of damage last dealt to the player
   */
  private int lastDamage = 0;
  /**
   * Time of last movement, used for timeout
   */
  protected long lastMovement = GameEngine.getTime();
  public long lastTimeShot = GameEngine.getTime();
  private int mobSprite = 1;
  private int[][] mobSprites = new int[][] { { 3, 2, 1 }, { 4, -1, 0 },
      { 5, 6, 7 } };
  /**
   * Has our appearance changed since last update?
   */
  protected boolean ourAppearanceChanged = true;
  /**
   * The path we are walking
   */
  public PathHandler pathHandler = new PathHandler(this);
  /**
   * Set when the mob has been destroyed to alert players
   */
  protected boolean removed = false;
  /**
   * Has the sprite changed?
   */
  private boolean spriteChanged = false;
  /**
   * Tiles around us that we can see
   */
  protected ViewArea viewArea = new ViewArea(this);
  /**
   * If we are warned to move
   */
  private boolean warnedToMove = false;

  public final boolean atObject(GameObject o) {
    int dir = o.getDirection();
    int width, height;
    if (o.getType() == 1) {
      width = height = 1;
    } else if (dir == 0 || dir == 4) {
      width = o.getGameObjectDef().getWidth();
      height = o.getGameObjectDef().getHeight();
    } else {
      height = o.getGameObjectDef().getWidth();
      width = o.getGameObjectDef().getHeight();
    }
    for (int x = 0; x < width; x++) {
      for (int y = 0; y < height; y++) {
        Point p = Point.location(o.getX() + x, o.getY() + y);
        int xDist = Math.abs(location.getX() - p.getX());
        int yDist = Math.abs(location.getY() - p.getY());
        int tDist = xDist + yDist;
        if (tDist <= 1) {
          return true;
        }
      }
    }
    return false;
  }

  public boolean finishedPath() {
    return pathHandler.finishedPath();
  }

  public int getAppearanceID() {
    return appearanceID;
  }

  public abstract int getArmourPoints();

  public abstract int getAttack();

  public int getCombatLevel() {
    return combatLevel;
  }

  public CombatState getCombatState() {
    return lastCombatState;
  }

  public abstract int getCombatStyle();

  public long getCombatTimer() {
    return combatTimer;
  }

  public abstract int getDefense();

  public abstract int getHits();

  public int getHitsMade() {
    return hitsMade;
  }

  public int getLastDamage() {
    return lastDamage;
  }

  public long getLastMoved() {
    return lastMovement;
  }

  public Mob getOpponent() {
    return combatWith;
  }

  public int getSprite() {
    return mobSprite;
  }

  public abstract int getStrength();

  public ViewArea getViewArea() {
    return viewArea;
  }

  public abstract int getWeaponAimPoints();

  public abstract int getWeaponPowerPoints();

  public boolean hasMoved() {
    return hasMoved;
  }

  public void incHitsMade() {
    hitsMade++;
  }

  public boolean inCombat() {
    return (mobSprite == 8 || mobSprite == 9) && combatWith != null;
  }

  public boolean isBusy() {
    return busy;
  }

  public boolean isPrayerActivated(int pID) {
    return activatedPrayers[pID];
  }

  public boolean isRemoved() {
    return removed;
  }

  public abstract void killedBy(Mob mob, boolean stake);

  public abstract void remove();

  public void resetCombat(CombatState state) {
    for (DelayedEvent event : Instance.getDelayedEventHandler().getEvents()) {
      if (event instanceof FightEvent) {
        FightEvent fighting = (FightEvent) event;
        if (fighting.getOwner().equals(this)
            || fighting.getAffectedMob().equals(this)) {
          fighting.stop();
          break;
        }
      } else if (event instanceof DuelEvent) {
        DuelEvent dueling = (DuelEvent) event;
        if (dueling.getOwner().equals(this)
            || dueling.getAffectedPlayer().equals(this)) {
          dueling.stop();
          break;
        }
      }
    }
    setBusy(false);
    setSprite(4);
    setOpponent(null);
    setCombatTimer();
    hitsMade = 0;
    if (this instanceof Player) {
      Player player = (Player) this;
      player.setStatus(Action.IDLE);
    }
    lastCombatState = state;
  }

  public void resetMoved() {
    hasMoved = false;
  }

  public void resetPath() {
    pathHandler.resetPath();

  }

  public void resetSpriteChanged() {
    spriteChanged = false;
  }

  public void setAppearnceChanged(boolean b) {
    ourAppearanceChanged = b;
  }

  public void setBusy(boolean busy) {
    this.busy = busy;
  }

  public void setCombatLevel(int level) {
    combatLevel = level;
    ourAppearanceChanged = true;
  }

  public void setCombatTimer() {
    combatTimer = GameEngine.getTime();
  }

  public abstract void setHits(int lvl);

  public void setLastDamage(int d) {
    lastDamage = d;
  }

  public void setLastMoved() {
    lastMovement = GameEngine.getTime();
  }

  public void setLocation(Point p) {
    setLocation(p, false);
  }

  public void setLocation(Point p, boolean teleported) {
    if (!teleported) {
      updateSprite(p);
      hasMoved = true;
    }
    setLastMoved();
    warnedToMove = false;
    super.setLocation(p);
  }

  public void setOpponent(Mob opponent) {
    combatWith = opponent;
  }

  public void setPath(Path path) {
    pathHandler.setPath(path);
  }

  public void setPrayer(int pID, boolean b) {
    activatedPrayers[pID] = b;
  }

  public void setSprite(int x) {
    spriteChanged = true;
    mobSprite = x;
  }

  public boolean spriteChanged() {
    return spriteChanged;
  }

  public void updateAppearanceID() {
    if (ourAppearanceChanged) {
      appearanceID++;
    }
  }

  public void updatePosition() {
    pathHandler.updatePosition();
  }

  private void updateSprite(Point newLocation) {
    try {
      int xIndex = getLocation().getX() - newLocation.getX() + 1;
      int yIndex = getLocation().getY() - newLocation.getY() + 1;
      setSprite(mobSprites[xIndex][yIndex]);
    } catch (Exception e) {
      Logger.error(e.getMessage());
    }
  }

  public boolean warnedToMove() {
    return warnedToMove;
  }

  public void warnToMove() {
    warnedToMove = true;
  }
}
TOP

Related Classes of org.moparscape.msc.gs.model.Mob

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.