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 ); 
		} 
	} 
	 
}