Package entities

Source Code of entities.Entity

package entities;

import java.util.Observable;

import datatypes.Coordinate;
import datatypes.CoordinatePrecise;
import datatypes.MCAction;
import datatypes.MCAnimation;


@SuppressWarnings("unused") //TODO: Remove when all meta-data is implemented
public abstract class Entity extends Observable {
  protected int eid;
 
 
  private Coordinate lastlocation;
  private CoordinatePrecise location;
 
  private float yaw = 0;
  private float pitch = 0;
 
  private MCAnimation anim = MCAnimation.NONE;
 
 
 
  /*
   * Common Metadata
   */
  private boolean onFire = false;
  private boolean crouching = false;
  private boolean riding = false;
  private boolean sprinting = false;
  private boolean doingItemAction = false;
 
  private short drowningcounter = 300;
  private int potioneffects = 0; // color of bubbling effectings around the player = 4 bit nibbles?

 
  //TODO: Move to animals
  //private int babycounter = 0;
 
 
 
  public Entity(int eid) {
    this.eid = eid;
    System.out.println("Setting eid: "+eid);
   
    this.location = new CoordinatePrecise(5550, 34, 5550);
    this.lastlocation = location.toAbsCoordinate();
  }
 
  public int geteid() {
    return eid;
  }
 
  protected void updateMe(EntityEvent event) {
    setChanged();
    notifyObservers(event);
  }
 
 
 
  /****
   * Entity animation
   */
  public void setAnimation(MCAnimation animation) {
    this.anim = animation;
    updateMe(EntityEvent.ANIMATIONCHANGED);
    this.anim = MCAnimation.NONE;
  }

 
 
  /*****
   * Entity action
   */
  public void setAction(MCAction action) {

    if(action == MCAction.STARTSPRINT) {
      this.sprinting = true;
    } else if(action == MCAction.STOPSPRINT) {
      this.sprinting = false;
    } else if(action == MCAction.CROUCH) {
      this.crouching = true;
    } else if(action == MCAction.UNCROUCH) {
      this.crouching = false;
    } else if(action == MCAction.LEAVEBED) {
      //TODO
      System.out.println("TODO: Leavebed implementation.");
    }
       
    updateMe(EntityEvent.ENTITYACTION);

  }
 
 
  /******
   * Entity Location
   */
  public void setLocation(double x, double y, double z) {
    location = new CoordinatePrecise(x, y, z);
  }
 
  public CoordinatePrecise getLocation() {
    return location;
  }
 
  /**
   * Return the last location sent to all clients.
   * I.e. This is the location all clients are aware of since last movement update.
   * @return
   */
  public Coordinate getLastLocation() {
    return lastlocation;
  }
 
  /**
   * The current players location.
   * @return
   */
  public CoordinatePrecise location() {
    return location;
  }
 
  /**
   * To be called when the location of a player/entity has been changed
   * in such a way that other players/entities need to be informed.
   *
   * After calling this method, it is assumed that all clients know the
   * new location.
   */
  public synchronized void updateLocation() {
    updateMe(EntityEvent.LOCATIONUPDATED);
    lastlocation = location.toAbsCoordinate();
  }
 
 
 
  /**
   * Set the entities pitch.
   * @param pitch
   */
  public void setPitch(float pitch) {
    this.pitch = pitch;
  }
 
  /**
   * Sets the entities yaw.
   * @param yaw
   */
  public void setYaw(float yaw) {
    this.yaw = yaw;
  }
 
 
  public float getPitch() {
    return pitch;
  }
 
  public float getYaw() {
    return yaw;
  }
 

  public MCAnimation getAnimation() {
    return anim;
  }
 
 
  public byte[] getMetaDataBytes() {
    byte infobyte = (byte) (0x01 & (this.onFire?1:0));   
    infobyte += (0x02 & (this.crouching?0x02:0));
    infobyte += (0x04 & (this.riding?0x04:0));
    infobyte += (0x08 & (this.sprinting?0x08:0));
    infobyte += (0x10 & (this.doingItemAction?0x10:0));
   
    byte[] metadata = new byte[2];
    metadata[0] = 0;          //byte & infoblock-id 0
    metadata[1] = infobyte;
   
    //TODO: Support drowning      byte[0] = 0x01 << 5 + 0x01  //short & infoblock-id 1
    //TODO: Support Potion Effects    byte[0] = 0x02 << 5 + 0x01  //int   & infoblock-id 8
   
    return metadata;
  }
 
 
    /**
     * Returns a hashcode for the Entity. Since each entity should
     * have a unique ID, we will just emit this ID as hashcode.
     */
    @Override
  public int hashCode() {
      return eid;
    }
   
   
    /**
     * When an entity has the same eid, consider it to be equal.
     * (This corresponds to the hashCode method implementation.)
     */
    public boolean equals(Object other) {
      if(other instanceof Entity && ((Entity) other).geteid() ==  this.geteid()) {
        return true;
      } else {
        return false;
      }
    }
 
 
}
TOP

Related Classes of entities.Entity

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.