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