XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Барахолка
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Результаты опроса: Как вам система?
Класно, ни где такого не видел 5 23.81%
Нормально, но предпочитаю текст одного цвета 10 47.62%
Уже давно юзаю подобную 6 28.57%
Голосовавшие: 21. Вы еще не голосовали в этом опросе

Ответ
 
Lobster

offline
Опыт: 2,043
Активность:
Система разукрашивания текста
_______________
Делать было нечего, решил выложить пару своих давних наработок...
Разнообразные фун-ии для разукрашивания текста. Все корректно воспринимают русские буквы. Систему делал для себя, без расчета на вылаживание => мин. комментариев. Написано на cJass.
• Отличие от стандарта в том, что поддерживается киррилица:
int StringLengthTrue(string s)
string SubStringTrue(string s, int start, int end)
• Для save кодов разукрасить в зависимости от типа символа
string Colorize_Text_Simple(string s) - без кириллицы
string Colorize_Text(string s)
• Каждый символ в случайный цвет
string RecolorTextRandom(string s)
• И самое главное - плавный градиент
string RecolorTextGradual(string s, real red, real green, real blue, real red2, real green2, real blue2)
• Случайный градиент (просто define)
RecolorTextGradual.Random(string)
• Обесцветить текст и убрать переносы строк
string Decolour_Text(string s)
» Система:
library ColorizeText

#define private IsChar(symbol)  = (S2I(symbol) == 0 and symbol != "0") // Является ли символ буквой
#define private IsUpper(symbol) = (symbol == StringCase(symbol, true)) // Заглавная ли буква
#define private COLOR_FIGURE     = "|c00FFE22C"
#define private COLOR_CHAR_UPPER = "|c0079B5FF"
#define private COLOR_CHAR_LOWER = "|c0081E965"

// -------------------------------------------------------------
// Является ли символ кириллицей
define IsCyrillicLetter(string) = (IsCyrillicUpper(string) or IsCyrillicLower(string))
// Является ли символ латинским (не нужно, использовалось исключительно при создании сис-мы)
define IsRomanLetter(symbol) = (StringLength(symbol) == 1)
// -------------------------------------------------------------

private constant bool IsCyrillicUpper(string s) {
    // Является ли символ кириллицей (заглавная буква)
    return s == "А" or s == "Б" or s == "В" or s == "Г" or s == "Д" or s == "Е" or s == "Ё" or s == "Ж" or s == "З" or s == "И" \
            or s == "Й" or s == "К" or s == "Л" or s == "М" or s == "Н" or s == "О" or s == "П" or s == "Р" or s == "С" or s == "Т" \
            or s == "У" or s == "Ф" or s == "Х" or s == "Ц" or s == "Ч" or s == "Ш" or s == "Щ" or s == "Ъ" or s == "Ы" or s == "Ь" \
            or s == "Э" or s == "Ю" or s == "Я"
}
private constant bool IsCyrillicLower(string s) {
    // Является ли символ кириллицей (маленькая буква)
    return s == "а" or s == "б" or s == "в" or s == "г" or s == "д" or s == "е" or s == "ё" or s == "ж" or s == "з" or s == "и" \
            or s == "й" or s == "к" or s == "л" or s == "м" or s == "н" or s == "о" or s == "п" or s == "р" or s == "с" or s == "т" \
            or s == "у" or s == "ф" or s == "х" or s == "ц" or s == "ч" or s == "ш" or s == "щ" or s == "ъ" or s == "ы" or s == "ь" \
            or s == "э" or s == "ю" or s == "я"
}

string I2Hex(int i) {
    // Преобразует целое число (от 0 до 255) в Hex-представление
    return SubString("0123456789ABCDEF", i/16, i/16 + 1) + SubString("0123456789ABCDEF", i-(16*(i/16)), i-(16*(i/16)) + 1)
}

int StringLengthTrue(string s) {
    // Посчитать кол-во символов в строке
    int total = 0
    int length = StringLength(s)
    int i = 0
    whilenot(i >= length) {
        string symbol = SubString(s, i, i+2)
        if symbol == "|c" {
            i += 10 }
        elseif symbol == "|r" or symbol == "|n" {
            i += 2 }
        else {
            if IsCyrillicLetter(symbol) {
                i += 2 }
            elseif SubString(s, i, i+3) == "№" {
                i += 3 }
            else {
                i++
            }
            total ++
        }
    }
    return total
}

string SubStringTrue(string s, int start, int end) {
    // Взять часть строки с указанием начала и конца
    string out = ""
    bool add
    int length = StringLength(s)
    int total = 0 // Колличество букв
    int i = 0
    whilenot(i >= length) {
        string symbol = SubString(s, i, i+2)
        add = false
        if symbol == "|c" {
            i += 10 }
        elseif symbol == "|r" or symbol == "|n" {
            i += 2 }
        elseif IsCyrillicLetter(symbol) {
            add = true
            i += 2 }
        elseif SubString(s, i, i+3) == "№" {
            symbol = "№"
            add = true
            i += 3 }
        else {
            symbol = SubString(symbol, 0, 1)
            add = true
            i++
        }
        
        if add {
            total ++
            if total > start && total <= end {
                out += symbol
            }
        }
    }
    return out

}

string Colorize_Text_Simple(string s) {
    // Раскрасить текст в зависимости от типа символов
    // Не поддерживается кириллица
    string out = ""
    int length = StringLength(s)
    int i = 0
    whilenot(i == length) {
        string symbol = SubString(s, i, i+1)
        if symbol == " "           { out += " " }
        elseif not IsChar(symbol) { out += COLOR_FIGURE + symbol } // Цифра
        elseif IsUpper(symbol) { out += COLOR_CHAR_UPPER + symbol } // Заглавная буква
        else                    { out += COLOR_CHAR_LOWER + symbol } // Маленькая буква
    i++
    }
    return out + "|r"
}
string Colorize_Text(string s) {
    // Раскрасить текст в зависимости от типа символов
    string out = ""
    string color
    bool cyrillic
    int length = StringLength(s)
    int i = 0
    whilenot(i == length) {
        string symbol = SubString(s, i, i+2)
        cyrillic = false
        
        if IsCyrillicUpper(symbol) {
            cyrillic = true
            color = COLOR_CHAR_UPPER }
        elseif IsCyrillicLower(symbol) {
            cyrillic = true
            color = COLOR_CHAR_LOWER
        }
        
        if cyrillic {
            out += color + symbol
            i += 2 }
        elseif SubString(s, i, i+3) == "№" {
            out += COLOR_CHAR_LOWER + "№"
            i += 3 }
        else {
            symbol = SubString(symbol, 0, 1)
            if symbol == " " {
                out += " " }
            else {
                if not IsChar(symbol)  { color = COLOR_FIGURE } // Цифра
                elseif IsUpper(symbol) { color = COLOR_CHAR_UPPER } // Заглавная буква
                else                    { color = COLOR_CHAR_LOWER } // Маленькая буква
                out += color + symbol
            }
            i++
        }
    }
    return out + "|r"
}
string RecolorTextRandom(string s) {
    // Перекрасить текст в случайные цвета
    string out = ""
    int length = StringLength(s)
    int i = 0
    whilenot(i == length) {
        string color = "|c00" + I2Hex(GetRandomInt(35,255)) + I2Hex(GetRandomInt(35,255)) + I2Hex(GetRandomInt(35,255))
        if IsCyrillicLetter(SubString(s, i, i+2)) {
            out += color + SubString(s, i, i+2)
            i += 2 }
        elseif SubString(s, i, i+3) == "№" {
            out += color + "№"
            i += 3 }
        elseif SubString(s, i, i+1) == " " {
            out += " "
            i++ }
        else {
            out += color + SubString(s, i, i+1)
            i++
        }
    }
    return out + "|r"
}

// -------------------------------------------------------------
define <RecolorTextGradual.Random>(s) = RecolorTextGradual(s, GetRandomReal(35.,255.), GetRandomReal(35.,255.), GetRandomReal(35.,255.), GetRandomReal(35.,255.), GetRandomReal(35.,255.), GetRandomReal(35.,255.))
// -------------------------------------------------------------

string RecolorTextGradual(string s, real red, real green, real blue, real red2, real green2, real blue2) {
    // Перекрасить текст с постепенным изменением цвета
    string out = ""
    int count_symbols = StringLengthTrue(s)
    real speed_red = (red2 - red) / count_symbols
    real speed_green = (green2 - green) / count_symbols
    real speed_blue = (blue2 - blue) / count_symbols
    int length = StringLength(s)
    int i = 0
    whilenot(i == length) {
        string color = "|c00" + I2Hex(R2I(red)) + I2Hex(R2I(green)) + I2Hex(R2I(blue))
        red += speed_red
        green += speed_green
        blue += speed_blue
        if IsCyrillicLetter(SubString(s, i, i+2)) {
            out += color + SubString(s, i, i+2)
            i += 2 }
        elseif SubString(s, i, i+3) == "№" {
            out += color + "№"
            i += 3 }
        elseif SubString(s, i, i+1) == " " {
            out += " "
            i++ }
        else {
            out += color + SubString(s, i, i+1)
            i++
        }
    }
    return out + "|r"
}

string Decolour_Text(string s) {
    // Обесцветить текст и убрать переносы строк
    string out = ""
    int length = StringLength(s)
    int i = 0
    whilenot(i >= length) {
        string symbol = SubString(s, i, i+2)
        if symbol == "|c" {
            i += 10 }
        elseif symbol == "|r" or symbol == "|n" {
            i += 2 }
        else {
            out += SubString(symbol, 0, 1)
            i++
        }
    }
    return out
}

endlibrary
P.S. Если кому-то вдруг система понравится и очень захочется добавить в титры - ник "Напалм"
Прикрепленные файлы
Тип файла: w3x Colorize Text.w3x (69.9 Кбайт, 16 просмотров )

Отредактировано Lobster, 26.10.2011 в 02:47.
Старый 16.10.2011, 03:59
Suite
┌_____┐
offline
Опыт: 11,222
Активность:
Если можешь сделай на обычном jass , и тогда я ахну :D
Старый 16.10.2011, 21:06
Doc

offline
Опыт: 63,163
Активность:
screenshot.su/show.php?img=b2b3c9bf14d6ab01ebaef1c32b40d054.jpg только ущербы называют так функции =(
Старый 16.10.2011, 21:44
Praudmur
в поисках идей...
offline
Опыт: 3,604
Активность:
Фальсификация какбэ о_О
Старый 16.10.2011, 21:57
Lobster

offline
Опыт: 2,043
Активность:
Doc, Какая разница, ну назови ее ColorizeSaveCode или как нравится. Тем более, что это единст. 2 фун-ии кот. я еще не использую в своей карте => на названии особо не заморачивался.
Praudmur, Надо было ответить "Уже давно юзаю подобную"? =)
Старый 16.10.2011, 22:32
VetsaN
HeartLove Labs
offline
Опыт: 29,157
Активность:
Lobster:
фун-ии
Впервые вижу такое сокращение
Старый 16.10.2011, 22:32
Lobster

offline
Опыт: 2,043
Активность:
VetsaN,
"функции". Часто использую, порою просто ф-ии. Довольно удобно.
Humo:
Если можешь сделай на обычном jass , и тогда я ахну :D
Загрузи карту и посмотри. cJass преобразуется в обычный jass при компиляции.
Старый 27.10.2011, 00:11
Master_chan
Полуночный командир
offline
Опыт: 15,660
Активность:
Велосипед с плазменно-импульсным двигателем готов бороздить просторы вселенной.
Lobster:
ф-ии
ф-ции
При сокращении с дефисом после него всегда должна идти согласная буква. Ваша Татьяна Леонидовна.
Старый 27.10.2011, 06:28
Suite
┌_____┐
offline
Опыт: 11,222
Активность:
Lobster, я думаю что надо было сперва сюда выкладывать.
Старый 27.10.2011, 14:26
First_Advisor
защитник людишек О_о
offline
Опыт: 5,203
Активность:
Разноцветные буквы непрактичны потому что это почти нечитаемо
Старый 27.10.2011, 14:49
Suite
┌_____┐
offline
Опыт: 11,222
Активность:
First_Advisor:
Разноцветные буквы непрактичны потому что это почти нечитаемо
для понта это круто :3
Старый 27.10.2011, 16:00
Sentinel_NSK

offline
Опыт: 144
Активность:
не в принципе прикольно тока читать реально не удобно гапимый понт короче
Старый 28.10.2011, 23:42
Lobster

offline
Опыт: 2,043
Активность:
First_Advisor:
Разноцветные буквы непрактичны потому что это почти нечитаемо
А кто сказал, что нужно из них составлять громоздкие тексты. Они испол-ся к примеру, если нужно выделить какое-то ключевое слово длиною до 7 символов.
Sentinel_NSK:
не в принципе прикольно тока читать реально не удобно гапимый понт короче
Градиенты совершено не мешают прочтению текстов любых калибров. Для наглядности рекомендую скачать карту.

Отредактировано Lobster, 27.11.2011 в 19:02.
Старый 14.11.2011, 02:27
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 19:24.