Низкоуровневый API Ray

Low Level API (Engine.*) предназначен для гибкого создания 2D-игр.

Каждая функция API принимает один параметр. Параметр должен быть словарем, а аргументы должны храниться в виде пар «ключ-значение».

Скелет

// Не определяйте переменные вне функций, потому что это синтаксическая ошибка.

// Вызывается при создании окна.
func setup() {
    // Возвращает конфигурацию окна.
    return {
        width: 1280,
        height: 720,
        title: "My First Game"
    };
}

// Вызывается один раз при запуске игры.
func start() {
    // Здесь следует определять глобальные переменные.
    posX = 0;
    posY = 0;

    // Создает белую текстуру 100x100.
    tex = Engine.createColorTexture({
        width: 100,
        height: 100,
        r: 255, g: 255, b: 255, a: 255
    });
}

// Вызывается каждый кадр перед отрисовкой.
func update() {
    posX = Engine.mousePosX;
    posY = Engine.mousePosY;
}

// Вызывается каждый кадр для отрисовки графики.
func render() {
    Engine.draw({ texture: tex, x: posX, y: posY });
}

Отладка

print()

Этот API выводит строку или дамп объекта. Принимает только несловарный аргумент.

func dumpEnemies() {
    if (Engine.isGamepadXPressed) {
        print("[Текущие враги]");
        print(enemies);
    }
}

Время

Абсолютное время

ПеременнаяОписание
Engine.millisecВремя в миллисекундах.
func update() {
    // Получает секунды, прошедшие с прошлого вызова.
    var curTime = Engine.millisec;
    var dt = (curTime - lastTime) * 0.001;
    lastTime = curTime;

    updateCharacters(dt);
}

Engine.getDate()

Возвращает словарь даты.

func frame() {
    var date = Engine.getDate({});

    var year  = date.year;
    var month = date.month;
    var day   = date.day;
    var hour  = date.hour;
    var min   = date.minute;
    var sec   = date.second;
}

Ввод

Это переменные, а не функции.

ПеременнаяОписание
Engine.mousePosXПоложение мыши по X.
Engine.mousePosYПоложение мыши по Y.
Engine.isMouseLeftPressedСостояние левой кнопки мыши.
Engine.isMouseRightPressedСостояние правой кнопки мыши.
Engine.isEscapeKeyPressedСостояние клавиши Escape.
Engine.isReturnKeyPressedСостояние клавиши Return.
Engine.isSpaceKeyPressedСостояние клавиши Space.
Engine.isTabKeyPressedСостояние клавиши Tab.
Engine.isBackspaceKeyPressedСостояние клавиши Backspace.
Engine.isDeleteKeyPressedСостояние клавиши Delete.
Engine.isHomeKeyPressedСостояние клавиши Home.
Engine.isEndKeyPressedСостояние клавиши End.
Engine.isPageupKeyPressedСостояние клавиши PageUp.
Engine.isPagedownKeyPressedСостояние клавиши PageDown.
Engine.isShiftKeyPressedСостояние клавиши Shift.
Engine.isControlKeyPressedСостояние клавиши Control.
Engine.isAltKeyPressedСостояние клавиши Alt.
Engine.isUpKeyPressedСостояние стрелки вверх.
Engine.isDownKeyPressedСостояние стрелки вниз.
Engine.isRightKeyPressedСостояние стрелки вправо.
Engine.isLeftKeyPressedСостояние стрелки влево.
Engine.isAKeyPressedСостояние клавиши 'A'.
Engine.isBKeyPressedСостояние клавиши 'B'.
Engine.isCKeyPressedСостояние клавиши 'C'.
Engine.isDKeyPressedСостояние клавиши 'D'.
Engine.isEKeyPressedСостояние клавиши 'E'.
Engine.isFKeyPressedСостояние клавиши 'F'.
Engine.isGKeyPressedСостояние клавиши 'G'.
Engine.isHKeyPressedСостояние клавиши 'H'.
Engine.isIKeyPressedСостояние клавиши 'I'.
Engine.isJKeyPressedСостояние клавиши 'J'.
Engine.isKKeyPressedСостояние клавиши 'K'.
Engine.isLKeyPressedСостояние клавиши 'L'.
Engine.isMKeyPressedСостояние клавиши 'M'.
Engine.isNKeyPressedСостояние клавиши 'N'.
Engine.isOKeyPressedСостояние клавиши 'O'.
Engine.isPKeyPressedСостояние клавиши 'P'.
Engine.isQKeyPressedСостояние клавиши 'Q'.
Engine.isRKeyPressedСостояние клавиши 'R'.
Engine.isSKeyPressedСостояние клавиши 'S'.
Engine.isTKeyPressedСостояние клавиши 'T'.
Engine.isUKeyPressedСостояние клавиши 'U'.
Engine.isVKeyPressedСостояние клавиши 'V'.
Engine.isWKeyPressedСостояние клавиши 'W'.
Engine.isXKeyPressedСостояние клавиши 'X'.
Engine.isYKeyPressedСостояние клавиши 'Y'.
Engine.isZKeyPressedСостояние клавиши 'Z'.
Engine.is1KeyPressedСостояние клавиши '1'.
Engine.is2KeyPressedСостояние клавиши '2'.
Engine.is3KeyPressedСостояние клавиши '3'.
Engine.is4KeyPressedСостояние клавиши '4'.
Engine.is5KeyPressedСостояние клавиши '5'.
Engine.is6KeyPressedСостояние клавиши '6'.
Engine.is7KeyPressedСостояние клавиши '7'.
Engine.is8KeyPressedСостояние клавиши '8'.
Engine.is9KeyPressedСостояние клавиши '9'.
Engine.is0KeyPressedСостояние клавиши '0'.
Engine.isF1KeyPressedСостояние клавиши F1.
Engine.isF2KeyPressedСостояние клавиши F2.
Engine.isF3KeyPressedСостояние клавиши F3.
Engine.isF4KeyPressedСостояние клавиши F4.
Engine.isF5KeyPressedСостояние клавиши F5.
Engine.isF6KeyPressedСостояние клавиши F6.
Engine.isF7KeyPressedСостояние клавиши F7.
Engine.isF8KeyPressedСостояние клавиши F8.
Engine.isF9KeyPressedСостояние клавиши F9.
Engine.isF10KeyPressedСостояние клавиши F10.
Engine.isF11KeyPressedСостояние клавиши F11.
Engine.isF12KeyPressedСостояние клавиши F12.
Engine.isGamepadUpPressedСостояние стрелки вверх на геймпаде.
Engine.isGamepadDownPressedСостояние стрелки вниз на геймпаде.
Engine.isGamepadLeftPressedСостояние стрелки влево на геймпаде.
Engine.isGamepadRightPressedСостояние стрелки вправо на геймпаде.
Engine.isGamepadAPressedСостояние кнопки A на геймпаде.
Engine.isGamepadBPressedСостояние кнопки B на геймпаде.
Engine.isGamepadXPressedСостояние кнопки X на геймпаде.
Engine.isGamepadYPressedСостояние кнопки Y на геймпаде.
Engine.isGamepadLPressedСостояние кнопки L на геймпаде.
Engine.isGamepadRPressedСостояние кнопки R на геймпаде.
Engine.gamepadAnalogX1Аналоговый вход геймпада 1 по X (-32768, 32767)
Engine.gamepadAnalogY1Аналоговый вход геймпада 1 по Y (-32768, 32767)
Engine.gamepadAnalogX2Аналоговый вход геймпада 2 по X (-32768, 32767)
Engine.gamepadAnalogY2Аналоговый вход геймпада 2 по Y (-32768, 32767)
Engine.gamepadAnalogLАналоговый вход L на геймпаде (-32768, 32767)
Engine.gamepadAnalogRАналоговый вход R на геймпаде (-32768, 32767)
func update() {
    if (Engine.isMouseLeftPressed) {
        player.x = player.x + 100;
    }
}

Отрисовка

Engine.createColorTexture()

Этот API создает текстуру с указанным цветом и возвращает текстуру.

Имя аргументаОписание
widthШирина текстуры.
heightВысота текстуры.
rКрасный компонент.
gЗеленый компонент.
bСиний компонент.
aАльфа-компонент.
func createBlockTexture() {
    blockTex = Engine.createColorTexture({
                   width:  16,
                   height: 16,
                   r:      255,
                   g:      255,
                   b:      255,
                   a:      255
               });
}

Engine.loadTexture()

Этот API загружает текстуру из папки assets и возвращает текстуру.

Имя аргументаОписание
fileИмя файла для загрузки.
func loadPlayerTexture() {
   playerTex = Engine.loadTexture({
                   file: "player.png"
               });

   var width = playerTex.width;
   var height = playerTex.height;
}

Engine.destroyTexture()

Этот API уничтожает текстуру.

Имя аргументаОписание
textureТекстура.
func destroyPlayerTexture() {
    Engine.loadTexture({
        texture: playerTex
    });
}

Engine.renderTexture()

Этот API отрисовывает текстуру на экран.

Имя аргументаОписание
dstLeftКоордината X на экране.
dstTopКоордината Y на экране.
dstWidthШирина на экране.
dstHeightВысота на экране.
textureТекстура.
srcLeftX левого верхнего угла текстуры.
srcTopY левого верхнего угла текстуры.
srcWidthШирина прямоугольника текстуры.
srcHeightВысота прямоугольника текстуры.
alphaЗначение альфы (0-255).
func renderPlayer() {
    Engine.renderTexture({
        dstLeft:   playerPos.x,
        dstTop:    playerPos.y,
        dstWidth:  playerTex.width,
	dstHeight: playerTex.height,
        texture:   playerTex,
        srcLeft:   0,
        srcTop:    0,
        srcWidth:  playerTex.width,
        srcHeight: playerTex.height,
        alpha:     255
    });
}

Engine.draw()

Этот API отрисовывает текстуру на экран (упрощенная версия Engine.renderTexture().)

Имя аргументаОписание
textureТекстура.
xКоордината X на экране.
yКоордината Y на экране.
func renderPlayer() {
    Engine.draw({
        texture: playerTex,
        x:       playerPos.x,
        y:       playerPos.y
    });
}

Engine.renderTexture3D()

Этот API отрисовывает текстуру на экран.

Имя аргументаОписание
x1Координата X1 на экране.
y1Координата Y1 на экране.
x2Координата X2 на экране.
y2Координата Y2 на экране.
x3Координата X3 на экране.
y3Координата Y3 на экране.
x4Координата X4 на экране.
y4Координата Y4 на экране.
textureТекстура.
srcLeftX левого верхнего угла текстуры.
srcTopY левого верхнего угла текстуры.
srcWidthШирина прямоугольника текстуры.
srcHeightВысота прямоугольника текстуры.
alphaЗначение альфы (0-255).
func renderPlayer() {
    Engine.renderTexture({
        dstLeft:   playerPos.x,
        dstTop:    playerPos.y,
        dstWidth:  playerTex.width,
	dstHeight: playerTex.height,
        texture:   playerTex,
        srcLeft:   0,
        srcTop:    0,
        srcWidth:  playerTex.width,
        srcHeight: playerTex.height,
        alpha:     255
    });
}

Engine.loadFont()

Этот API загружает файл шрифта из папки assets в указанный слот шрифта.

Имя аргументаОписание
slotИндекс слота шрифта. (0-3)
fileИмя файла для загрузки.
func loadNotoSansFont() {
    Engine.loadFont({ slot: 0, file: "NotoSans.ttf" });
}

Engine.createTextTexture()

Этот API создает текстуру и рисует на ней текст.

Имя аргументаОписание
slotИндекс слота шрифта. (0-3)
textТекст для рисования.
sizeРазмер шрифта.
rКрасный компонент.
gЗеленый компонент.
bСиний компонент.
aАльфа-компонент.
func createScoreTexture() {
    scoreTex = Engine.createTextTexture({
                   slot: 0,
                   text: "Score: " + score,
                   size: 32,
                   r:    255,
                   g:    255,
                   b:    255,
                   a:    255
               });
}

Звук

Engine.playSound()

Этот API начинает воспроизведение звукового файла из папки assets на указанной звуковой дорожке.

Имя аргументаОписание
streamИндекс дорожки. (0-3)
fileФайл для воспроизведения.
func playJumpSound() {
    Engine.playSound({ stream: 0, file: "jump.ogg" });
}

Engine.playSoundLoop()

Этот API начинает воспроизведение звукового файла из папки assets на указанной звуковой дорожке.

Имя аргументаОписание
streamИндекс дорожки. (0-3)
fileФайл для воспроизведения.
func playBGM() {
    Engine.playSoundLoop({ stream: 0, file: "jump.ogg" });
}

Engine.stopSound()

Этот API останавливает воспроизведение звука на указанной звуковой дорожке.

Имя аргументаОписание
streamИндекс дорожки. (0-3)
func playJumpSound() {
    Engine.stopSound({ stream: 0 });
}

Engine.setSoundVolume()

Этот API задает громкость звука на указанной звуковой дорожке.

Имя аргументаОписание
streamИндекс дорожки. (0-3, -1 для master)
volumeЗначение громкости. (0-1.0)
func playJumpSound() {
    Engine.setSoundVolume({
        stream: 0,
        volume: 1.0
    });
}

Данные сохранения

Engine.writeSaveData()

Этот API записывает значение сохранения данных, соответствующее строковому ключу. Если значение сохранения слишком велико, этот API завершится с ошибкой.

Имя аргументаОписание
keyСтрока ключа.
valueЗначение. (целое число, число с плавающей точкой, массив или словарь)

Engine.readSaveData()

Этот API читает значение сохранения данных, соответствующее строковому ключу. Возвращаемое значение будет объектом, представляющим значение сохранения данных. Этот API завершится с ошибкой, если указанный ключ недоступен.

Имя аргументаОписание
keyСтрока ключа.

Engine.checkSaveData()

Этот API проверяет, существует ли сохранение данных для строкового ключа. Возвращаемое значение - логическое.

Имя аргументаОписание
keyСтрока ключа.