# Renderer

Класс для работы с графикой. Использовать рекомендуется в коллбеке OnDraw

# Общие методы

# GetScreenSize

Получает разрешение экрана пользователя

Возвращаемые значения:

  • width - number
  • height - number

Пример использования:

let exampleScript = {};

exampleScript.OnScriptLoad = () => {
    let [width, height] = Renderer.GetScreenSize();
    
    console.log(`Разрешение экрана пользователя: ${width}x${height}`);
};

RegisterScript(exampleScript);

# WorldToScreen

Преобразует координаты мира в координаты на экране

Аргументы:

Возвращаемые значения:

  • x - number
  • y - number
  • isOnScreen - true | false. Находятся ли координаты в пределах экрана пользователя, учитывается разрешение экрана

Пример использования:

let exampleScript = {};

exampleScript.OnDraw = () => {
    // В примере показана отрисовка прямоугольника у Dire T1 на миду, если координаты находятся в видимости экрана
    let [x, y, isOnScreen] = Renderer.WorldToScreen(new Vector(0, 0, 0));
    
    if(!isOnScreen) {
        return;
    }
    
    // Устанавливаем белый цвет
    Renderer.SetDrawColor(255, 255, 255, 255);
    Renderer.DrawFilledRect(x, y, 100, 100);
    console.log(`Нарисован прямоугольник в координатах экрана: {${x}; ${y}}`);
};

RegisterScript(exampleScript);

# IsOnScreen

Проверяет находятся ли координаты на экране клиента

Аргументы:

  • x - number
  • y - number

Возвращаемые значения:

  • true | false

Пример использования:

let exampleScript = {};

exampleScript.OnDraw = () => {
    let [x, y] = Renderer.WorldToScreen(new Vector(0, 0, 0));
    
    if(Renderer.IsOnScreen(x, y)) {
        console.log('Координаты на экране');
    } else {
        console.log('Координат НЕТ на экране');
    }
};

RegisterScript(exampleScript);

# SetTopMost

Переключает отрисовку поверх всех окон Dota 2

WARNING

Обратите внимание на то, что это влияет абсолютно на все скрипты. Если отрисовка была включена в одном из скриптов, то она будет поверх всех окон и в остальных скриптах

Аргументы:

  • enable - true | false

Пример использования:

let exampleScript = {};

exampleScript.OnDraw = () => {
    let [x, y] = Renderer.WorldToScreen(new Vector(0, 0, 0));
    
    Renderer.SetTopMost(true);
    
    // Прямоугольник будет виден везде, даже поверх окна настроек.
    Renderer.SetDrawColor(255, 255, 255, 255);
    Renderer.DrawFilledRect(0, 0, 100, 100);
};

RegisterScript(exampleScript);

# Работа с изображениями

# LoadImage

Загружает изображение в память для дальнейшей отрисовки

Аргументы:

  • fileName - string. Путь до изображения

Возвращаемые значения:

  • handle - LoadedImage. Handle для дальнейшей работы с изображением в функции, например, DrawImage

Пример использования:

let exampleScript = {};

// Рекомендуем хранить handle изображения в отдельной переменной 
// чтобы не загружать его каждый раз
let imageHandle;

exampleScript.OnDraw = () => {
    // Если изображение не загружено в память, мы загружаем его
    if(!imageHandle) {
        imageHandle = Renderer.LoadImage(`panorama/images/spellicons/techies_remote_mines_png.vtex_c`);
    }
    
    // В примере показана отрисовка картинки у Dire T1 на миду, 
    // если координаты находятся в видимости экрана
    let [x, y, isOnScreen] = Renderer.WorldToScreen(new Vector(0, 0, 0));
    
    if(!isOnScreen) {
        return;
    }
    
    // Устанавливаем белый цвет картинке, 
    // благодаря этому она будет выглядеть как оригинальная
    Renderer.SetDrawColor(255, 255, 255, 255);
    Renderer.DrawImage(imageHandle, x, y, 100, 100);
    console.log(`Нарисована иконка мин в координатах экрана: {${x}; ${y}}`);
};

RegisterScript(exampleScript);

# DrawImage

Отрисовывает изображение в координатах экрана, принимая LoadedImage в каачестве картинки

Аргументы:

  • imageHandle - LoadedImage
  • x - number
  • y - number
  • width - number
  • height - number
  • liveTime - number в секундах. Если указано 0, то картинка будет отображаться ровно 1 кадр. По умолчанию 0

Пример использования:

let exampleScript = {};

// Рекомендуем хранить handle изображения в отдельной переменной 
// чтобы не загружать его каждый раз
let imageHandle;

exampleScript.OnDraw = () => {
    // Если изображение не загружено в память, мы загружаем его
    if(!imageHandle) {
        imageHandle = Renderer.LoadImage(`panorama/images/spellicons/techies_remote_mines_png.vtex_c`);
    }
    
    // В примере показана отрисовка картинки у Dire T1 на миду, 
    // если координаты находятся в видимости экрана
    let [x, y, isOnScreen] = Renderer.WorldToScreen(new Vector(0, 0, 0));
    
    if(!isOnScreen) {
        return;
    }
    
    // Устанавливаем белый цвет картинке, 
    // благодаря этому она будет выглядеть как оригинальная
    Renderer.SetDrawColor(255, 255, 255, 255);
    Renderer.DrawImage(imageHandle, x, y, 100, 100);
    console.log(`Нарисована иконка мин в координатах экрана: {${x}; ${y}}`);
};

RegisterScript(exampleScript);

# Работа с текстом

# LoadFont

Загружает шрифт в память

ПЛОХО

Не вызывайте эту функцию слишком часто, так как у вас будет крашить игру из-за переполнения памяти. Рекомендуем загрузить требуемый шрифт при инициализации скрипта и затем использовать в коллбеке OnDraw.

Аргументы:

  • name - string. Название шрифта
  • size - number. Размер шрифта
  • weight - Enum.FontWeight. Толщина шрифта
  • flags - Enum.FontFlags. Флаги шрифта, по умолчанию null

Пример использования:

let exampleScript = {};
let font = Renderer.LoadFont('Arial', 14, Enum.FontWeight.NORMAL);

exampleScript.OnDraw = () => {
    // В примере показана отрисовка текста с обводкой у Dire T1 на миду, 
    // если координаты находятся в видимости экрана
    let [x, y, isOnScreen] = Renderer.WorldToScreen(new Vector(0, 0, 0));
    
    if(!isOnScreen) {
        return;
    }
    
    // Ставим белый цвет шрифту
    Renderer.SetDrawColor(255, 255, 255, 255);
    Renderer.DrawText(font, x, y, 'Hello world!');
};

RegisterScript(exampleScript);

# DrawText

Рисует текст без обводки

Аргументы:

  • font - Font
  • x - number
  • y - number
  • text - string
  • liveTime - number в секундах. Если указано 0, то картинка будет отображаться ровно 1 кадр. По умолчанию 0

Пример использования:

let exampleScript = {};
let font = Renderer.LoadFont('Arial', 14, Enum.FontWeight.NORMAL);

exampleScript.OnDraw = () => {
    // В примере показана отрисовка текста у Dire T1 на миду, 
    // если координаты находятся в видимости экрана
    let [x, y, isOnScreen] = Renderer.WorldToScreen(new Vector(0, 0, 0));
    
    if(!isOnScreen) {
        return;
    }
    
    // Ставим белый цвет тексту
    Renderer.SetDrawColor(255, 255, 255, 255);
    Renderer.DrawText(font, x, y, 'Hello world!');
};

RegisterScript(exampleScript);

# DrawTextDef

// TODO: сделать описание и пример

Аргументы:

  • x - number
  • y - number
  • text - string

# DrawTextCentered

Рисует центрированный текст без обводки. Аргументы, пример использования: см. DrawText

# DrawOutlineText

Рисует текст с обводкой. Цвет обводки можно установить с помощью SetDrawColor. Рекомендуем эту функцию для отрисовки текста в игровом мире, благодаря высокой контрастности текст будет легче прочитать.

Аргументы:

  • font - Font
  • x - number
  • y - number
  • text - string
  • r - 0-255. Устанавливает цвет текста по R-каналу
  • g - 0-255. Устанавливает цвет текста по G-каналу
  • b - 0-255. Устанавливает цвет текста по B-каналу
  • alpha - 0-255. Устанавливает прозрачность текста

Пример использования:

let exampleScript = {};
let font = Renderer.LoadFont('Arial', 14, Enum.FontWeight.NORMAL);

exampleScript.OnDraw = () => {
    // В примере показана отрисовка текста с обводкой у Dire T1 на миду, 
    // если координаты находятся в видимости экрана
    let [x, y, isOnScreen] = Renderer.WorldToScreen(new Vector(0, 0, 0));
    
    if(!isOnScreen) {
        return;
    }
    
    // Ставим чёрный цвет обводке
    Renderer.SetDrawColor(255, 255, 255, 255);
    Renderer.DrawOutlineText(font, x, y, 'Hello world!', 0, 0, 0, 255);
};

RegisterScript(exampleScript);

# GetTextSize

Получает размер заданного текста

Аргументы:

  • font - Font
  • text - string

Возвращаемые значения:

  • width - number
  • height - number

Пример использования:

let exampleScript = {};
let font = Renderer.LoadFont('Arial', 14, Enum.FontWeight.NORMAL);

exampleScript.OnDraw = () => {
    const text = 'Hello world!';
    
    let [width, height] = Renderer.GetTextSize(font, text);
    console.log(`Размер текста: ${width}x${height}`);
};

RegisterScript(exampleScript);

# DrawWorldText

Отрисовывает текст по координатам в мире

ПОДСКАЗКА

Если камера игрока сдвинется и time будет больше 0, то позиция текста будет также изменена

Аргументы:

  • font - Font
  • vec1 - Vector, позиция в игровом мире
  • text - string, текст надписи
  • time - number в секундах. Если указано 0, то картинка будет отображаться ровно 1 кадр. По умолчанию 0
let exampleScript = {};
let font = Renderer.LoadFont('Arial', 14, Enum.FontWeight.NORMAL);

exampleScript.OnDraw = () => {
    const text = 'Hello world!';
    
    Renderer.SetDrawColor(255, 255, 255, 255);
    Renderer.DrawWorldText(font, new Vector(0, 0, 0), text);
};

RegisterScript(exampleScript);

# DrawWorldTextInverted

TODO: описание. Аргументы, пример использования: см. DrawWorldText

# DrawWorldTextInvertedX

TODO: описание. Аргументы, пример использования: см. DrawWorldText

# DrawWorldTextInvertedY

TODO: описание. Аргументы, пример использования: см. DrawWorldText

# DrawWorldTextCentered

Рисует центрированный по x и y осям текст. Аргументы, пример использования: см. DrawWorldText

# DrawWorldTextCenteredX

Рисует центрированный по x оси текст. Аргументы, пример использования: см. DrawWorldText

# DrawWorldTextCenteredY

Рисует центрированный по y оси текст. Аргументы, пример использования: см. DrawWorldText

# Отрисовка линий

# DrawLine

Отрисовывает линию толщиной в 1 пиксель

Аргументы:

  • x_start - number. Координата x на экране
  • y_start - number. Координата y на экране
  • x_end - number. Координата x на экране
  • y_end - number. Координата y на экране
  • liveTime - number в секундах. Если указано 0, то картинка будет отображаться ровно 1 кадр. По умолчанию 0

Пример использование:

let exampleScript = {};

exampleScript.OnDraw = () => {
    // В примере показана отрисовка линии у Dire T1 на миду, 
    // если координаты находятся в видимости экрана
    let [x, y, isOnScreen] = Renderer.WorldToScreen(new Vector(0, 0, 0));
    
    if(!isOnScreen) {
        return;
    }
    
    // Ставим белый цвет линии
    Renderer.SetDrawColor(255, 255, 255, 255);
    Renderer.DrawLine(x, y, x + 100, y + 100);
};

RegisterScript(exampleScript);

# Отрисовка прямоугольников

# DrawFilledRect

Отрисовывает заполненный прямоугольник

Аргументы:

  • x - number. Координата x на экране
  • y - number. Координата y на экране
  • width - number. Ширина прямоугольника
  • height - number. Высота прямоугольника
  • liveTime - number в секундах. Если указано 0, то картинка будет отображаться ровно 1 кадр. По умолчанию 0

Пример использование:

let exampleScript = {};

exampleScript.OnDraw = () => {
    // В примере показана отрисовка заполненного прямоугольника у Dire T1 на миду, 
    // если координаты находятся в видимости экрана
    let [x, y, isOnScreen] = Renderer.WorldToScreen(new Vector(0, 0, 0));
    
    if(!isOnScreen) {
        return;
    }
    
    // Ставим белый цвет прямоугольнику
    Renderer.SetDrawColor(255, 255, 255, 255);
    Renderer.DrawFilledRect(x, y, 100, 100);
};

RegisterScript(exampleScript);

# DrawWorldFilledRect

Отрисовывает заполненный прямоугольник по координатам в игровом мире

Аргументы:

  • vec1 - Vecotr
  • w - number. Ширина прямоугольника
  • h - number. Высота прямоугольника
  • time - number в секундах. Если указано 0, то картинка будет отображаться ровно 1 кадр. По умолчанию 0

Пример использование:

let exampleScript = {};

exampleScript.OnDraw = () => {
    Renderer.SetDrawColor(255, 255, 255, 255);
    Renderer.DrawWorldFilledRect(new Vector(0, 0, 0), 100, 100);
};

RegisterScript(exampleScript);

# DrawWorldFilledRectCentered

Отрисовывает заполненный центрированный по x и y осям прямоугольник по координатам в игровом мире. Аргументы, пример использования: см. DrawWorldFilledRectCentered

# DrawWorldFilledRectCenteredX

Отрисовывает заполненный центрированный по x оси прямоугольник по координатам в игровом мире. Аргументы, пример использования: см. DrawWorldFilledRectCentered

# DrawWorldFilledRectCenteredY

Отрисовывает заполненный центрированный по y оси прямоугольник по координатам в игровом мире. Аргументы, пример использования: см. DrawWorldFilledRectCentered

# Отрисовка рамок

# DrawOutlineRect

Отрисовывает рамку

Аргументы:

  • x - number. Координата x на экране
  • y - number. Координата y на экране
  • width - number. Ширина прямоугольника
  • height - number. Высота прямоугольника
  • liveTime - number в секундах. Если указано 0, то картинка будет отображаться ровно 1 кадр. По умолчанию 0

Пример использование:

let exampleScript = {};

exampleScript.OnDraw = () => {
    // В примере показана отрисовка рамки прямоугольника у Dire T1 на миду, 
    // если координаты находятся в видимости экрана
    let [x, y, isOnScreen] = Renderer.WorldToScreen(new Vector(0, 0, 0));
    
    if(!isOnScreen) {
        return;
    }
    
    // Ставим белый цвет рамке
    Renderer.SetDrawColor(255, 255, 255, 255);
    Renderer.DrawOutlineRect(x, y, 100, 100);
};

RegisterScript(exampleScript);

# DrawWorldOutlineRect

Отрисовывает рамку по координатам в игровом мире

Аргументы:

  • vec1 - Vecotr
  • w - number. Ширина прямоугольника
  • h - number. Высота прямоугольника
  • time - number в секундах. Если указано 0, то картинка будет отображаться ровно 1 кадр. По умолчанию 0

Пример использование:

let exampleScript = {};

exampleScript.OnDraw = () => {
    Renderer.SetDrawColor(255, 255, 255, 255);
    Renderer.DrawWorldOutlineRect(new Vector(0, 0, 0), 100, 100);
};

RegisterScript(exampleScript);

# DrawWorldOutlineRectCentered

Отрисовывает рамку центрированную по x и y осям по координатам в игровом мире. Аргументы, пример использования: см. DrawWorldOutlineRect

# DrawWorldOutlineRectCenteredX

Отрисовывает рамку центрированную по x оси по координатам в игровом мире. Аргументы, пример использования: см. DrawWorldOutlineRect

# DrawWorldOutlineRectCenteredY

Отрисовывает рамку центрированную по y оси по координатам в игровом мире. Аргументы, пример использования: см. DrawWorldOutlineRect