Added Markup support for Textcolors and texteffects

This commit is contained in:
Wofsauge committed 2020-11-01 03:10:52 +01:00
1 parent 8afdae66ab
commit 250385e0e9
4 files changed
+186 -44

No files matched your search

+70 -6
View File
@@ -229,7 +229,7 @@ end
-- Returns the inlineIcon object of a given Iconstring
-- can be used to validate an iconstring
function EID:getIcon(str)
if str == nil then print("F") return EID.InlineIcons["ERROR"] end
if str == nil then return EID.InlineIcons["ERROR"] end
local strTrimmed = string.gsub(str, "{{(.-)}}", function(a) return a end)
if #strTrimmed <= #str then
return EID.InlineIcons[strTrimmed] or EID.InlineIcons["ERROR"]
@@ -283,13 +283,77 @@ function EID:handleBulletpointIcon(text)
return "\007"
end
--needs to be called in a render Callback
-- Gets a KColor from a Markup-string (example Input: "{{ColorText}}")
function EID:getColor(str, baseKColor)
if str == nil then return baseKColor end
local strTrimmed = string.gsub(str, "{{(.-)}}", function(a) return a end)
if #strTrimmed <= #str then
if type(EID.InlineColors[strTrimmed]) =="function" then
return EID.InlineColors[strTrimmed](baseKColor)
end
return EID.InlineColors[strTrimmed] or baseKColor
else
return baseKColor
end
end
-- Filters a given string and looks for Colormarkup. Splits the text into subsections limited by them.
-- Returns: Table of subsections of the text, their respective KColor, and the width of the subsection
function EID:filterColorMarkup(text, baseKColor)
local textPartsTable = {}
local lastColor = baseKColor
local lastPosition = 0
for word in string.gmatch(text, "{{.-}}") do
local textposition = string.find(text, word)
local lookup = EID:getColor(word, lastColor)
if lookup ~= lastColor then
local preceedingText = string.sub(text, lastPosition, textposition - 1)
local preceedingTextWidth = EID:getStrWidth(preceedingText)*EIDConfig["Scale"]
lastPosition = textposition
table.insert(textPartsTable,{preceedingText, lastColor, preceedingTextWidth})
lastColor = lookup
text = string.gsub(text, word, "", 1)
end
end
table.insert(textPartsTable,{string.sub(text, lastPosition), lastColor,0})
return textPartsTable
end
-- Renders a given string using the EID Custom font. This will also apply any markup and render icons
-- needs to be called in a render Callback
-- args: string, Vector(int, int), Vector(float,float), KColor obj, bool
-- Returns the last used KColor
function EID:renderString(str, position, scale, kcolor)
str = EID:replaceShortMarkupStrings(str)
str, spriteTable = EID:filterMarkup(str, position.X, position.Y)
EID:renderInlineIcons(spriteTable, position.X, position.Y)
EID.font:DrawStringScaledUTF8(str, position.X, position.Y, scale.X, scale.Y, kcolor, 0, false)
EID.LastRenderCallColor = EID:copyKColor(kcolor) -- Save last Color for eventual Color Reset call
local textPartsTable = EID:filterColorMarkup(str, kcolor)
local offsetX = 0
for i, textPart in ipairs(textPartsTable) do
local strFiltered, spriteTable = EID:filterMarkup(textPart[1], position.X, position.Y)
EID:renderInlineIcons(spriteTable, position.X, position.Y)
EID.font:DrawStringScaledUTF8(strFiltered, position.X+offsetX, position.Y, scale.X, scale.Y, textPart[2], 0, false)
offsetX = offsetX + textPart[3]
end
return textPartsTable[#textPartsTable][2]
end
-- Interpolates between 2 KColors with a given fraction.
function EID:interpolateColors(kColor1, kColor2, fraction)
local t = KColor(
(kColor2.Red-kColor1.Red)*fraction+kColor1.Red,
(kColor2.Green-kColor1.Green)*fraction+kColor1.Green,
(kColor2.Blue-kColor1.Blue)*fraction+kColor1.Blue,
(kColor2.Alpha-kColor1.Alpha)*fraction+kColor1.Alpha,
0,
0,
0
)
return t
end
function EID:copyKColor(colorObj)
return KColor(colorObj.Red,colorObj.Green,colorObj.Blue,colorObj.Alpha,0,0,0)
end
-- Get KColor object of "Entity Name" texts
@@ -342,4 +406,4 @@ function EID:getErrorColor()
0,
0
)
end
end
+101 -27
View File
@@ -11,6 +11,7 @@ EID.TextReplacementPairs = {
{"\015", "{{Coin}}"}, -- Legacy Coin
{"\8\189", "{{Bomb}}"}, -- Legacy BOMB
{"{{Hashtag}}", "ǂ"}, -- Hashtag
{"{{CR}}", "{{ColorReset}}"}, -- Shortcut for Color Resetting
}
--Format: [SHORTCUT]= {Animationname, Frame, Width, Height, LeftOffset [Default: -1], TopOffset [Default: 0], SpriteObject [Default: EID.InlineIconSprite]}
@@ -20,19 +21,19 @@ EID.InlineIcons = {
["ArrowDown"] = {"ArrowDown", 0, 8, 9},
["Warning"] = {"Warning", 0, 4, 9},
-- Numbers
["0"] = {"numbers", 0, 5, 7},
["1"] = {"numbers", 1, 4, 7},
["2"] = {"numbers", 2, 5, 7},
["3"] = {"numbers", 3, 5, 7},
["4"] = {"numbers", 4, 5, 7},
["5"] = {"numbers", 5, 5, 7},
["6"] = {"numbers", 6, 5, 7},
["7"] = {"numbers", 7, 5, 7},
["8"] = {"numbers", 8, 5, 7},
["9"] = {"numbers", 9, 5, 7},
["10"] = {"numbers", 10, 7, 7},
["11"] = {"numbers", 11, 7, 7},
["12"] = {"numbers", 12, 7, 7},
["0"] = {"numbers", 0, 4, 7},
["1"] = {"numbers", 1, 4, 7,-2},
["2"] = {"numbers", 2, 4, 7},
["3"] = {"numbers", 3, 4, 7},
["4"] = {"numbers", 4, 4, 7},
["5"] = {"numbers", 5, 4, 7},
["6"] = {"numbers", 6, 4, 7},
["7"] = {"numbers", 7, 4, 7},
["8"] = {"numbers", 8, 4, 7},
["9"] = {"numbers", 9, 4, 7},
["10"] = {"numbers", 10, 6, 7},
["11"] = {"numbers", 11, 6, 7},
["12"] = {"numbers", 12, 6, 7},
-- Hearts
["Heart"] = {"hearts", 0, 9, 9},
["HalfHeart"] = {"hearts", 1, 9, 9},
@@ -98,20 +99,93 @@ EID.InlineIcons = {
["RoomLBottomLeft"] = {"roomshape", 10, 10, 10},
["RoomLBottomRight"] = {"roomshape", 11, 10, 10},
-- Transformation Icons
["CustomTransformation"] = {"TransformationCustom",0,11,14, 1, -1, EID.IconSprite},
["Guppy"] = {"Transformation1",0,10,13, 1, -1, EID.IconSprite},
["FunGuy"] = {"Transformation2",0,12,13, 0, -1, EID.IconSprite},
["LordoftheFlies"] = {"Transformation3",0,12,14, 0, -1, EID.IconSprite},
["Conjoined"] = {"Transformation4",0,16,15, -2, -1, EID.IconSprite},
["Spun"] = {"Transformation5",0,6,15, 4, -1, EID.IconSprite},
["Mom"] = {"Transformation6",0,6,16, 5, -1, EID.IconSprite},
["OhCrap"] = {"Transformation7",0,13,14, -1, -1, EID.IconSprite},
["Bob"] ={"Transformation8",0,12,13, 0, -1, EID.IconSprite},
["Leviathan"] = {"Transformation9",0,12,15, 0, -1, EID.IconSprite},
["Seraphim"] = {"Transformation10",0,19,14, -6, -1, EID.IconSprite},
["SuperBum"] = {"Transformation11",0,14,15, -1, -1, EID.IconSprite},
["Bookworm"] = {"Transformation12",0,10,14, 2, -1, EID.IconSprite},
["SpiderBaby"] = {"Transformation13",0,12,16, 1, -1, EID.IconSprite},
["CustomTransformation"] = {"TransformationCustom",0,11,14, 0, -1, EID.IconSprite},
["Guppy"] = {"Transformation1",0,11,13, 0, -1, EID.IconSprite},
["FunGuy"] = {"Transformation2",0,13,13, 0, -1, EID.IconSprite},
["LordoftheFlies"] = {"Transformation3",0,14,14, 0, -1, EID.IconSprite},
["Conjoined"] = {"Transformation4",0,18,15, 0, -1, EID.IconSprite},
["Spun"] = {"Transformation5",0,7,15, 0, -1, EID.IconSprite},
["Mom"] = {"Transformation6",0,7,16, 0, -1, EID.IconSprite},
["OhCrap"] = {"Transformation7",0,15,14, 0, -1, EID.IconSprite},
["Bob"] ={"Transformation8",0,13,13, 0, -1, EID.IconSprite},
["Leviathan"] = {"Transformation9",0,13,15, 0, -1, EID.IconSprite},
["Seraphim"] = {"Transformation10",0,20,14, 0, -1, EID.IconSprite},
["SuperBum"] = {"Transformation11",0,14,15, 0, -1, EID.IconSprite},
["Bookworm"] = {"Transformation12",0,10,14, 0, -1, EID.IconSprite},
["SpiderBaby"] = {"Transformation13",0,13,16, 0, -1, EID.IconSprite},
--["Adult"] = {"Transformation14",0,0,13, -1, -1, EID.IconSprite},
--["Stompy"] = {"Transformation15",0,0,13, -1, -1, EID.IconSprite},
}
-- Table that holds Colors used for markup objects. Example: "{{ColorRed}}"
-- Format: ["Shortcut"] = KColor
-- callbacks receive 1 argument, containing the previously used Color object.
EID.InlineColors ={
-- Default colors
["ColorText"] = function (_) return EID:getTextColor() end,
["ColorTransform"] = function (_) return EID:getTransformationColor() end,
["ColorError"] = function (_) return EID:getErrorColor() end,
["ColorObjName"] = function (_) return EID:getNameColor() end,
["ColorReset"] = function (_) return EID.LastRenderCallColor end,
-- Basic Colors
["ColorBlack"] = KColor(0, 0, 0, 1, 0,0,0),
["ColorWhite"] = KColor(1, 1, 1, 1, 0,0,0),
["ColorRed"] = KColor(1, 0, 0, 1, 0,0,0),
["ColorLime"] = KColor(0, 1, 0, 1, 0,0,0),
["ColorBlue"] = KColor(0, 0, 1, 1, 0,0,0),
["ColorYellow"] = KColor(1, 1, 0, 1, 0,0,0),
["ColorCyan"] = KColor(0, 1, 1, 1, 0,0,0),
["ColorPink"] = KColor(1, 0, 1, 1, 0,0,0),
["ColorSilver"] = KColor(0.75, 0.75, 0.75, 1, 0,0,0),
["ColorGray"] = KColor(0.5, 0.5, 0.5, 1, 0,0,0),
["ColorMaroon"] = KColor(0.5, 0, 0, 1, 0,0,0),
["ColorOlive"] = KColor(0.5, 0.5, 0, 1, 0,0,0),
["ColorGreen"] = KColor(0, 0.5, 0, 1, 0,0,0),
["ColorPurple"] = KColor(0.5, 0, 0.5, 1, 0,0,0),
["ColorTeal"] = KColor(0, 0.5, 0.5, 1, 0,0,0),
["ColorNavy"] = KColor(0, 0, 0.5, 1, 0,0,0),
["ColorOrange"] = KColor(1, 0.54, 0, 1, 0,0,0),
-- Swag Colors
-- Rainbow color effect
["ColorRainbow"] = function (_)
local maxAnimTime = 80
local animTime = Game():GetFrameCount() % maxAnimTime
local c = EID.InlineColors
local colors = {c["ColorRed"],c["ColorYellow"],c["ColorLime"],c["ColorCyan"],c["ColorBlue"],c["ColorPink"]}
local colorFractions = (maxAnimTime-1)/#colors
local subAnm = math.floor(animTime/(colorFractions+1))+1
local primaryColorIndex = subAnm%(#colors+1)
if primaryColorIndex == 0 then primaryColorIndex = 1 end
local secondaryColorIndex = (subAnm+1)%(#colors+1)
if secondaryColorIndex == 0 then secondaryColorIndex = 1 end
return EID:interpolateColors(colors[primaryColorIndex], colors[secondaryColorIndex], (animTime%(colorFractions+1))/colorFractions)
end,
-- Text will blink frequently
["ColorBlink"] = function (color)
local maxAnimTime = 40
local animTime = Game():GetFrameCount() % maxAnimTime
color = EID:copyKColor(color) or EID:getTextColor()
if animTime<maxAnimTime/2 then
color.Alpha = 1 *color.Alpha
else
color.Alpha = 0 *color.Alpha
end
return color
end,
-- Text will fade in and out
["ColorFade"] = function (color)
local maxAnimTime = 30
local animTime = Game():GetFrameCount() % (maxAnimTime+10)
color = EID:copyKColor(color) or EID:getTextColor()
if animTime<maxAnimTime/2 then
color.Alpha = animTime/(maxAnimTime/2) *color.Alpha
elseif animTime<maxAnimTime then
color.Alpha = (1 - (animTime-(maxAnimTime/2))/(maxAnimTime/2)) *color.Alpha
else
color.Alpha = 0
end
return color
end,
}
+11 -9
View File
@@ -1,17 +1,14 @@
local showDebugChars = false
local charsToDebug = {
"!!! EID DEBUG MODE ACTIVATED !!!", -- Header
"ABCDEFGHIJKLMNOPQRSTUVWXYZ", -- Caps letters
"abcdefghijklmnopqrstuvwxyz1234567890", -- small letters + numbers
"western: Áá Àà Ââ Āā Ää Ãã Åå Ææ Éé Èè Êê Ēē Ëë Íí Ìì Îî Īī Ïï ", --
"western 2: Óó Òò Ôô Ōō Öö Õõ Øø Œœ Úú Ùù Ûû Ūū Üü Ŵŵ Ýý Ÿÿ Ŷ", --
"western 3: Þþ Çç Ðð Ññ ß ¿¡", --
"ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 1234567890", -- Basic chars
"western: Áá Àà Ââ Āā Ää Ãã Åå Ąą Ææ Éé Èè Êê Ēē Ëë Ęę Íí Ìì Îî Īī Ïï Þþ Çç Ćć Łł Ńń Ññ",
"western 2: Óó Òò Ôô Ōō Öö Õõ Śś Øø Œœ Úú Ùù Ûû Ūū Üü Ŵŵ Ýý Ÿÿ Ŷ Ðð ß Źź Żż ¿¡",
"cyrillic 1: Аа Бб Вв Гг Дд Ее Ёё Жж Зз Ии Йй Кк Лл Мм Нн Оо",
"cyrillic 2: Пп Рр Сс Тт Уу Фф Хх Цц Чч Шш Щщ Ъъ Ыы Ьь Ээ Юю Яя",
"polish: Ąą Ćć Ęę Łł Ńń Óó Śś Źź Żż",
"custom icons: ↑Positive ↓Negative \007bulletpoint !Exclamation ǃWarning !!!3!shortcut ǂHashtag",
"legacy icon Markup: \\1:\1Positive \\2:\2Negative \\3:\3Warning ! \\6:\6 heart \\5:\5 Key \\015:\015 Coin \\8\\189:\8\189 Bomb",
"emotes: ☆★〠♠♣♥♦♤♧♡♢☀☂♨♪♭♯♂♀",
"custom icons: ↑Positive ↓Negative \007bulletpoint !Exclamation ǃWarning !!!3!shortcut ǂHashtag",
"legacy icon Markup: \\1:\1Positive \\2:\2Negative \\3:\3Warning \\6:\6 heart \\5:\5 Key \\015:\015 Coin \\8\\189:\8\189 Bomb",
"Markup main: |{{ArrowUp}}|{{ArrowDown}}|{{Warning}}|{{ERROR}}|{{Hashtag}}",
"Markup numbers: |{{0}}|{{1}}|{{2}}|{{3}}|{{4}}|{{5}}|{{6}}|{{7}}|{{8}}|{{9}}|{{10}}|{{11}}|{{12}}|",
"Markup hearts: |{{Heart}}|{{HalfHeart}}|{{EthernalHeart}}|{{EmptyHeart}}|{{BlendedHeart}}|{{BoneHeart}}|{{HalfBoneHeart}}|{{EmptyBoneHeart}}|{{SoulHeart}}|{{HalfSoulHeart}}|{{BlackHeart}}|{{HalfBlackHeart}}|{{GoldenHeart}}|{{CoinHeart}}|{{HalfCoinHeart}}|{{EmptyCoinHeart}}|",
@@ -19,6 +16,10 @@ local charsToDebug = {
"Markup roomtypes: |{{DevilRoom}}|{{AngelRoom}}|{{ChallengeRoom}}|{{IsaacsRoom}}|{{TreasureRoom}}|{{ArcadeRoom}}|{{BossRushRoom}}|{{Shop}}|{{SuperSecretRoom}}|{{BarrenRoom}}|{{MiniBoss}}|{{DiceRoom}}|{{GreedTreasureRoom}}|{{SecretRoom}}|{{Library}}|{{ChestRoom}}|{{BossRoom}}|{{CursedRoom}}|{{SacrificeRoom}}|",
"Markup roomshapes: |{{Room}}|{{RoomLongHorizontal}}|{{RoomLongThinHorizontal}}|{{RoomSmallHorizontal}}|{{RoomLBottomRight}}|{{RoomSmallVertical}}|{{RoomLBottomLeft}}|{{RoomLTopLeft}}|{{RoomL}}|{{RoomLongVertical}}|{{RoomXL}}|{{RoomLongThinVertical}}|",
"Markup transformations: |{{CustomTransformation}}|{{Guppy}}|{{FunGuy}}|{{LordoftheFlies}}|{{Conjoined}}|{{Spun}}|{{Mom}}|{{OhCrap}}|{{Bob}}|{{Leviathan}}|{{Seraphim}}|{{SuperBum}}|{{Bookworm}}|{{SpiderBaby}}|{{Adult}}|{{Stompy}}|",
"Markup Main Colors: {{ColorText}}Text {{ColorTransform}}Transform {{ColorError}}Error {{ColorObjName}}ObjName",
"Markup Colors: {{ColorBlack}}Black {{ColorWhite}}White {{ColorRed}}Red {{ColorLime}}Lime {{ColorBlue}}Blue {{ColorYellow}}Yellow {{ColorCyan}}Cyan {{ColorPink}}Pink {{ColorSilver}}Silver {{ColorGray}}Gray {{ColorMaroon}}Maroon {{ColorOlive}}Olive {{ColorGreen}}Green {{ColorPurple}}Purple {{ColorTeal}}Teal {{ColorNavy}}Navy ",
"Markup swag Colors: {{ColorFade}}Fade {{CR}}{{ColorBlink}}Blink {{ColorRainbow}}Rainbow {{ColorBlink}}BlinkWithColor {{ColorFade}}BlinkColorFade",
"End of line",
}
-- Legacy Overriding descriptions
@@ -27,6 +28,7 @@ __eidTrinketDescriptions[1] = "\2 Overriden " -- 5.350.1 = swallowed penny
__eidCardDescriptions[1] = "Overriden Card description" -- 5.300.1 = the fool
__eidPillDescriptions[21] = "Test" -- Pill Effect 20 = Hematemesis
__eidItemTransformations[1] = "Test Transformation" -- add custom transformation Text to Sad Onion
--__eidItemTransformations[2] = "1,2,3,4,5,6,7,8,9,10,11,12,13" -- add all transformations to inner eye
-- Legacy add Description to entity
__eidEntityDescriptions["5.10.1"] = {"Entity Name","Entity description"} -- Adds description to full red hearts
@@ -35,7 +37,7 @@ __eidEntityDescriptions["5.10.1"] = {"Entity Name","Entity description"} -- Adds
local dummySprite = Sprite()
dummySprite:Load("gfx/eid_inline_icons.anm2", true)
EID.InlineIcons["Test"] = {"hearts", 0, 9, 9, -1, 0, dummySprite}
__eidItemDescriptions[2] = "{{Bomb}} Emote {{Key}} Test {{Test}} description {{InvalidMarkupThing}} cool" -- 5.100.2 = Inner Eye
__eidItemDescriptions[2] = "{{Bomb}} Emote {{Key}} Test {{Test}} description {{SomeInvalidInnerStuff}} cool" -- 5.100.2 = Inner Eye
-- test adding custom transformation icon
__eidItemTransformations[2] = "Test"
+4 -2
View File
@@ -36,6 +36,8 @@ require("descriptions.ab+.spa")
require("eid_data")
require("eid_api")
EID.LastRenderCallColor = EID:getTextColor()
--use some very hacky trickery to get the path to this mod
local _, err = pcall(require, "")
local _, basePathStart = string.find(err, "no file '", 1)
@@ -208,9 +210,9 @@ function printBulletPoints(description, padding)
lineToPrint = string.gsub(lineToPrint, bpIcon .. " ", "")
end
EID:renderString(bpIcon, Vector(posX, padding), Vector(EIDConfig["Scale"], EIDConfig["Scale"]), textColor)
textColor = EID:renderString(bpIcon, Vector(posX, padding), Vector(EIDConfig["Scale"], EIDConfig["Scale"]), textColor)
end
EID:renderString(
textColor = EID:renderString(
lineToPrint,
Vector(posX + 12, padding),
Vector(EIDConfig["Scale"], EIDConfig["Scale"]),