ItemReminder: Added scrollable passive item list / history

This commit is contained in:
Wofsauge committed 2024-04-24 01:32:10 +02:00
1 parent 8517523d16
commit 2617f6cb14
3 files changed
+61 -23

No files matched your search

-1
View File
@@ -1808,7 +1808,6 @@ function EID:evaluateQueuedItems()
end end
-- Put non-active item pickups into the recent item list, for printing in the Item Reminder -- Put non-active item pickups into the recent item list, for printing in the Item Reminder
table.insert(EID.RecentlyTouchedItems[i], player.QueuedItem.Item.ID) table.insert(EID.RecentlyTouchedItems[i], player.QueuedItem.Item.ID)
if (#EID.RecentlyTouchedItems[i] > 8) then table.remove(EID.RecentlyTouchedItems[i], 1) end
end end
end end
end end
+61 -21
View File
@@ -10,6 +10,7 @@ EID.ItemReminderBlacklist = { ["5.100.714"] = true, ["5.100.715"] = true } -- Do
EID.ItemReminderTempDescriptions = {} -- Temporary stores descriptions that will be displayed after everythng got evaluated EID.ItemReminderTempDescriptions = {} -- Temporary stores descriptions that will be displayed after everythng got evaluated
EID.ItemReminderSelectedCategory = 0 -- Currently selected category EID.ItemReminderSelectedCategory = 0 -- Currently selected category
EID.ItemReminderSelectedPlayer = 0 -- Currently selected player EID.ItemReminderSelectedPlayer = 0 -- Currently selected player
EID.ItemReminderSelectedItem = 0 -- Currently selected Item
EID.InsideItemReminder = false -- Disable some modifiers, when building the Item Reminder description EID.InsideItemReminder = false -- Disable some modifiers, when building the Item Reminder description
-- TODO: -- TODO:
@@ -35,16 +36,16 @@ EID.ItemReminderCategories = {
function(player) EID:ItemReminderHandleGulpedModelingClay(player) end } }, function(player) EID:ItemReminderHandleGulpedModelingClay(player) end } },
{ id = "Passives", entryGenerators = { { id = "Passives", entryGenerators = {
function(player) -- Passive item: Zodiac function(player) -- Passive item: Zodiac
if EID.isRepentance and player:HasCollectible(392) then if EID.isRepentance and player:HasCollectible(392) and not EID:IsCategorySelected("Passives") then
EID:ItemReminderAddDescription(player, 5, 100, 392) EID:ItemReminderAddDescription(player, 5, 100, 392)
end end
end, end,
function(player) -- Passive item: Echo Chamber function(player) -- Passive item: Echo Chamber
if EID.isRepentance and player:HasCollectible(700) then if EID.isRepentance and player:HasCollectible(700) and not EID:IsCategorySelected("Passives") then
EID:ItemReminderAddDescription(player, 5, 100, 700) EID:ItemReminderAddDescription(player, 5, 100, 700)
end end
end, end,
function(player) EID:ItemReminderHandleRecentItems(player) end } }, function(player) EID:ItemReminderHandleSelectedPassiveItem(player) end } },
} }
-- Format: ItemID = table -- Format: ItemID = table
@@ -300,15 +301,12 @@ function EID:ItemReminderAddDescription(player, entityType, variant, subType, ex
end end
-- Recently Acquired Item Descriptions -- Recently Acquired Item Descriptions
function EID:ItemReminderHandleRecentItems(player) function EID:ItemReminderHandleSelectedPassiveItem(player)
local playerNum = EID:getPlayerID(player) local playerNum = EID:getPlayerID(player)
if EID.RecentlyTouchedItems[playerNum] then if EID.RecentlyTouchedItems[playerNum] and #EID.RecentlyTouchedItems[playerNum] > 0 then
for i = #EID.RecentlyTouchedItems[playerNum], 1, -1 do local index = EID:IsCategorySelected("Passives") and EID.ItemReminderSelectedItem % #EID.RecentlyTouchedItems[playerNum] or 0
if not EID:ItemReminderCanAddMoreToView() then return end local recentID = EID.RecentlyTouchedItems[playerNum][#EID.RecentlyTouchedItems[playerNum] - index] % GLITCH_ITEM_FLAG
EID:ItemReminderAddDescription(player, 5, 100, recentID)
local recentID = EID.RecentlyTouchedItems[playerNum][i] % GLITCH_ITEM_FLAG
EID:ItemReminderAddDescription(player, 5, 100, recentID)
end
end end
end end
@@ -421,12 +419,20 @@ function EID:ItemReminderHandleInputs()
lastInputTime = Isaac.GetTime() lastInputTime = Isaac.GetTime()
lastScrollDirection = 1 lastScrollDirection = 1
elseif Input.IsActionTriggered(EID.Config["ItemReminderNavigateDownButton"], EID.holdTabPlayer.ControllerIndex) and Isaac.GetTime() - lastInputTime > 50 then elseif Input.IsActionTriggered(EID.Config["ItemReminderNavigateDownButton"], EID.holdTabPlayer.ControllerIndex) and Isaac.GetTime() - lastInputTime > 50 then
EID.ItemReminderSelectedPlayer = (EID.ItemReminderSelectedPlayer - 1) % #EID.coopAllPlayers if not EID:IsCategorySelected("Passives") then
EID.ItemReminderSelectedPlayer = (EID.ItemReminderSelectedPlayer - 1) % #EID.coopAllPlayers
else
EID.ItemReminderSelectedItem = EID.ItemReminderSelectedItem - 1 -- clamp later
end
EID.ForceRefreshCache = true EID.ForceRefreshCache = true
lastInputTime = Isaac.GetTime() lastInputTime = Isaac.GetTime()
elseif Input.IsActionTriggered(EID.Config["ItemReminderNavigateUpButton"], EID.holdTabPlayer.ControllerIndex) and Isaac.GetTime() - lastInputTime > 50 then elseif Input.IsActionTriggered(EID.Config["ItemReminderNavigateUpButton"], EID.holdTabPlayer.ControllerIndex) and Isaac.GetTime() - lastInputTime > 50 then
EID.ItemReminderSelectedPlayer = (EID.ItemReminderSelectedPlayer + 1) % #EID.coopAllPlayers if not EID:IsCategorySelected("Passives") then
EID.ItemReminderSelectedPlayer = (EID.ItemReminderSelectedPlayer + 1) % #EID.coopAllPlayers
else
EID.ItemReminderSelectedItem = EID.ItemReminderSelectedItem + 1 -- clamp later
end
EID.ForceRefreshCache = true EID.ForceRefreshCache = true
lastInputTime = Isaac.GetTime() lastInputTime = Isaac.GetTime()
@@ -434,6 +440,10 @@ function EID:ItemReminderHandleInputs()
end end
end end
function EID:IsCategorySelected(categoryID)
return EID.ItemReminderCategories[EID.ItemReminderSelectedCategory + 1].id == categoryID
end
function EID:ItemReminderGetTitle() function EID:ItemReminderGetTitle()
local category = EID.ItemReminderCategories[EID.ItemReminderSelectedCategory + 1] local category = EID.ItemReminderCategories[EID.ItemReminderSelectedCategory + 1]
@@ -449,10 +459,14 @@ function EID:ItemReminderGetTitle()
if #EID.coopAllPlayers > 1 then if #EID.coopAllPlayers > 1 then
local currentPlayer = EID.coopAllPlayers[EID.ItemReminderSelectedPlayer + 1] local currentPlayer = EID.coopAllPlayers[EID.ItemReminderSelectedPlayer + 1]
local playerIcon = EID:GetPlayerIcon(currentPlayer:GetPlayerType()) local playerIcon = EID:GetPlayerIcon(currentPlayer:GetPlayerType())
combinedText = EID.ButtonToIconMap[EID.Config["ItemReminderNavigateDownButton"]] .. " " ..
playerIcon .. " " .. EID.ButtonToIconMap[EID.Config["ItemReminderNavigateUpButton"]] .. " " .. combinedText
end
local playerSelectWidget = playerIcon .. " "
if not EID:IsCategorySelected("Passives") then
playerSelectWidget = EID.ButtonToIconMap[EID.Config["ItemReminderNavigateDownButton"]] .. " " ..
playerIcon .. " " .. EID.ButtonToIconMap[EID.Config["ItemReminderNavigateUpButton"]] .. " "
end
combinedText = playerSelectWidget .. combinedText
end
return combinedText return combinedText
end end
@@ -507,19 +521,45 @@ function EID:ItemReminderGetDescription()
end end
-- auto scroll was stopped. reset scroll value -- auto scroll was stopped. reset scroll value
lastAutoScrollPosition = -1 lastAutoScrollPosition = -1
EID.InsideItemReminder = false
return "{{Blank}}#{{Blank}} " .. EID:getDescriptionEntry("ItemReminder", "InventoryEmpty") return "{{Blank}}#{{Blank}} " .. EID:getDescriptionEntry("ItemReminder", "InventoryEmpty")
end end
lastAutoScrollPosition = -1 lastAutoScrollPosition = -1
-- put descriptions into one long description local finalHoldMapDesc = "{{Blank}}#"
local finalHoldMapDesc = ""
local playerNum = EID:getPlayerID(player)
local numPassives = EID.RecentlyTouchedItems[playerNum] and #EID.RecentlyTouchedItems[playerNum] or 0
if EID:IsCategorySelected("Passives") and numPassives > 1 then
-- handle Scrollable passives list
finalHoldMapDesc = "{{Blank}} " .. EID.ButtonToIconMap[EID.Config["ItemReminderNavigateDownButton"]]
EID.ItemReminderSelectedItem = EID.ItemReminderSelectedItem % numPassives -- clamp selection
-- render icons
local startIndex = numPassives - EID.ItemReminderSelectedItem -- start from end of list
local stopIndex = startIndex - 3
for i = startIndex, stopIndex, -1 do
local index = ((i - 1) % numPassives) + 1
local recentID = EID.RecentlyTouchedItems[playerNum][index] % GLITCH_ITEM_FLAG
if i < 1 and index == startIndex then
-- prevent display of copies of the same icon, when less than 4 passive items were collected
break
end
finalHoldMapDesc = finalHoldMapDesc .. "{{Collectible" .. recentID .. "}} "
end
finalHoldMapDesc = finalHoldMapDesc .. "(" .. (EID.ItemReminderSelectedItem + 1) .. "/" .. numPassives .. ") "
finalHoldMapDesc = finalHoldMapDesc .. EID.ButtonToIconMap[EID.Config["ItemReminderNavigateUpButton"]] .. "#"
end
-- Default: put all descriptions into one long description
for _, entry in ipairs(EID.ItemReminderTempDescriptions) do for _, entry in ipairs(EID.ItemReminderTempDescriptions) do
finalHoldMapDesc = finalHoldMapDesc .. entry[1] .. " {{ColorEIDObjName}}" .. entry[2] .. "#" .. entry[3] .. "#" finalHoldMapDesc = finalHoldMapDesc .. entry[1] .. " {{ColorEIDObjName}}" .. entry[2] .. "#" .. entry[3] .. "#"
end end
finalHoldMapDesc = "{{Blank}}#" .. finalHoldMapDesc
EID.InsideItemReminder = false EID.InsideItemReminder = false
return finalHoldMapDesc return finalHoldMapDesc
end end
-1
View File
@@ -1072,7 +1072,6 @@ function EID:onGameUpdate()
local playerID = EID:getPlayerID(player) local playerID = EID:getPlayerID(player)
EID:InitItemInteractionIfAbsent(playerID) EID:InitItemInteractionIfAbsent(playerID)
table.insert(EID.RecentlyTouchedItems[playerID], wisp.SubType) table.insert(EID.RecentlyTouchedItems[playerID], wisp.SubType)
if (#EID.RecentlyTouchedItems[playerID] > 8) then table.remove(EID.RecentlyTouchedItems[playerID], 1) end
end end
end end
end end