Package src

Source Code of src.UnidadBasica

package src;
import com.gameloftProgrammersCup.client.ClientCommand;
import com.gameloftProgrammersCup.client.UnitStats;
import com.gameloftProgrammersCup.clientInterfaces.*;

import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
import src.estadisticas.*;
import src.*;
import src.estrategias.*;
import src.pathFinding.*;
public abstract class UnidadBasica /*extends ElementoMapa*/ implements BasicPJ,MapElement{
  /**
   * abarca todas las unidades de un equipo: base y m�viles
   */
  /*public static final int TIPO_COLECTOR=0;
  public static final int TIPO_FORTALEZA=1;
  public static final int TIPO_ATACANTE=2;
  public static final int TIPO_DEFENSOR=3;
  public static final int TIPO_EXPLORADOR=4;*/
 
 
 
 
  protected int actionRange;//hasta donde puede hacer su acci�n
  protected  int actionSpeed;//velocidad para realizar su acci�n, creo
  protected int life;//puntos de vida
  protected int movementSpeed; //velocidad, agregado por pup
  protected  Stack  attacks;//stack con da�os ocasionados por ataques
  protected Command command=null;
  protected int id;//identificacion unica
  protected Cliente jugador;
  protected int vision;//rango de visi�n de la unidad
  protected int tipoUnidad;//nuestro tipo privado de unidad
  protected int ultimoTurnoActualizado =0;//voy a tener que usar esto para ver si alguien muri�
  protected List <Point> wayPoints=null;
  public Point destino=null;
  public boolean peligrosidad=false;
  public boolean descubir=false;
  public boolean aRangoDeAccion=false;
  public List obstaculos=new ArrayList();
  public boolean favorecerDiagonalesImperfectas=false;
  //nuestros tipos de unidad:
  static public final int TIPO_COLECTORINICIAL = 0;
  static public final int TIPO_EXPLORADOR = 1;
  static public final int TIPO_GUARDIA = 2;
  static public final int TIPO_ASESINO = 3;
  static public final int TIPO_COLECTORNORMAL = 4;
  static public final int MAX_UNIDAD = TIPO_COLECTORNORMAL+1;
  //ya estoy haciendo cosas raras... otra vez
  public static Class [] clasesTiposUnidad   = {ColectorInicial.class,Explorador.class,Guardia.class,Asesino.class,ColectorNormal.class};

 
  protected Point position;
 
  /**
   * creator
   */
  public UnidadBasica(int actionRange,int actionSpeed ,int life, int movementSpeed, int id, Cliente jugador, int vision){
    this.actionRange = actionRange;
    this.actionSpeed = actionSpeed;
    this.movementSpeed = movementSpeed;
   
    this.life = life;
    this.id = id;
    this.jugador = jugador;
    this.vision = vision;
    attacks = new Stack();
   
  }
 
  /**
   * Devuelve un stack de ints con todos los ataques recibidos por la unidad
   * @author fernando
   * @version 0.1
   * @return stack con un int por cada ataque recibido que representa el da�o causado. el stack puede ser null
   * @see com.gameloftProgrammersCup.clientInterfaces.BasicPJ#getAttacked()
   */
  public Stack getAttacked(){
    return attacks;
  }
 
  /**
   * Devuelve el id del jugador due�o de la unidad
   * @return int que representa el id del jugador
   * @author fernando
   * @version 0.1
   * @see com.gameloftProgrammersCup.clientInterfaces.BasicPJ#getPlayerCharacterId()
   */
  public int getPlayerCharacterId(){
    return jugador.getId();
  }

  /**
   * @return the actionRange
   */
  public int getActionRange() {
    return actionRange;
  }

  /**
   * @param actionRange the actionRange to set
   */
  public void setActionRange(int actionRange) {
    this.actionRange = actionRange;
  }

  /**
   * @return the actionSpeed
   */
  public int getActionSpeed() {
    return actionSpeed;
  }

  /**
   * @param actionSpeed the actionSpeed to set
   */
  public void setActionSpeed(int actionSpeed) {
    this.actionSpeed = actionSpeed;
  }

  /**
   * @return the command
   */
  public Command getCommand() {
    return command;
  }

  /**
   * @param command the command to set
   */
  public void setCommand(Command command) {
    this.command = command;
  }

  /**
   * @return the id
   */
  public int getId() {
    return id;
  }

  /**
   * @param id the id to set
   */
  public void setId(int id) {
    this.id = id;
  }

  /**
   * @return the life
   */
  public int getLife() {
    return life;
  }

  /**
   * @param life the life to set
   */
  public void setLife(int life) {
    if (life < this.life)//recibi da�o
      Estadisticas.addEstadisticaAtaque(jugador.turno,position.getX(),position.getY(),this.life-life);
    this.life = life;
  }

  /**
   * @return the vision
   */
  public int getVision() {
    return vision;
  }

  /**
   * @param vision the vision to set
   */
  public void setVision(int vision) {
    this.vision = vision;
  }
 
 
 
  /**
   * actualiza la unidad con el da�o ocasionado, actualizando puntos de vida y cola de da�os
   *
   * @see com.gameloftProgrammersCup.clientInterfaces.BasicPJ#hurtUpdate()
   */

  public void hurtUpdate(){
   
  }

  /*public int getType() {
    return 0;
  }*/

  public void setType(int tipoUnidad) {
  //  this.tipoUnidad = tipoUnidad;
  }

  public int getMovementSpeed()
  {
    return movementSpeed;
  }

  public void setMovementSpeed(int movementSpeed)
  {
    this.movementSpeed = movementSpeed;
  }
 
  public Point getPosition()  {
    try{
      if(position.getX()<0)
        throw new Exception("coordenada x negativa en elemento");
      if(position.getY()<0)
        throw new Exception("coordenada y negativa en elemento");
    return new Point(position.getX(),position.getY());
    }catch(Exception e){System.out.println("error devolviendo ubicacion: "+e);e.printStackTrace();return null;}
  }
 
 
  public void setPosition(Point p){
    try{
      if(p.getX()<0)
        throw new Exception("coordenada x negativa en posicion nueva");
      if(p.getY()<0)
        throw new Exception("coordenada y negativa en posicion nueva")
    position = p; 
    }catch(Exception e){System.out.println("error seteando ubicacion"+e);e.printStackTrace();}
  }
 
 
  public  void actualizarStat(UnitStats stat,Fortaleza fortaleza){
    //si lleg�, null
    Fortaleza.instanciaFortaleza.mapa[stat.getPosition().getX()][stat.getPosition().getY()]=this;
    obstaculos.clear();
    if (destino!= null)
    if (destino.equals(stat.getPosition()) && stat.getErrorCode()==0 && stat.getCommandType()==4)//si no tira error y si se mueve
        destino=null;
  }

 

  /**
   * @return the jugador
   */
  public Cliente getJugador() {
    return jugador;
  }
 
  /**
   * acci�n principal del turno
   * NOTA: es para usar en las unidades, no est� pensada necesariamente para la fortaleza
   * @return
   */
  public abstract ClientCommand actuar();

  /**
   * @return the ultimoTurnoActualizado
   */
  public int getUltimoTurnoActualizado() {
    return ultimoTurnoActualizado;
  }

  /**
   * @param ultimoTurnoActualizado the ultimoTurnoActualizado to set
   */
  public void setUltimoTurnoActualizado(int ultimoTurnoActualizado) {
    this.ultimoTurnoActualizado = ultimoTurnoActualizado;
  }
  public List getWayPoints() {
    return wayPoints;
  }

  public void setWayPoints(List wayPoints) {
    this.wayPoints = wayPoints;
  }
 
  /**
   * devuelve tipo asesino, guardia, etc
   * es abstracta, devuelve 0 porque java no me quiere dejar que algo sea est�tico, p�blico y abstracto
   * @return
   */
   abstract public int getTipoInternoUnidad();

  public boolean isDescubir() {
    return descubir;
  }

  public void setDescubir(boolean descubir) {
    this.descubir = descubir;
  }

  public boolean isPeligrosidad() {
    return peligrosidad;
  }

  public void setPeligrosidad(boolean peligrosidad) {
    this.peligrosidad = peligrosidad;
  }
 
  /**
   * para estadisticas
   * @param iCantidad: cantidad de casilleros descubiertos
   */
  public abstract void addPosicionesDescubiertas(int iCantidad);
 
  /**
   * para estadisticas de tipo unidad
   * suma una muerte :(
   *
   */
  public abstract void addMuerteDeEsteTipoDeUnidad();
 
//abstract static EstadisticasTipoUnidad getEstadisticasTipoUnidad();
 
  /**
   * setter de estrategia para unidades, Fortaleza no le va a dar bola
   *
   */
  public abstract void setEstrategiaUnidad(EstrategiaUnidad eu);

  /**
   * @return the destino
   */
  public Point getDestino() {
    return destino;
  }

  /**
   * @param destino the destino to set
   */
  public void setDestino(Point destino) {
    if (destino != null) //puede darse el caso que se quiera nulear. A m� me est� pasando : /
      this.wayPoints = Astar.intentoDePathFinding(destino, this, Fortaleza.instanciaFortaleza);
    this.destino = destino;
  }
 
  /**
   * determina para d�nde mover y devuelve un comando con esa movida
   * @param destino: destino final
   * @return comando
   */
  public ClientCommand moverA(UnidadBasica ub, Point destino){

    ClientCommand nuevoComando = new ClientCommand();
    Point pMovida = new Point(ub.getPosition().getX(),ub.getPosition().getY());//por las dudas que algo falle
    ub.getJugador().incIdComando();
    nuevoComando.setId(ub.getJugador().getIdComando());
    nuevoComando.setIdUnit(ub.getId());
    if (ub.getWayPoints()==null || ub.getWayPoints().size()==0 || !Astar.verificarCamino(ub)){
      ub.setWayPoints(Astar.intentoDePathFinding(destino, ub, ub.getJugador().getFortaleza()));
    }
    pMovida = (Point) ub.getWayPoints().get(0);
    nuevoComando.setType("move");
    nuevoComando.setDestination(pMovida);
    //asesino.destino=(Point)asesino.getWayPoints().get(0);
//    destino=asesino.destino;
    nuevoComando.setUnitType(ub.getType());
/*    if (destino==null)
      return null;*/
   
    ub.setCommand(nuevoComando);
    return nuevoComando;
  }

  public boolean isARangoDeAccion() {
    return aRangoDeAccion;
  }

  public void setARangoDeAccion(boolean rangoDeAccion) {
    aRangoDeAccion = rangoDeAccion;
  }
 
  /**PARA REDEFINIR!!!!!
   * @return the estadisticasTipoUnidad
   */
  static public EstadisticasTipoUnidad getEstadisticasTipoUnidad() {
    return null;
  }

  /**PARA REDEFINIR!!!!!
   * @param estadisticasTipoUnidad the estadisticasTipoUnidad to set
   */
  static public void setEstadisticasTipoUnidad(){};
      //EstadisticasTipoUnidad estadisticasTipoUnidad) {
    //estadisticasTipoUnidad = estadisticasTipoUnidad;
 
 
 
  public ClientCommand idle(){
    ClientCommand cIdle = new ClientCommand();

     getJugador().incIdComando();//incremento el id
     cIdle.setId( getJugador().getIdComando());
     cIdle.setIdUnit(getId());
     cIdle.setType("idle");
     cIdle.setOwner(this);
     cIdle.setDestination(position);

    
     cIdle.setUnitType(this.getType());
     return cIdle;
  }

  public boolean isFavorecerDiagonalesImperfectas() {
    return favorecerDiagonalesImperfectas;
  }

  public void setFavorecerDiagonalesImperfectas(
      boolean favorecerDiagonalesImperfectas) {
    this.favorecerDiagonalesImperfectas = favorecerDiagonalesImperfectas;
  }
}
TOP

Related Classes of src.UnidadBasica

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.