www.pudn.com > MobiCraft_src.rar > Loader.java


// style: tabs, tabsize=4, style=ANSI 
//+----------------------------------------------------------------------+ 
// Copyright (c) 2006 Company Name 
// Made by Andrew and Zahar 
//+----------------------------------------------------------------------+ 
// Filename: Loader.java 
//+----------------------------------------------------------------------+ 
// Comment: Позволяет зругить ресурсы, отображая информацию об этом. 
//+----------------------------------------------------------------------+ 
 
package app; 
import fonts.FontManager; 
 
import java.io.*; 
//import java.util.Vector; 
import javax.microedition.lcdui.*; 
import javax.microedition.lcdui.game.*; 
 
// Чтобы не делать кучу состояний и не выходить из paint() по ним лучше пользоваться этим классом. 
// Он знает что надо грузить и выводит полоску загрузки. 
public class Loader 
{ 
    public Image mLoadingLogo; 
    // ------------------------------------ 
    public FontManager  mFontManager; 
    public int			iTaskNum; 
    public boolean		bTaskNoted; // Надпись для задания уже выведена 
    public boolean		bTaskDone;  // Выполнено задание == если после вывода надписи запустили TaskReady() ещё хоть раз 
     
//    public int PIC_Y_COORD = 100; // На какой высоте выводить mLoadingLogo 
    public int BAR_Y_COORD = 100; // На какой высоте выводить полоску; 
    public int BAR_WIDTH = 120; 
    public int BAR_HEIGHT = 6; 
    // ------------------------------------ 
     
    public Loader(FontManager fontm) 
    { 
		mFontManager = fontm; 
		iTaskNum = 0; 
		bTaskNoted = false; 
		bTaskDone = false; 
    } 
    public void Init() throws IOException 
    { 
		iTaskNum = 0; 
		bTaskNoted = false; 
		bTaskDone = false; 
		mFontManager.LoadFont(mFontManager.BIG); 
		mLoadingLogo = Image.createImage("/menu/loading_logo.png"); 
    } 
    public void Reset() 
    { 
		iTaskNum = 0; 
		bTaskNoted = false; 
		bTaskDone = false; 
    } 
    public void Destroy() throws IOException 
    { 
		iTaskNum = 0; 
		bTaskNoted = false; 
		bTaskDone = false; 
		mFontManager.UnLoadFont(mFontManager.BIG); 
    }     
     
    public void NextTaskIfDone() 
    { 
		if (bTaskDone) 
			NextTask(); 
    } 
    public void NextTask() 
    { 
			iTaskNum++; 
			bTaskNoted = false; 
			bTaskDone = false; 
	} 
    // Показывает текущее ли это задание. 
    public boolean isCurrentTask( int n ) 
    { 
		if (n != iTaskNum) 
			return false; 
		return true; 
	} 
    // Добавить задание в очереди с номером n, подписывать надпись s, состояние в загрузке ( 100 - 100% ) w 
    public boolean TaskReady( int n, String s, int w, Graphics g ) 
    { 
		if (n != iTaskNum) 
			return false; 
 
		if ( bTaskDone )  
			return false; // Уже не это задание. Ждем когда запустят NextTaskIfDone() 
 
		// Задание Текущее, но не вывели ещё надпись. 
		g.setColor(0x000000); 
		g.fillRect(0, 0, g.getClipWidth(), g.getClipHeight()); 
 
		g.drawImage(mLoadingLogo, g.getClipWidth()/2, BAR_Y_COORD-3, Graphics.HCENTER | Graphics.BOTTOM); 
 
		mFontManager.Print(mFontManager.BIG, g, s, (g.getClipWidth()-s.length()*8/*mFont.mWidth*/)/2, BAR_Y_COORD+BAR_HEIGHT+5); // Центрованная надпись. 
 
		g.setColor(0xFFFFFF); 
		g.drawRect( (g.getClipWidth()-BAR_WIDTH)/2, BAR_Y_COORD, BAR_WIDTH, BAR_HEIGHT); 
		g.setColor(0xFF8040); 
		g.fillRect( (g.getClipWidth()-BAR_WIDTH)/2+1, BAR_Y_COORD+1, BAR_WIDTH*w/100-2, BAR_HEIGHT-2); 
 
		if ( bTaskNoted )  
		{ 
			bTaskDone = true; 
			return true; 
		} 
		bTaskNoted = true; 
		return false; // Загружать ещё рано. 
    } 
}