Package server.world

Source Code of server.world.OldMap

package server.world;

import general.datastructures.PriorityQueue;
import general.datastructures.Vector2f;
import general.datastructures.Waypoint;
import general.exceptions.DestinationNotPassableException;
import general.exceptions.Exception;
import general.exceptions.IllegalPlayerCountException;
import general.exceptions.NoRouteFoundException;
import general.exceptions.OutOfMapException;
import general.interfaces.IUnit;

import java.io.IOException;
import java.nio.FloatBuffer;
import java.util.HashMap;
import java.util.Vector;



import org.lwjgl.BufferUtils;

import client.ogl.Texture;
import client.ogl.TextureLoader;



/**
* Class which describes a Map, including different terrain types
* Prepared to be drawn with OGL
*
* @author Tim
* @version 0.5.0
* @since 0.4.0
*
*/
public class OldMap {
  public static final int TERRAIN_WATER = -1;
  public static final int TERRAIN_GRASS = -2;
  public static final int TERRAIN_MUD = -3;
  public static final int TERRAIN_ROCK = -4;
  public static final int TERRAIN_FORREST = -5;

  /**
   * TemplateID for a very small debug Map:
   * Size: 10x10
   * Terrain: Grass, a little area of forrest in the middle
   * Spawnpoints: None
   */
  public static final int TEMPLATE_DEBUG = 101;

  /**
   * TemplateID for a small and simple Map:
   * Size: 30x30
   * Terrain: Grass, an area of forrest in the middle, surrounded by water
   * Spawnpoints: p1: (10|10), p2: (20|20), p3: (10|20), p4: (20|10)
   */
  public static final int TEMPLATE_ISLAND = 102;

  /**
   * TemplateID for a small and simple Map:
   * Size: 30x30
   * Terrain: Grass, an area of forrest in the middle, surrounded by water
   * Spawnpoints: p1: (10|10), p2: (20|20), p3: (10|20), p4: (20|10)
   *
   * @deprecated
   */
  public static final int TEMPLATE_ISLAND_CONSOLE = 103;
 
  /**
   * Creates Maps, based of Template ID's   *
   *
   * @param ID Template ID
   * @param playercount numbers of players (2-4)
   * @return the created map
   * @throws IllegalPlayerCountException Is thrown, if the passed number of players is not supported by the chosen map
   * @throws IOException An IOException is thrown, when any Map-Texture can not be loaded
   */
  public static OldMap createTemplateMap(int ID, int playercount) throws IllegalPlayerCountException, IOException
  {
    switch (ID)
    {

    case TEMPLATE_DEBUG:
      byte[][] data1 = new byte[10][10];
      for (int i=0; i<10; i++)
        for(int j=0; j<10; j++)
        {
          if (i>3&&i<6&&j>3&&j<6)
          {
            data1[i][j] = OldMap.TERRAIN_FORREST;
          }
          else
          {
            data1[i][j] = OldMap.TERRAIN_GRASS;
          }
        }
      return new OldMap(data1,10,10,null,32);

    case TEMPLATE_ISLAND_CONSOLE:
      byte[][] data2 = new byte[30][30];

      Vector<Vector2f> mc_spawnpoints2 = new Vector<Vector2f>();


      if (playercount > 4 || playercount < 2) {
        throw new IllegalPlayerCountException("Ungueltige Spieleranzahl!", playercount);
      }
      mc_spawnpoints2.add(new Vector2f(10, 10));
      mc_spawnpoints2.add(new Vector2f(20,20));
      if (playercount >=3) {
        mc_spawnpoints2.add(new Vector2f(10,20));

        if (playercount == 4) {
          mc_spawnpoints2.add(new Vector2f(20,10));
        }
      }

      //map fuellen
      for (int i=0; i<10000; i++)
        for(int j=0; j<10000; j++)
        {
          if(i<5||i>=25||j<5||j>=25)
          {
            data2[i][j] = OldMap.TERRAIN_WATER;
          }
          else if (i>13&&i<18&&j>13&&j<18)
          {
            data2[i][j] = OldMap.TERRAIN_FORREST;
          }
          else
          {
            data2[i][j] = OldMap.TERRAIN_GRASS;
          }
        }

      return new OldMap(data2,30,30,mc_spawnpoints2);
     

    case TEMPLATE_ISLAND:
    default:
      byte[][] data = new byte[10000][10000];

      Vector<Vector2f> mc_spawnpoints = new Vector<Vector2f>();


      if (playercount > 4 || playercount < 2) {
        throw new IllegalPlayerCountException("Ungueltige Spieleranzahl!", playercount);
      }
      mc_spawnpoints.add(new Vector2f(10, 10));
      mc_spawnpoints.add(new Vector2f(20,20));
      if (playercount >=3) {
        mc_spawnpoints.add(new Vector2f(10,20));

        if (playercount == 4) {
          mc_spawnpoints.add(new Vector2f(20,10));
        }
      }

      //map fuellen
      for (int i=0; i<10000; i++)
        for(int j=0; j<10000; j++)
        {
          if(i<5||i>=25||j<5||j>=25)
          {
            data[i][j] = OldMap.TERRAIN_WATER;
          }
          else if (i>13&&i<18&&j>13&&j<18)
          {
            data[i][j] = OldMap.TERRAIN_FORREST;
          }
          else
          {
            data[i][j] = OldMap.TERRAIN_GRASS;
          }
        }

      return new OldMap(data,10000,10000,mc_spawnpoints,32);
    }
  }

  private int width;
  private int height;
  private byte data[][];
 
  //TODO entfernen, wenn fabriken zur einheitenerzeugung existieren
  private Vector<Vector2f> mc_spawnpoints;
  private int tilesize;
 
  private FloatBuffer verts_buf = BufferUtils.createFloatBuffer(2*4);
  private FloatBuffer tex_buf = BufferUtils.createFloatBuffer(2*4);
 
  private HashMap<Integer, Texture> textures = new HashMap<Integer, Texture>();
 
  /**
   * private constructor, which shall only be used by the createTemplateMap function
   * This version is for a non-graphical visualisation, so it has no Tielsize and does not try to load Textures
   *
   * @param data
   * @param width
   * @param height
   * @param spawnpoints
   * @throws IOException
   */
  private OldMap(byte data[][], int width, int height, Vector<Vector2f> mc_spawnpoints) throws IOException
  {
    this.width = width;
    this.height = height;
    this.data = data;
    this.mc_spawnpoints = mc_spawnpoints;
  }
 
  /**
   * private constructor, which shall only be used by the createTemplateMap function
   *
   * @param data
   * @param width
   * @param height
   * @param spawnpoints
   * @throws IOException
   */
  private OldMap(byte data[][], int width, int height, Vector<Vector2f> mc_spawnpoints, int tilesize) throws IOException
  {
    this.width = width;
    this.height = height;
    this.data = data;
    this.mc_spawnpoints = mc_spawnpoints;
    this.tilesize = tilesize;
   
    verts_buf.put(new float[]{
        0.0f, 0.0f,
        tilesize, 0.0f,
        tilesize, tilesize,
        0.0f, tilesize
    });
   
    tex_buf.put(new float[]{
        0.0f,0.0f,
        1.0f,0.0f,
        1.0f,1.0f,
        0.0f,1.0f

    });
   
    textures.put(OldMap.TERRAIN_GRASS, TextureLoader.getTexture("grass.png"));
    textures.put(OldMap.TERRAIN_FORREST, TextureLoader.getTexture("forrest.png"));
    textures.put(OldMap.TERRAIN_ROCK, TextureLoader.getTexture("rock.png"));
    textures.put(OldMap.TERRAIN_MUD, TextureLoader.getTexture("mudd.png"));
    textures.put(OldMap.TERRAIN_WATER, TextureLoader.getTexture("water.png"));   
  }

  /**
   *
   * @param x X-Coordinate
   * @param y Y-Coordinate
   * @return Terraintype at the passed coordinates
   */
  public int getData(int x, int y){
    return data[x][y];
  }

  /**
   *
   * @param vehicletype Vehicletype @see {@link IUnit}
   * @param p {@link Vector2f}
   * @return True, if the passed vehicletype can pass the passed {@link Vector2f}, otherwise false
   */
  public boolean isPassable(int vehicletype, Vector2f mc_p)
  {
    if(
        ((vehicletype == IUnit.TYPE_AMPHIBIOUS || vehicletype == IUnit.TYPE_LAND) && (data[(int)mc_p.x()][(int)mc_p.y()] == OldMap.TERRAIN_GRASS || data[(int) mc_p.x()][(int) mc_p.y()] == OldMap.TERRAIN_MUD )) ||
        ((vehicletype == IUnit.TYPE_AMPHIBIOUS || vehicletype == IUnit.TYPE_WATER) && (data[(int)mc_p.x()][(int)mc_p.y()] == OldMap.TERRAIN_WATER)) ||
        (vehicletype == IUnit.TYPE_AIR)
      )
    {
      return true;
    }
    else
    {
      return false;
    }
  }

  /**
   *
   * @return returns the Width of the map
   */
  public int getWidth(){
    return width;
  }

  /**
   *
   * @return returns the Height of the map
   */
  public int getHeight(){
    return height;
  }

  /**
   *
   * @return returns the tilesize of the map
   */
  public int getTilesize()
  {
    return tilesize;
  }
 
  public FloatBuffer getVertexBuffer()
  {
    this.verts_buf.rewind();
    return this.verts_buf;
  }
 
  public FloatBuffer getTextureBuffer()
  {
    this.tex_buf.rewind();
    return this.tex_buf;
  }
 
  public void BindMapTexture(int terraintype)
  {
    textures.get(terraintype).bind();
  }
 
  /**
   *
   * @param PlayerID
   * @return Returns the Spawnpoint of the passed player in MapCoordinates
   */
  public Vector2f getSpawnPoint(int PlayerID)
  {
    return mc_spawnpoints.get(PlayerID);
  }

  /**
   *
   * @param p {@link Vector2f}
   * @return Returns if the passed {@link Vector2f} is inside the Map
   */
  public boolean isInMap(Vector2f mc_p)
  {
    return (mc_p.x() >= 0 && mc_p.y() >= 0 && mc_p.x() < width && mc_p.y() < height);
  }
 
}


TOP

Related Classes of server.world.OldMap

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.