Package com.thecherno.cherno.engine.level

Source Code of com.thecherno.cherno.engine.level.TiledLevel

package com.thecherno.cherno.engine.level;

import java.util.HashMap;
import java.util.Map;

import com.thecherno.cherno.engine.graphics.Screen;
import com.thecherno.cherno.engine.graphics.Texture;
import com.thecherno.cherno.engine.level.tile.Tile;

public class TiledLevel extends Level {

  private int tileSize = 64;
  private int[] tiles;
  private Map<Integer, Tile> tileCodes = new HashMap<Integer, Tile>();

  public TiledLevel(int width, int height) {
    super(width, height);
  }

  public TiledLevel(String file) {
    super(file);
  }

  public void setTileSize(int tileSize) {
    this.tileSize = tileSize;
  }

  public void load(String fileName) {
    Texture level = Texture.load(fileName);
    tiles = level.getPixels(Texture.FORMAT_RGB);
    width = level.getWidth();
    height = level.getHeight();
  }

  public void addTileCode(int code, Tile name) {
    tileCodes.put(code, name);
  }

  public void generate() {
  }

  /**
   * Returns teh tiles.
   *
   * @param x
   * @param y
   * @return
   */
  public Tile getTile(int x, int y) {
    if (x < 0 || x >= width || y < 0 || y >= height) return null;
    int key = tiles[x + y * width];
    if (!tileCodes.containsKey(key)) return null;
    return tileCodes.get(key);
  }

  public int[] getPixels() {
    return tiles;
  }

  public void render(int x, int y, Screen screen) {
    int x0 = xOffset / tileSize;
    int x1 = (int) (x0 + screen.getWidth() / screen.getScale() / tileSize) + 2;
    int y0 = yOffset / tileSize;
    int y1 = (int) (y0 + screen.getHeight() / screen.getScale() / tileSize) + 2;
    // System.out.println("Boundaries: " + x0 + "->" + x1 + ", " + y0 + "->" + y1);
    for (int yy = 0; yy < height; yy++) {
      for (int xx = 0; xx < width; xx++) {
        if (xx < x0 || xx >= x1 || yy < y0 || yy >= y1) continue;
        Tile tile = getTile(xx, yy);
        if (tile == null) continue;
        int tx = -xOffset + xx * tile.getWidth();
        int ty = -yOffset + yy * tile.getHeight();
        screen.render(tx, ty, tile);
      }
    }
    super.render(screen);
  }

  public int getTileSize() {
    return tileSize;
  }
}
TOP

Related Classes of com.thecherno.cherno.engine.level.TiledLevel

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.