GuiLog


Вместо псевдослучайных символов будет любая нужная информация выводимая прямо на экран приложения.

Базовый класс логера наследует GuiElement:

/// @description GUI_LogTypewriter
//Site:   MidaDev.ru
//Author: Dimusikus

function GUI_LogTypewriter2() : GUIElement() constructor 
{	
	//*******************************************************************
	#region Constructor	
	my_name_is		= other.my_name_is;	
	first_element	= 2;		//первые две строки идёт как правило заголовок, название лога и т.д.
	color_default	= c_black;	//цыет по дефолту с которым лог рисуется
	
	
	_other	= other;	
	loglist = new List();
	info_new();	
	maxY = round(height / char_height);	//количество строк по высоте
	GUI_Elements.add_element(my_name_is, self);
	GUI_Elements.add_callback(my_name_is, log);
	#endregion		
	//*******************************************************************
	
	//*******************************************************************
	static clear = function()
	{
		loglist.clear();
		info_new();			
		return;
	}
	//*******************************************************************	
	//удаляет первый элемент лога, 0,1 - заняты, лог идёт со 2го элемента
	static delete_first = function()
	{
		//если лог перевалил количество строк на экране то удаляем верхний элемент, т.е. скролл
		if(loglist.size() > maxY)
		{	//и если он допечатался еще к томуже			
			if loglist.items(2).typewriter==-1 then loglist.delete_item(first_element);				
		};		
		//если аврал лога то очищаем всё нахуй тогда
		if loglist.size()>50 then
		{
			clear();
		}
	}
	//*******************************************************************
	static log = function(_line, _color=undefined)
	{	
		//trace(_line);
		//сброс таймера очистки ,т.к. пришли новые данные
		_other.clear_timer_initial();
		var c = (_color == undefined) ? color_default : _color;
		
		var t=new EString(_line, true, c);		
		loglist.add_item(t);		
		
		delete_first();
		info_update();		
	}
	//*******************************************************************
	static info_new = function()
	{
		//loglist.add_item( new EString(my_name_is) );
		//loglist.add_item( new EString("===================") );
		loglist.add_item( new EString(my_name_is, true, color_default ));		
		loglist.add_item( new EString("===================", true, color_default ));
	};
	//*******************************************************************
	static info_update = function()
	{			
		//елси draw_header не отключен то ведём стату
		if first_element<>0 then
		loglist.items(0).set( my_name_is + " = " + string(loglist.size()) + " items.");		
	};
	//*******************************************************************
	static draw = function() 
	{	
		//draw_self();
		draw_set_halign(fa_left);
		draw_set_valign(fa_top);
		draw_set_font(font);
		var y_offset = 2;
		var logsiz = loglist.size()-1;
		var max_lines = floor(height / char_height) - 0 ;
		
		for(var i=0; i<=max_lines; i++)
		{
			if i>logsiz then break;	
			draw_text_effect(2 + x,y+y_offset,loglist.items(i), width);			
			y_offset += char_height; 
		}
		//рисовать ли бордюрную рамку вокруг логгера
		if _other.draw_border then{draw_set_color(c_black); draw_rectangle(_other.bbox_left, _other.bbox_top, _other.bbox_right, _other.bbox_bottom, true);	}
	}	
	//*******************************************************************
	//set(value);
	//*******************************************************************
}


В скрипте используется вспомогательный класс List(). А так-же класс EString().

Рисование цветного текста с расширенным функционалом(эффектами) реализуется функцией  Draw_text_effect()