Package iryrwarosh.screens

Source Code of iryrwarosh.screens.StartScreen

package iryrwarosh.screens;

import iryrwarosh.ArmosSaga;
import iryrwarosh.Tile;
import iryrwarosh.Common;
import iryrwarosh.CreatureAiHandler;
import iryrwarosh.LootSaga;
import iryrwarosh.MapExplorationHandler;
import iryrwarosh.MessageBus;
import iryrwarosh.ItemSpecialsSaga;

import java.awt.event.KeyEvent;

import asciiPanel.AsciiPanel;

public class StartScreen implements Screen {

  Tile wall = Tile.GREEN_TREE1;
  Tile floor = Tile.GREEN_DIRT;
  Tile special = Tile.GREEN_TREE1;
  Tile statue = Tile.STATUE;
  Tile liquid = Tile.WATER1;
  Tile[][] tiles = new Tile[19][9];
 
  public StartScreen(){
    MessageBus.subscribe(new ItemSpecialsSaga());
    MessageBus.subscribe(new LootSaga());
    MessageBus.subscribe(new ArmosSaga());
    MessageBus.subscribe(new MapExplorationHandler());
    MessageBus.subscribe(new CreatureAiHandler());
   
    addTheme();
    buildRoom();
  }

  private void addTheme() {
    statue = Tile.STATUE;
    liquid = Math.random() < 0.1 ? Tile.LAVA1 : Tile.WATER1;
   
    switch ((int)(Math.random() * 10)){
    case 0:
      wall = Tile.GREEN_ROCK;
      floor = Tile.GREEN_DIRT;
      break;
    case 1:
      wall = Tile.GREEN_TREE1;
      floor = Tile.GREEN_DIRT;
      break;
    case 2:
      wall = Tile.PINE_TREE1;
      floor = Tile.GREEN_DIRT;
      break;
    case 3:
      wall = Tile.BROWN_ROCK;
      floor = Tile.BROWN_DIRT;
      break;
    case 4:
      wall = Tile.GREEN_TREE1;
      floor = Tile.BROWN_DIRT;
      break;
    case 5:
      wall = Tile.BROWN_TREE4;
      floor = Tile.BROWN_DIRT;
      break;
    case 6:
      wall = Tile.WHITE_TREE1;
      floor = Tile.WHITE_DIRT;
      break;
    case 7:
      wall = Tile.WHITE_ROCK;
      floor = Tile.WHITE_DIRT;
      break;
    case 8:
      wall = Tile.BROWN_ROCK;
      floor = Tile.DESERT_SAND1;
      break;
    case 9:
      wall = Tile.WHITE_WALL;
      floor = Tile.WHITE_TILE1;
      break;
    }
   
    if (floor == Tile.WHITE_TILE1) {
      special = Tile.WHITE_TILE1;
      statue = Tile.STATUE_WHITE;
      liquid = Math.random() < 0.5 ? Tile.LAVA1 : Tile.WATER1;
    } else if (floor == Tile.DESERT_SAND1) {
      special = Tile.DESERT_SAND1;
      liquid = Tile.DESERT_SAND1;
      statue = Tile.DESERT_SAND1;
    } else if (Math.random() < 0.5){
      Tile[] specials = { Tile.GREEN_ROCK, Tile.BROWN_ROCK, Tile.WHITE_ROCK,
          Tile.GREEN_TREE1, Tile.PINE_TREE1, Tile.BROWN_TREE1, Tile.BROWN_TREE4, Tile.WHITE_TREE1 };
     
      special = specials[(int)(Math.random() * specials.length)];
    } else {
      special = wall;
    }
  }
 
  private void buildRoom(){
    int y = 0;
    makeRow("###################", y++);
    makeRow("#.................#", y++);
    makeRow("#.x.....&.&.....x.#", y++);
    makeRow("#....&.......&....#", y++);
    makeRow("#.x....~~~~~....x.#", y++);
    makeRow("#....&.~~~~~.&....#", y++);
    makeRow("#.x....~~~~~....x.#", y++);
    makeRow("#.................#", y++);
    makeRow("#########.#########", y++);
  }
 
  private void makeRow(String data, int y) {
   
    for (int x = 0; x < data.length(); x++){
      Tile tile = null;
      switch (data.charAt(x)){
      case '#': tile = wall; break;
      case '~': tile = liquid; break;
      case '.': tile = floor; break;
      case '&': tile = statue; break;
      default : tile = special;
      }
     
      tiles[x][y] = tile.variation(x, y);
    }
   
  }

  @Override
  public void displayOutput(AsciiPanel terminal) {
    terminal.setDefaultForegroundColor(Common.guiForeground);
    terminal.setDefaultBackgroundColor(Common.guiBackground);
    terminal.clear();
   
    terminal.writeCenter("I rule, you rule, we all rule old-school Hyrule", 1, AsciiPanel.brightWhite);
    terminal.writeCenter("a 2012 seven day roguelike by Trystan Spangler", 2);
   
    int left = 30;
    int top  = 10;
   
    for (int x = 0; x < tiles.length; x++)
    for (int y = 0; y < tiles[0].length; y++){
      terminal.write(tiles[x][y].glyph(), left+x, top+y, tiles[x][y].color(), tiles[x][y].background());
    }
   
    terminal.writeCenter("-- press [enter] to start --", 22);
  }

  @Override
  public Screen respondToUserInput(KeyEvent key) {
    switch (key.getKeyCode()){
    case KeyEvent.VK_ENTER:
      return new ChooseStartingItemsScreen();
    case KeyEvent.VK_SPACE:
      addTheme();
      buildRoom();
      return this;
    default: return this;
    }
  }
}
TOP

Related Classes of iryrwarosh.screens.StartScreen

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.