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; // Загружать ещё рано.
}
}