Field.java :  » Game » seed-videogame » seed » field » Java Open Source

Java Open Source » Game » seed videogame 
seed videogame » seed » field » Field.java
package seed.field;

import java.util.ArrayList;

import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Image;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.geom.Vector2f;
import org.newdawn.slick.state.StateBasedGame;

import seed.engine.Entity;
/**
 * Classe Cursor
 * @author Thierry
 * Il s'agit d'un singleton (il n'y a qu'une seule instance du terrain, et elle doit tre accessible de partout !)
 *
 */
public class Field  extends Entity{
  int screenWidth = 800;  //valeur par defaut 800
  int screenHeight = 600;  //valeur par defaut 600
  int blockRowNumber;
  int blockColumnNumber;
  
  ImageEntity background;
  Block[][] grid;
  boolean show_grid=false;
  
  private static final Field instance = new Field("field");
  
  public Field(String id){
    super(id);
    blockRowNumber = screenWidth/Block.BLOCK_SIZE;
    blockColumnNumber = screenHeight/Block.BLOCK_SIZE;
  }
  
  public Field(String id,int screen_width,int screen_height){
    super(id);
    screenWidth = screen_width;
    screenHeight = screen_height;
    blockRowNumber = screenWidth/Block.BLOCK_SIZE;
    blockColumnNumber = screenHeight/Block.BLOCK_SIZE;
  }
  
  public final static Field getInstance() {
    return instance;
  }
  
  public void init(GameContainer gc) throws SlickException {
    background = new ImageEntity("background",new Image("res/TD.jpg"));
    
    grid = new Block[blockRowNumber][blockColumnNumber];
    for(int i=0;i<blockRowNumber;i++){
      for(int j=0;j<blockColumnNumber;j++){
        grid[i][j] = new Block("Block["+i+"]["+j+"]",new Image("res/desert.png"));
        Vector2f position = new Vector2f(i*Block.BLOCK_SIZE, j*Block.BLOCK_SIZE);
        grid[i][j].setPosition(position);
        grid[i][j].addType(new BlockType(BlockType.Types.DESSERT));
      }
    }
    
    //path
    ArrayList<Vector2f> path = new ArrayList<Vector2f>();
    path.add(new Vector2f(3,1));
    path.add(new Vector2f(3,5));
    path.add(new Vector2f(5,5));
    path.add(new Vector2f(12,5));
    path.add(new Vector2f(12,10));
    path.add(new Vector2f(6,10));
    path.add(new Vector2f(6,12));
    path.add(new Vector2f(blockRowNumber,blockColumnNumber));
    PathComponent c= new PathComponent("path",path);
    this.addComponent(c);
    c.init(gc);
  }
  
  public void setGridVisibility(boolean show){
    show_grid = show;
  }
  
  public boolean isGridVisible(){
    return show_grid;
  }
  
  public void changeBlockTexture(int x, int y, Image new_texture){
    if(x <= blockRowNumber && y <= blockColumnNumber && x > 0 && y > 0)
      grid[x-1][y-1].setTexture(new_texture);
  }
  
  public void addBlockType(int x, int y, BlockType new_type){
    if(x <= blockRowNumber && y <= blockColumnNumber && x > 0 && y > 0)
      grid[x-1][y-1].addType(new_type);
  }
  
  public void removeBlockType(int x, int y, BlockType.Types type){
    if(x <= blockRowNumber && y <= blockColumnNumber && x > 0 && y > 0)
      grid[x-1][y-1].removeType(type);
  }
  
  public void render(GameContainer gc, StateBasedGame sb, Graphics gr){
    background.render(gc, null, gr);
    for(int i=0;i<blockRowNumber;i++){
      for(int j=0;j<blockColumnNumber;j++){
        grid[i][j].setBorderVisibility(show_grid);
        grid[i][j].render(gc, sb, gr);
      }
    }
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.