Package world

Source Code of world.EntityManager

package world;


import java.util.HashMap;
import java.util.Observable;
import java.util.Observer;

import datatypes.Coordinate;

import packets.SPacket;
import packets.s2cpackets.S0x05;
import packets.s2cpackets.S0x12;
import packets.s2cpackets.S0x1D;
import packets.s2cpackets.S0x21;
import packets.s2cpackets.S0x28;

import entities.Entity;
import entities.EntityEvent;
import entities.Player;

public final class EntityManager extends WorldStateMonitor implements Observer {

  public EntityManager(WorldState state) {
    super(state);
  }




  private int entitiescounter = 0;
  private HashMap<Integer, Entity> entities =  new HashMap<Integer, Entity>();
 
  private int neweid() {
    int newid = entitiescounter;
    entitiescounter ++;
    return newid;
  }
 
  public Player getNewPlayer(String playername) {
    int neweid = neweid();
    Player newPlayer = new Player(neweid, playername);
    entities.put(neweid, newPlayer);

    newPlayer.addObserver(this);

    return newPlayer;
  }
 
 
  /**
   * To be called when an entity has to be unloaded
   */
  public void removeEntity(Entity entity) {
    if(entities.containsKey(entity.geteid())) {
      entities.remove(entity.geteid());
      SPacket p = new S0x1D(entity);
      getWorldState().connectionManager().sendPacketToAll(p);
    }
   
  }
 
 
 
 

  @Override
  public void update(Observable object, Object notification) {
   
    Entity entity = (Entity) object;
    EntityEvent event = (EntityEvent) notification;
   
    if(event == EntityEvent.LOCATIONUPDATED) {
      //inform all players of the locationchange
      informEntitymovement(entity);
     
    } else if(event == EntityEvent.ANIMATIONCHANGED) {
      informEntityAnimation(entity);
     
    } else if(event == EntityEvent.ENTITYACTION) {
      informEntityMetadata(entity);
     
    } else if(event == EntityEvent.SELECTEDITEMCHANGED) {
      informEntityChangedItem(entity);
     
    } else {
      System.out.println("TODO: Unknown entity update: "+notification.toString());
    }
   
  }
 
 
 
  private void informEntityAnimation(Entity entity) {
    SPacket p = new S0x12(entity);
    getWorldState().connectionManager().sendPacketToAllOthers(p, entity);
  }
 
 
  private void informEntityMetadata(Entity entity) {
    System.out.println("GOING TO SEND ENTITYMETADATA");
    SPacket p = new S0x28(entity);   
    System.out.println("INFORMING OTHERS!");
    getWorldState().connectionManager().sendPacketToAll(p);
  }
 
 
 
  private void informEntitymovement(Entity entity) {
    Coordinate oldLocation = entity.getLastLocation();
    Coordinate newLocation = entity.getLocation().toAbsCoordinate();
   
    int dX = newLocation.x - oldLocation.x;
    int dY = newLocation.y - oldLocation.y;
    int dZ = newLocation.z - oldLocation.z;
   
    //relative movement
    SPacket p = new S0x21(entity, (byte) dX, (byte) dY, (byte) dZ);

   
   
//    SPacket p = new SPacket(0x22);
//    p.addInt(entity.geteid());
//    p.addInt((int) newLocation.x);
//    p.addInt((int) newLocation.y);
//    p.addInt((int) newLocation.z);
//    p.add((byte) entity.getYaw());
//    p.add((byte) entity.getPitch());
//   
   
    getWorldState().connectionManager().sendPacketToAllOthers(p, entity);

  }
 
 
 
 
 
 
 
 
  /**
   * TODO: PLAYERMANAGER ???
   */
  public void informEntityChangedItem(Entity entity) {
    SPacket p = new S0x05((Player) entity);
    getWorldState().connectionManager().sendPacketToAllOthers(p, entity);
   
  }
}
TOP

Related Classes of world.EntityManager

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.