www.pudn.com > MobiCraft_src.rar > Message.java
// style: tabs, tabsize=4, style=ANSI
//+----------------------------------------------------------------------+
// Copyleft 2007. MobiCraft Team. GNU GPL license vesion 2.
// Made by Andrew Denisov and Zahar Semenov
//+----------------------------------------------------------------------+
// Filename: Message.java
//+----------------------------------------------------------------------+
// Comment: Draw text for needed time over all other layers.
//+----------------------------------------------------------------------+
package app;
import fonts.FontManager;
import java.util.Vector;
import java.io.*;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
class TOneMessage
{
int TTL; // Время жизни(time to live), при каждом Update() уменьшается и если неположительно, то сообщение удаляется.
String s;
}
public class Message
{
public MainCanvas mMainCanvas;
Vector vMessages;
public static final int MAX_STRINGS_TO_DRAW = 10;
public static final int DEFAULT_TIME_TO_LIVE = 8000;
public Message(MainCanvas m)
{
mMainCanvas = m;
}
public void Init()
{
mMainCanvas.mFontManager.LoadFont(mMainCanvas.mFontManager.SMALL);
vMessages = new Vector(MAX_STRINGS_TO_DRAW);
}
public void Destroy()
{
mMainCanvas.mFontManager.UnLoadFont(mMainCanvas.mFontManager.SMALL);
vMessages.removeAllElements();
vMessages = null;
}
public void Send(String s)
{
TOneMessage m = new TOneMessage();
m.TTL = DEFAULT_TIME_TO_LIVE; // Дефолтовое время жизни в мсек.
m.s = s;
if ( vMessages.size() == MAX_STRINGS_TO_DRAW)
vMessages.removeElementAt(0); // Выпихивается одно сообщение.
vMessages.addElement(m);
}
public void Update(long dt)
{
// NOTE: Цикл происходит в орбатном порядке, чтобы не было косяков с .removeElementAt(i);
int size = vMessages.size();
for (int i=size-1; i>=0; i--)
{
((TOneMessage)(vMessages.elementAt(i))).TTL-=dt;
if ( ((TOneMessage)(vMessages.elementAt(i))).TTL <=0 )
vMessages.removeElementAt(i);
}
}
public void Draw(Graphics g)
{
int size = vMessages.size();
for (int i=size-1; i>=0; i--)
{
mMainCanvas.mFontManager.Print( mMainCanvas.mFontManager.SMALL,
g, ((TOneMessage)(vMessages.elementAt(i))).s, 1, 150-(size-1-i)*8 );
}
}
}