www.pudn.com > MobiCraft_src.rar > BuildingDraw.java
// style: tabs, tabsize=4, style=ANSI
//+----------------------------------------------------------------------+
// Copyright (c) 2006 Company Name
// Made by Andrew and Zahar
//+----------------------------------------------------------------------+
// Filename: BuildingDraw.java
//+----------------------------------------------------------------------+
// Comment: Show building (all types)
//+----------------------------------------------------------------------+
package location;
import java.io.*;
import java.util.Vector;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
class TBuildingSprite
{
public Sprite mSprite;
public int mWidth;
public int mHeight;
// Смещения при рисовании
public int mPosX;
public int mPosY;
public TBuildingSprite(String s, int w, int h, int dx, int dy) throws IOException
{
mWidth = w;
mHeight = h;
mPosX = dx;
mPosY = dy;
mSprite = new Sprite(Image.createImage(s), w, h);
}
}
public class BuildingDraw
{
// Это все анимации (по одной на каждый тип здания). Тут будут созданны только те, что нужны.
public TBuildingSprite[] mBuildingSprites;
// Это размеры в пикселях одной ячейки. Нужно менять рисунки если это поменять.
public final static int SIZE_X=11;
public final static int SIZE_Y=11;
// Картинки для недостроенных зданий
// // Их 9. Для Зерга, тоса, террана. По 3 размера - small, medium, large
public TBuildingSprite[] mNotFinished;
public BuildingDraw()
{
mBuildingSprites = new TBuildingSprite[BuildingTypes.TOTAL_NUMBER];
for (int i=0; i < BuildingTypes.TOTAL_NUMBER; i++)
mBuildingSprites[i] = null;
// Для непостроеных зданий. Большой(4х3), средний(3х2), маленький(2х2) и для газа(4х2)
mNotFinished = new TBuildingSprite[12];
for (int i=0; i < 12; i++)
mNotFinished[i] = null;
}
public void Load( int iType ) throws IOException
{
if (iType>0 && iType=BuildingTypes.TOTAL_NUMBER )
return false;
if (mBuildingSprites[iType] == null)
return false;
// Лярва отдельный объект. Выводим личинку
if (iType == BuildingTypes.Z_LARVA)
mBuildingSprites[iType].mSprite.setFrame(0);
mBuildingSprites[iType].mSprite.setPosition(x+mBuildingSprites[iType].mPosX, y+mBuildingSprites[iType].mPosY);
mBuildingSprites[iType].mSprite.paint(g);
return true;
}
public boolean LoadNotFinished( int iType ) throws IOException
{
int pos = GetNotFinisedPos(iType);
if (pos==-1)
return false;
if (mNotFinished[pos] != null)
return true;// Уже такая анимация есть.
switch (pos)
{
case 0: mNotFinished[0] = new TBuildingSprite("/location/building_t_state_large.png", 44, 33, 0, 0); break;
case 1: mNotFinished[1] = new TBuildingSprite("/location/building_t_state_medium.png", 33, 22, 0, 0); break;
case 2: mNotFinished[2] = new TBuildingSprite("/location/building_t_state_small.png", 22, 22, 0, 0); break;
case 3: mNotFinished[3] = new TBuildingSprite("/location/building_t_state_gas.png", 44, 26, 0, -4); break;
case 4: mNotFinished[4] = new TBuildingSprite("/location/building_p_state_large.png", 19, 19, 13, 6); break;
case 5: mNotFinished[5] = new TBuildingSprite("/location/building_p_state_medium.png", 19, 19, 7, 2); break;
case 6: mNotFinished[6] = new TBuildingSprite("/location/building_p_state_small.png", 18, 19, 2, 2); break;
case 7: mNotFinished[7] = new TBuildingSprite("/location/building_p_state_gas.png", 19, 19, 13,2); break;
case 8: mNotFinished[8] = new TBuildingSprite("/location/building_z_state_large.png", 33, 33, 6, 0); break;
case 9: mNotFinished[9] = new TBuildingSprite("/location/building_z_state_medium.png", 33, 29, 0, -7); break;
case 10: mNotFinished[10] = new TBuildingSprite("/location/building_z_state_small.png",22, 22, 0, 0); break;
case 11: mNotFinished[11] = new TBuildingSprite("/location/building_z_state_gas.png", 44, 34, 0, -10); break;
default: return false;
}
return true;
}
// Выводит в нужном месте ( пиксели ) здание.
public boolean DrawNotFinised(int iType, Graphics g, int x, int y)
{
// Лярва отдельный объект. Выводим ЯЙЦО.
if (iType == BuildingTypes.Z_LARVA)
{
mBuildingSprites[iType].mSprite.setFrame(1);
mBuildingSprites[iType].mSprite.setPosition(x+mBuildingSprites[iType].mPosX, y+mBuildingSprites[iType].mPosY);
mBuildingSprites[iType].mSprite.paint(g);
}
else
{
// Обычный режим.
int pos = GetNotFinisedPos(iType);
if (pos==-1)
return false;
if (mNotFinished[pos] == null)
return false;// Уже такая анимация есть.
mNotFinished[pos].mSprite.setPosition(x+mNotFinished[pos].mPosX, y+mNotFinished[pos].mPosY);
mNotFinished[pos].mSprite.paint(g);
}
return true;
}
// Позиция в списке 9-ти.
public int GetNotFinisedPos( int iType )
{
switch (iType)
{
case BuildingTypes.T_CC:
case BuildingTypes.T_BARRACK:
case BuildingTypes.T_FACTORY:
case BuildingTypes.T_FACILITY:
case BuildingTypes.T_BAY:
return 0;
case BuildingTypes.T_SUPPLY:
case BuildingTypes.T_ACADEMY:
case BuildingTypes.T_ARMORY:
return 1;
case BuildingTypes.T_COMSAT:
case BuildingTypes.T_MACHINE:
case BuildingTypes.T_GENELAB:
case BuildingTypes.T_TURRET:
return 2;
case BuildingTypes.T_REFINERY:
return 3;
case BuildingTypes.P_NEXUS:
case BuildingTypes.P_GATE:
return 4;
case BuildingTypes.P_OBSERV:
case BuildingTypes.P_CORE:
case BuildingTypes.P_FORGE:
case BuildingTypes.P_ROBOTIC:
case BuildingTypes.P_REAVER:
case BuildingTypes.P_CITADEL:
case BuildingTypes.P_TEMPLAR:
return 5;
case BuildingTypes.P_PYLON:
case BuildingTypes.P_PHOTON:
return 6;
case BuildingTypes.P_ASSIM:
return 7;
case BuildingTypes.Z_HATCHERY:
case BuildingTypes.Z_HIVE:
case BuildingTypes.Z_LAIR:
return 8;
case BuildingTypes.Z_POOL:
case BuildingTypes.Z_DEN:
case BuildingTypes.Z_NEST:
case BuildingTypes.Z_ULTRA:
case BuildingTypes.Z_EVOLUTION:
return 9;
case BuildingTypes.Z_CREEP:
case BuildingTypes.Z_SPORE:
return 10;
case BuildingTypes.Z_DEFILER:
case BuildingTypes.Z_EXTRACTOR:
return 11;
default:
return -1;
}
}
public void UnLoadAll()
{
for (int i=0; i