-
Notifications
You must be signed in to change notification settings - Fork 8
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
cyritegamestudios
committed
Sep 7, 2023
1 parent
1c7f117
commit 850e335
Showing
39 changed files
with
1,276 additions
and
99 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
69 changes: 69 additions & 0 deletions
69
addons/Trust/cylibs/entity/party/ui/party_member_data_provider.lua
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
local PartyMemberListItem = require('cylibs/entity/party/ui/party_member_list_item') | ||
|
||
local ListItemDataProvider = require('cylibs/ui/lists/list_item_data_provider') | ||
|
||
local PartyMemberDataProvider = setmetatable({}, {__index = ListItemDataProvider }) | ||
PartyMemberDataProvider.__index = PartyMemberDataProvider | ||
|
||
-- Creates a new PartyMemberDataProvider instance. | ||
-- | ||
-- @tparam Party party The party data. | ||
-- @treturn PartyMemberDataProvider The newly created PartyMemberDataProvider instance. | ||
function PartyMemberDataProvider.new(party) | ||
local self = setmetatable(ListItemDataProvider.new(), PartyMemberDataProvider) | ||
|
||
self.party = party | ||
|
||
self:getDisposeBag():add(party:on_party_member_added():addAction(function(party_member) | ||
self:addPartyMember(party_member) | ||
end), party:on_party_member_added()) | ||
|
||
self:getDisposeBag():add(party:on_party_member_removed():addAction(function(party_member) | ||
self:removePartyMember(party_member) | ||
end), party:on_party_member_removed()) | ||
|
||
self:addPartyMembers(self.party:get_party_members(true)) | ||
|
||
return self | ||
end | ||
|
||
function PartyMemberDataProvider:destroy() | ||
ListItemDataProvider.destroy(self) | ||
|
||
self.party = nil | ||
end | ||
|
||
--- | ||
-- Add a PartyMemberListItem to the data provider. | ||
-- | ||
-- @tparam PartyMemberListItem party_member The PartyMemberListItem instance to add. | ||
-- | ||
function PartyMemberDataProvider:addPartyMember(party_member) | ||
self:addPartyMembers(L{party_member}) | ||
end | ||
|
||
--- | ||
-- Add multiple PartyMemberListItem instances to the data provider. | ||
-- | ||
-- @tparam {PartyMemberListItem} partyMembers A table containing PartyMemberListItem instances to add. | ||
-- | ||
function PartyMemberDataProvider:addPartyMembers(partyMembers) | ||
local items = partyMembers:map(function(party_member) | ||
return PartyMemberListItem.new(party_member) | ||
end):filter(function(item) | ||
return not self:containsItem(item) | ||
end) | ||
|
||
self:addItems(items) | ||
end | ||
|
||
--- | ||
-- Remove a PartyMemberListItem from the data provider. | ||
-- | ||
-- @tparam PartyMemberListItem party_member The PartyMemberListItem instance to remove. | ||
-- | ||
function PartyMemberDataProvider:removePartyMember(party_member) | ||
self:removeItem(PartyMemberListItem.new(party_member)) | ||
end | ||
|
||
return PartyMemberDataProvider |
55 changes: 55 additions & 0 deletions
55
addons/Trust/cylibs/entity/party/ui/party_member_list_item.lua
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
local ListItem = require('cylibs/ui/list_item') | ||
local ListViewItemStyle = require('cylibs/ui/style/list_view_item_style') | ||
local PartyMemberListItemView = require('cylibs/entity/party/ui/party_member_list_item_view') | ||
|
||
local PartyMemberListItem = setmetatable({}, {__index = ListItem }) | ||
PartyMemberListItem.__index = PartyMemberListItem | ||
|
||
-- Creates a new PartyMemberListItem instance. | ||
-- @tparam PartyMember party_member The party member data. | ||
-- @treturn PartyMemberListItem The newly created PartyMemberListItem instance. | ||
function PartyMemberListItem.new(party_member) | ||
local self = setmetatable(ListItem.new({ text = party_member:get_name(), height = 60 }, ListViewItemStyle.DarkMode.Text, party_member:get_id(), PartyMemberListItemView.new), PartyMemberListItem) | ||
|
||
self.partyMember = party_member | ||
self.partyMemberId = party_member:get_id() | ||
self.buffIds = party_member:get_buff_ids() or S{} | ||
|
||
return self | ||
end | ||
|
||
--- | ||
-- Gets the associated PartyMember object. | ||
-- | ||
-- @treturn PartyMember The PartyMember object associated with this PartyMemberListItem. | ||
-- | ||
function PartyMemberListItem:getPartyMember() | ||
return self.partyMember | ||
end | ||
|
||
--- | ||
-- Add a buff ID to the list of buffs for this party member. | ||
-- | ||
-- @tparam number buffId The ID of the buff to add. | ||
-- | ||
function PartyMemberListItem:addBuff(buffId) | ||
self.buffIds:add(buffId) | ||
end | ||
|
||
--- | ||
-- Remove a buff ID from the list of buffs for this party member. | ||
-- | ||
-- @tparam number buffId The ID of the buff to remove. | ||
-- | ||
function PartyMemberListItem:removeBuff(buffId) | ||
self.buffIds:remove(buffId) | ||
end | ||
|
||
-- Checks if this PartyMemberListItem is equal to another item. | ||
-- @tparam PartyMemberListItem otherItem The other PartyMemberListItem to compare. | ||
-- @treturn bool Returns true if the items are equal, false otherwise. | ||
function PartyMemberListItem:__eq(otherItem) | ||
return self:getIdentifier() == otherItem:getIdentifier() | ||
end | ||
|
||
return PartyMemberListItem |
74 changes: 74 additions & 0 deletions
74
addons/Trust/cylibs/entity/party/ui/party_member_list_item_view.lua
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
local DisposeBag = require('cylibs/events/dispose_bag') | ||
local ImageListItem = require('cylibs/ui/items/images/image_list_item') | ||
local HorizontalListLayout = require('cylibs/ui/layouts/horizontal_list_layout') | ||
local ListItemDataProvider = require('cylibs/ui/lists/list_item_data_provider') | ||
local ListView = require('cylibs/ui/list_view') | ||
local TextListItemView = require('cylibs/ui/items/text_list_item_view') | ||
|
||
local PartyMemberListItemView = setmetatable({}, {__index = TextListItemView }) | ||
PartyMemberListItemView.__index = PartyMemberListItemView | ||
|
||
function PartyMemberListItemView.new(item) | ||
local self = setmetatable(TextListItemView.new(item), PartyMemberListItemView) | ||
|
||
self.statusDataProvider = ListItemDataProvider.new() | ||
self.disposeBag = DisposeBag.new() | ||
|
||
-- Observe party member buff changes | ||
self.disposeBag:add(item:getPartyMember():on_gain_buff():addAction(function(p, buffId) | ||
self.statusDataProvider:addItem(ImageListItem.new(windower.addon_path..'assets/buffs/'..buffId..'.png', 20, 20)) | ||
end), item:getPartyMember():on_gain_buff()) | ||
|
||
self.disposeBag:add(item:getPartyMember():on_lose_buff():addAction(function(p, buffId) | ||
self.statusDataProvider:removeItem(ImageListItem.new(windower.addon_path..'assets/buffs/'..buffId..'.png', 20, 20)) | ||
end), item:getPartyMember():on_lose_buff()) | ||
|
||
-- Observe status data provider changes | ||
self.statusListView = ListView.new(HorizontalListLayout.new(20, 2)) | ||
self.statusListView:set_color(75, 175, 175, 175) | ||
|
||
self.disposeBag:add(self.statusDataProvider:onItemsChanged():addAction(function(items) | ||
self.statusListView:updateItems(items) | ||
end), self.statusDataProvider:onItemsChanged()) | ||
|
||
self.disposeBag:add(self.statusDataProvider:onItemsAdded():addAction(function(items) | ||
self.statusListView:addItems(items) | ||
end), self.statusDataProvider:onItemsAdded()) | ||
|
||
self.disposeBag:add(self.statusDataProvider:onItemsRemoved():addAction(function(items) | ||
self.statusListView:removeItems(items) | ||
end), self.statusDataProvider:onItemsRemoved()) | ||
|
||
self:addChild(self.statusListView) | ||
|
||
local buffItems = item:getPartyMember():get_buff_ids():map(function(buffId) | ||
return ImageListItem.new(windower.addon_path..'assets/buffs/'..buffId..'.png', 20, 20) | ||
end) | ||
|
||
self.statusDataProvider:addItems(buffItems) | ||
|
||
return self | ||
end | ||
|
||
function PartyMemberListItemView:destroy() | ||
TextListItemView.destroy(self) | ||
|
||
self.disposeBag:destroy() | ||
|
||
self.statusDataProvider:destroy() | ||
self.statusListView:destroy() | ||
end | ||
|
||
function PartyMemberListItemView:render() | ||
TextListItemView.render(self) | ||
|
||
local x, y = self:get_pos() | ||
local width, height = self:get_size() | ||
|
||
self.statusListView:set_pos(x, y + 25) | ||
self.statusListView:set_size(width, 20) | ||
self.statusListView:set_visible(self:is_visible()) | ||
self.statusListView:render() | ||
end | ||
|
||
return PartyMemberListItemView |
Oops, something went wrong.