diff --git a/descriptions/ab+/transformations.lua b/descriptions/ab+/transformations.lua index ad4c7b22..9ff4ddc1 100644 --- a/descriptions/ab+/transformations.lua +++ b/descriptions/ab+/transformations.lua @@ -4,6 +4,9 @@ EID.CustomTransformations = {} -- Format: [ID.VARIANT.SUBTYPE] = "Transformation Basename or id" EID.CustomTransformAssignments = {} +-- Format: [ID.VARIANT.SUBTYPE] = "Transformation Basename or id" +EID.CustomTransformRemovals = {} + -- default transformations -- Format: [ID.VARIANT.SUBTYPE] = "Transformation string" EID.EntityTransformations = { diff --git a/eid_api.lua b/eid_api.lua index 9002df9b..cc92eb9f 100644 --- a/eid_api.lua +++ b/eid_api.lua @@ -90,7 +90,7 @@ function EID:createTransformation(uniqueName, displayName, language) EID.CustomTransformations[uniqueName][language] = displayName end --- Assigns transformations to an entity +-- Assigns transformations to an entity (Adds to existing transformations) -- valid target types: [collectible, trinket, card, pill, entity] -- when type = entity, targetIdentifier must be in the format "ID.Variant.subtype". for any other type, it can just be the id -- EXAMPLE: EID:assignTransformation("collectible", 1, "My Transformation") @@ -104,6 +104,24 @@ function EID:assignTransformation(targetType, targetIdentifier, transformationSt EID.CustomTransformAssignments[entryID] = transformationString end +-- Removes a transformation of an entity +-- valid target types: [collectible, trinket, card, pill, entity] +-- when type = entity, targetIdentifier must be in the format "ID.Variant.subtype". for any other type, it can just be the id +-- EXAMPLE: EID:removeTransformation("collectible", 1, "My Transformation") +function EID:removeTransformation(targetType, targetIdentifier, transformationString) + local entryID = EID:getIDVariantString(targetType) + if entryID ~= nil then + entryID = entryID.."."..targetIdentifier + else + entryID = targetIdentifier + end + if EID.CustomTransformRemovals[entryID] == nil then + EID.CustomTransformRemovals[entryID] = transformationString + else + EID.CustomTransformRemovals[entryID] = EID.CustomTransformRemovals[entryID]..","..transformationString + end +end + -- Adds a description for a an Entity. Optional parameters: language, transformations -- when subtype is -1 or empty, it will affect all subtypes of that entity function EID:addEntity(id, variant, subtype, entityName, description, language) @@ -245,7 +263,7 @@ function EID:getDescriptionObj(Type, Variant, SubType) local tableEntry = EID:getDescriptionData(Type, Variant, description.ID) description.Description =tableEntry and tableEntry[3] or "MISSING DESCRIPTION" - description.Transformation = EID:getTransformation(description.fullItemString) + description.Transformation = EID:getTransformation(Type, Variant, description.ID) return description end @@ -287,20 +305,35 @@ function EID:getDescriptionData(Type, Variant, SubType) return moddedDesc or legacyModdedDescription or defaultDesc end --- Get the transformation uniqueName / ID of a given "ID.Variant.Subtype" pair --- Example: EID:getTransformation("5.100.34") will return "12" which is the id for Bookworm -function EID:getTransformation(entityIdentifier) - local custom = EID.CustomTransformAssignments[entityIdentifier] +-- Get the transformation uniqueName / ID of a given entity +-- Example: EID:getTransformation(5,100,34) will return "12" which is the id for Bookworm +function EID:getTransformation(id, variant, subType) + local entityString = id.."."..variant.."."..subType + local listToTest = "" + local default = EID.EntityTransformations[entityString] + if default~= nil then listToTest = default end + local customLegacy = nil - local splitString = {} - for identifier in string.gsub(entityIdentifier,"%f[.]%.%f[^.]", "\0"):gmatch("%Z+") do - table.insert(splitString,identifier) + if id == 5 and variant == 100 then + customLegacy = __eidItemTransformations[subType] + if customLegacy~= nil then listToTest = listToTest..","..customLegacy end end - if splitString[1] == "5" and splitString[2] == "100" then - customLegacy = __eidItemTransformations[splitString[3]] + + local custom = EID.CustomTransformAssignments[entityString] + if custom~= nil then listToTest = listToTest..","..custom end + + local transformationList = "" + local removedList = EID.CustomTransformRemovals[entityString] + for transform in string.gmatch(listToTest, "([^,]+)") do + local isRemoved = false + if removedList ~= nil then + for removedTransform in string.gmatch(removedList, "([^,]+)") do + if transform == removedTransform then isRemoved = true end + end + end + if not isRemoved then transformationList = transformationList..","..transform end end - local default = EID.EntityTransformations[entityIdentifier] - return custom or customLegacy or default or "0" + return transformationList end --Get the name of the given transformation by its uniqueName / ID diff --git a/eid_debugging.lua b/eid_debugging.lua index 49dcf14d..c0323932 100644 --- a/eid_debugging.lua +++ b/eid_debugging.lua @@ -58,7 +58,8 @@ EID:addIcon("NewTransform1", "hearts", 2, 9, 9, -1, 0, dummySprite) EID:createTransformation("NewTransform1", "New transformation") -- Transformation EID:createTransformation("NewTransform1", "New russian transformation", "ru") -- add Transformation name in russian -EID:assignTransformation("collectible", 5, "NewTransform1") -- Add Transformation to My Reflection +EID:assignTransformation("collectible", 5, "NewTransform1,2,3") -- Add Transformation to My Reflection +EID:removeTransformation("collectible", 5, "2") -- Removes a transformation ------ Test: Add all transformations + some customs ones to Inner Eye ------ EID:assignTransformation("collectible", 2, "1,2,3,4,5,6,7,8,9,10,11,12,13,something Custom,NewTransform1")