Вместо псевдослучайных символов будет любая нужная информация выводимая прямо на экран приложения.
Базовый класс логера наследует 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()