Package pu.web.client

Source Code of pu.web.client.PU_Game

package pu.web.client;

import java.util.ArrayList;
import java.util.Collection;

import pu.web.client.battle.PU_Battle;
import pu.web.client.gui.impl.PU_BattlePanel;
import pu.web.client.gui.impl.PU_ChatPanel;
import pu.web.client.gui.impl.PU_OnscreenChat;
import pu.web.client.gui.impl.PU_WorldPanel;
import pu.web.client.resources.fonts.Fonts;

public class PU_Game
{
  public static final int GAMESTATE_UNLOADING = 0;
  public static final int GAMESTATE_LOADING = 1;
  public static final int GAMESTATE_LOGIN = 2;
  public static final int GAMESTATE_WORLD = 3;
  public static final int GAMESTATE_BATTLE_INIT = 4;
  public static final int GAMESTATE_BATTLE = 5;
 
  public static final int NUMTILES_X = 23;
  public static final int NUMTILES_Y = 17;
 
  public static final int MID_X = 11;
  public static final int MID_Y = 8;
 
  private int mState = GAMESTATE_LOADING;
  private int mScreenOffsetX = 0;
  private int mScreenOffsetY = 0;
  private PU_Player mSelf = null;
  private int mLastDirKey = 0;
  private ArrayList<PU_PlayerName> mPlayerNames = new ArrayList<PU_PlayerName>();
 
  private PU_WorldPanel mWorldPanel = null;
  private PU_ChatPanel mChatPanel = null;
  private PU_BattlePanel mBattlePanel = null;
  private PU_OnscreenChat mOnscreenChat = new PU_OnscreenChat();
 
  private PU_Battle mBattle = null;
 
  public PU_Game()
  {

  }
 
  public void initPanels()
  {
    mWorldPanel = new PU_WorldPanel(0, 0, PU_Engine.SCREEN_WIDTH, PU_Engine.SCREEN_HEIGHT);
    mWorldPanel.setVisible(false);
    PUWeb.gui().getRoot().addChild(mWorldPanel);
   
    mBattlePanel = new PU_BattlePanel(0, 0, PU_Engine.SCREEN_WIDTH, PU_Engine.SCREEN_HEIGHT);
    mBattlePanel.setVisible(false);
    PUWeb.gui().getRoot().addChild(mBattlePanel);
   
    mChatPanel = new PU_ChatPanel(0, 0, PU_Engine.SCREEN_WIDTH, PU_Engine.SCREEN_HEIGHT);
    mChatPanel.setVisible(false);
    PUWeb.gui().getRoot().addChild(mChatPanel);
  }
 
  public int getState()
  {
    return mState;
  }
 
  public void setState(int state)
  {
    mState = state;
  }
 
  public void draw()
  {
    switch(mState)
    {
      case GAMESTATE_LOADING:
      {
        PU_Font font = PUWeb.resources().getFont(Fonts.FONT_ARIALBLK_BOLD_14);
        if(font != null)
        {
          font.drawText("Loading, please wait...", 100, 310);
         
          PUWeb.engine().setColor(255, 255, 255, 255);
          PUWeb.engine().renderRect(100, 330, 764, 30);
         
          int progressSize = (int)(PUWeb.resources().getLoadProgress()* 761.0f);
          PUWeb.engine().renderFillRect(102, 332, progressSize, 27);
        }
      }
      break;
     
      case GAMESTATE_LOGIN:
      {
       
      }
      break;
     
      case GAMESTATE_WORLD:
      case GAMESTATE_BATTLE_INIT:
      {
        drawWorld();
        mOnscreenChat.draw();
       
      }
      break;
    }
  }
 
  public void drawWorld()
  {
    int[] offset = getScreenOffset();
    mScreenOffsetX = offset[0];
    mScreenOffsetY = offset[1];
   
    PU_Tile layer2tiles[] = new PU_Tile[NUMTILES_X * NUMTILES_Y];
    int layer2tilesCount = 0;
   
    PU_Creature walkers[] = new PU_Creature[PUWeb.map().getCreatureCount()];
    int walkerCount = 0;
   
    mPlayerNames.clear();
   
    PUWeb.engine().beginSpriteBatch();
    PU_Tile currentXTile = null;
    PU_Tile currentYTile = null;
    for(int x = 0; x < NUMTILES_X; x++)
    {
      if(currentXTile == null)
      {
        int mapx = (mSelf.getX()-MID_X) + x;
        int mapy = (mSelf.getY()-MID_Y);
        currentXTile = PUWeb.map().getTile(mapx, mapy);
        currentYTile = currentXTile;
      }
     
      for(int y = 0; y < NUMTILES_Y; y++)
      {
        if(currentYTile == null)
        {
          int mapx = (mSelf.getX()-MID_X) + x;
          int mapy = (mSelf.getY()-MID_Y) + y;
          currentYTile = PUWeb.map().getTile(mapx, mapy);
        }
       
        if(currentYTile != null)
        {
          for(int i = 0; i < 2; i++)
          {
            currentYTile.drawLayer(i, x, y);
          }
          if(currentYTile.getLayer(2) != null)
          {
            layer2tiles[layer2tilesCount] = currentYTile;
            layer2tilesCount++;
          }
         
          currentYTile = currentYTile.getSouthNeighbour();
        }
      }
      if(currentXTile != null)
      {
        currentXTile = currentXTile.getEastNeighbour();
        currentYTile = currentXTile;
      }
    }
   
    Collection<PU_Creature> creatures = PUWeb.map().getCreatures();
    for(PU_Creature creature : creatures)
    {
      int screenx = MID_X - (mSelf.getX() - creature.getX());
      int screeny = MID_Y - (mSelf.getY() - creature.getY());
      drawCreature(creature, screenx, screeny);
     
      if(creature.isWalking())
      {
        walkers[walkerCount] = creature;
        walkerCount++;
      }
    }
   
    for(int i = 0; i < layer2tilesCount; i++)
    {
      PU_Tile tile = layer2tiles[i];
     
      int screenx = MID_X - (mSelf.getX() - tile.getX());
      int screeny = MID_Y - (mSelf.getY() - tile.getY());
     
      tile.drawLayer(2, screenx, screeny);
    }
    PUWeb.engine().endSpriteBatch();
   
    PU_Font nameFont = PUWeb.resources().getFont(Fonts.FONT_ARIALBLK_BOLD_14_OUTLINE);
    nameFont.setColor(255, 242, 0);
    for(PU_PlayerName name : mPlayerNames)
    {
      nameFont.drawText(name.name, name.x, name.y);
    }
   
   
    for(int i = 0; i < walkerCount; i++)
    {
      if(walkers[i] instanceof PU_Player)
        ((PU_Player)walkers[i]).updateWalk();
    }
  }
 
  public void drawCreature(PU_Creature creature, int x, int y)
  {
    int[] offset = getScreenOffset();
    int offsetX = offset[0];
    int offsetY = offset[1];
   
    int drawX = 0;
    int drawY = 0;
   
    if(creature.isWalking())
    {
            switch(creature.getDirection())
            {
            case PU_Player.DIR_NORTH:
                    drawX = (x * PU_Tile.TILE_WIDTH) - PU_Tile.TILE_WIDTH - 22 + offsetX;
                    drawY = ((y * PU_Tile.TILE_HEIGHT) + (PU_Tile.TILE_HEIGHT - creature.getOffset())) - PU_Tile.TILE_HEIGHT + offsetY;
                    break;

            case PU_Player.DIR_EAST:
                    drawX = ((x * PU_Tile.TILE_WIDTH) - (PU_Tile.TILE_WIDTH - creature.getOffset())) - PU_Tile.TILE_WIDTH - 22 + offsetX;
                    drawY = (y * PU_Tile.TILE_HEIGHT) - PU_Tile.TILE_HEIGHT + offsetY;
                    break;

            case PU_Player.DIR_SOUTH:
                    drawX = (x * PU_Tile.TILE_WIDTH) - PU_Tile.TILE_WIDTH - 22 + offsetX;
                    drawY = ((y * PU_Tile.TILE_HEIGHT) - (PU_Tile.TILE_HEIGHT - creature.getOffset())) - PU_Tile.TILE_HEIGHT + offsetY;
                    break;

            case PU_Player.DIR_WEST:
                    drawX = ((x * PU_Tile.TILE_WIDTH) + (PU_Tile.TILE_WIDTH - creature.getOffset())) - PU_Tile.TILE_WIDTH - 22 + offsetX;
                    drawY = (y * PU_Tile.TILE_HEIGHT) - PU_Tile.TILE_HEIGHT + offsetY;
                    break;
            }
    }
    else
    {
            drawX = (x * PU_Tile.TILE_WIDTH) - PU_Tile.TILE_WIDTH - 22 + offsetX;
            drawY = (y * PU_Tile.TILE_HEIGHT) - PU_Tile.TILE_HEIGHT + offsetY;
    }
    creature.draw(drawX, drawY);
   
    if(creature instanceof PU_Player)
    {
      String name = ((PU_Player) creature).getName();
      int posHalf = (drawX - 48) + (((drawX + 96) - (drawX - 48)) / 2);
          int nameHalf = PUWeb.resources().getFont(Fonts.FONT_ARIALBLK_BOLD_14).getStringWidth(name) / 2;
            int centerPos = posHalf - nameHalf;
            mPlayerNames.add(new PU_PlayerName(name, centerPos, drawY - 14));
    }
  }
 
  public int getScreenOffsetX()
  {
    return mScreenOffsetX;
  }
 
  public int getScreenOffsetY()
  {
    return mScreenOffsetY;
  }
 
  public int[] getScreenOffset()
  {
    int[] coordinates = new int[]{0, 0};
    if(mSelf != null && mSelf.isWalking())
    {
      switch(mSelf.getDirection())
      {
      case PU_Creature.DIR_NORTH:
        coordinates[1] = 0 - (PU_Tile.TILE_HEIGHT - mSelf.getOffset());
        break;
       
      case PU_Creature.DIR_EAST:
        coordinates[0] = PU_Tile.TILE_WIDTH - mSelf.getOffset();
        break;
       
      case PU_Creature.DIR_SOUTH:
        coordinates[1] = PU_Tile.TILE_HEIGHT - mSelf.getOffset();
        break;
       
      case PU_Creature.DIR_WEST:
        coordinates[0] = 0 - (PU_Tile.TILE_WIDTH - mSelf.getOffset());
        break;
      }
    }
    return coordinates;
  }
 
  public void setSelf(PU_Player player)
  {
    mSelf = player;
  }
 
  public PU_Player getSelf()
  {
    return mSelf;
  }
 
  public int getLastDirKey()
  {
    return mLastDirKey;
  }
 
  public void keyDown(int keycode)
  {
    if(mState == GAMESTATE_WORLD)
    {
      if(mSelf != null)
      {
        boolean ctrlDown = PUWeb.events().isKeyDown(17);
        switch(keycode)
        {
        case PU_Events.KEY_LEFT:
          if(ctrlDown)
          {
            if(!mSelf.isWalking())
            {
              mSelf.turn(PU_Creature.DIR_WEST, true);
            }
          }
          else
          {
            mLastDirKey = keycode;
            mSelf.walk(PU_Creature.DIR_WEST);
           
          }
          break;
         
        case PU_Events.KEY_UP:
          if(ctrlDown)
          {
            if(!mSelf.isWalking())
            {
              mSelf.turn(PU_Creature.DIR_NORTH, true);
            }
          }
          else
          {
            mLastDirKey = keycode;
            mSelf.walk(PU_Creature.DIR_NORTH);
           
          }
          break;
         
        case PU_Events.KEY_RIGHT:
          if(ctrlDown)
          {
            if(!mSelf.isWalking())
            {
              mSelf.turn(PU_Creature.DIR_EAST, true);
            }
          }
          else
          {
            mLastDirKey = keycode;
            mSelf.walk(PU_Creature.DIR_EAST);
           
          }
          break;
         
        case PU_Events.KEY_DOWN:
          if(ctrlDown)
          {
            if(!mSelf.isWalking())
            {
              mSelf.turn(PU_Creature.DIR_SOUTH, true);
            }
          }
          else
          {
            mLastDirKey = keycode;
            mSelf.walk(PU_Creature.DIR_SOUTH);
           
          }
          break;
        }
      }
    }
  }
 
  public void showChatPanel()
  {
    mChatPanel.setVisible(true);
  }
 
  public void hideChatPanel()
  {
    mChatPanel.setVisible(false);
  }
 
  public PU_ChatPanel getChatPanel()
  {
    return mChatPanel;
  }
 
  public void showWorldPanel()
  {
    mWorldPanel.setVisible(true);
    mOnscreenChat.setVisible(true);
  }
 
  public void hideWorldPanel()
  {
    mWorldPanel.setVisible(false);
    mOnscreenChat.setVisible(false);
  }
 
  public PU_OnscreenChat getOnscreenChat()
  {
    return mOnscreenChat;
  }
 
  public void initBattle()
  { 
    this.mBattlePanel.init();
  }
 
  public PU_Battle getBattle()
  {
    return this.mBattle;
  }
 
  public void setBattle(PU_Battle battle)
  {
    this.mBattle = battle;
  }
 
  public void showBattlePanel()
  { 
    this.mBattlePanel.setVisible(true);
  }
 
  public void hideBattlePanel()
  {
    this.mBattlePanel.setVisible(false);
  }
}
TOP

Related Classes of pu.web.client.PU_Game

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.