30 lines
2.0 KiB
C
30 lines
2.0 KiB
C
|
|
#pragma once
|
|||
|
|
// -----------------------------------------------------------------------------
|
|||
|
|
// Мелочь, общая для всякого, кто рисует спрайты руками: движок и игра.
|
|||
|
|
//
|
|||
|
|
// Вынесено из render/sprites.cpp, потому что тайлы пола и стен переехали в
|
|||
|
|
// движок (engine/tileset.h), а рисуются они тем же кодом, что и всё остальное.
|
|||
|
|
// Держать две копии наклона ромба — верный способ получить пол и обстановку
|
|||
|
|
// в разных изометриях.
|
|||
|
|
// -----------------------------------------------------------------------------
|
|||
|
|
#include <cstdint>
|
|||
|
|
|
|||
|
|
#include "engine/framebuffer.h"
|
|||
|
|
|
|||
|
|
// Затемнить/осветлить цвет (множитель по RGB, альфа сохраняется).
|
|||
|
|
uint32_t ShadeColor(uint32_t c, float k);
|
|||
|
|
|
|||
|
|
// Занятая часть строки y для ромба dw x dh. Шаг ступеньки — dw/(dh/2), то есть
|
|||
|
|
// ровно наклон 2:1: всё, что стоит на полу, обязано быть в одной изометрии
|
|||
|
|
// с полом, иначе объект выглядит приклеенным к экрану.
|
|||
|
|
void DiamondRowN(int y, int dw, int dh, int& x0, int& x1);
|
|||
|
|
|
|||
|
|
// Ромба размером с плиту пола здесь БОЛЬШЕ НЕТ: форму плиты знает проекция
|
|||
|
|
// (g_proj.TileRow), и при виде сверху плита не ромб, а квадрат. Помощник,
|
|||
|
|
// рисующий ромб мимо проекции, — это ровно тот способ снова получить пол и
|
|||
|
|
// обстановку в разных видах.
|
|||
|
|
|
|||
|
|
// Обводка по силуэту: любой непрозрачный пиксель, у которого есть прозрачный
|
|||
|
|
// 4-сосед (или край спрайта), перекрашивается в outline.
|
|||
|
|
void OutlineSilhouette(Sprite& s, uint32_t outline);
|