Skip to content

Commit

Permalink
Automated commit to update trust
Browse files Browse the repository at this point in the history
  • Loading branch information
cyritegamestudios committed Sep 7, 2023
1 parent 1c7f117 commit 850e335
Show file tree
Hide file tree
Showing 39 changed files with 1,276 additions and 99 deletions.
1 change: 1 addition & 0 deletions addons/Trust/Trust-Include.lua
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ require('TrustShortcuts')

TrustHud = require('ui/TrustHud')
TrustRemoteCommands = require('TrustRemoteCommands')
TrustUnitTests = require('TrustUnitTests')

require('Trust-Cylibs-Include')

11 changes: 11 additions & 0 deletions addons/Trust/TrustUnitTests.lua
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ require('cylibs/tests/run_tests')

local ActionQueueTests = require('cylibs/tests/action_queue/action_queue_tests')
local ListTests = require('cylibs/tests/list_tests')
local PartyTests = require('cylibs/tests/party/party_tests')
local TabbedViewTests = require('cylibs/tests/tabbed_view_tests')

local runningTests = L{}
Expand Down Expand Up @@ -37,6 +38,16 @@ function handle_tests(test_name)

runningTests:append(test)

test:run()
elseif test_name == 'party' then
local test = PartyTests.new()

test:onCompleted():addAction(function(success)
print('Success is: '..tostring(success))
end)

runningTests:append(test)

test:run()
end
end
4 changes: 2 additions & 2 deletions addons/Trust/cylibs/actions/weapon_skill.lua
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ require('math')
require('logger')
require('lists')

local packets = require('packets')
local job_util = require('cylibs/util/job_util')

local Action = require('cylibs/actions/action')
local WeaponSkillAction = setmetatable({}, {__index = Action })
Expand Down Expand Up @@ -43,7 +43,7 @@ end

function WeaponSkillAction:perform_weapon_skill(weapon_skill_name)
local send_chat_input = function(weapon_skill_name)
if L{ 'Moonlight', 'Myrkr' }:contains(weapon_skill_name) then
if L{ 'Moonlight', 'Myrkr', 'Dagan' }:contains(weapon_skill_name) then
windower.chat.input("/ws \"%s\" <me>":format(weapon_skill_name))
else
windower.chat.input("/ws \"%s\" <t>":format(weapon_skill_name))
Expand Down
2 changes: 1 addition & 1 deletion addons/Trust/cylibs/battle/spell.lua
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ end
function Spell:description()
local result = self.spell_name
if self.job_names and self.job_names:length() > 0 then
local job_names = self.job_names:tostring()
local job_names = "Some Jobs"
if self.job_names:equals(job_util.all_jobs()) then
job_names = "All Jobs"
end
Expand Down
17 changes: 10 additions & 7 deletions addons/Trust/cylibs/entity/alter_ego.lua
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,11 @@ local BuffTracker = require('cylibs/battle/buff_tracker')
-------
-- Default initializer for an AlterEgo.
-- @tparam number id Mob id
-- @tparam string name Mob name
-- @treturn AlterEgo An alter ego
function AlterEgo.new(id)
function AlterEgo.new(id, name)
local self = setmetatable(PartyMember.new(id), AlterEgo)
self.name = name
self.buff_tracker = BuffTracker.new()
return self
end
Expand All @@ -40,19 +42,19 @@ function AlterEgo:monitor()

self.buff_tracker:on_gain_buff():addAction(function(target_id, buff_id)
if target_id == self:get_id() then
local buff_ids = self:get_buff_ids()
buff_ids:add(buff_id)
local new_buff_ids = self:get_buff_ids():copy(true)
new_buff_ids:add(buff_id)

self:update_buffs(buff_ids)
self:update_buffs(new_buff_ids)
end
end)

self.buff_tracker:on_lose_buff():addAction(function(target_id, buff_id)
if target_id == self:get_id() then
local buff_ids = self:get_buff_ids()
buff_ids:remove(buff_id)
local new_buff_ids = self:get_buff_ids():copy(true)
new_buff_ids:remove(buff_id)

self:update_buffs(buff_ids)
self:update_buffs(new_buff_ids)
end
end)

Expand All @@ -65,6 +67,7 @@ end
function AlterEgo:update_buffs(buff_ids)
local buff_ids = S(buff_util.buffs_for_buff_ids(buff_ids))
local delta = set.sdiff(buff_ids, self.buff_ids)

for buff_id in delta:it() do
if buff_ids:contains(buff_id) then
self:on_gain_buff():trigger(self, buff_id)
Expand Down
18 changes: 17 additions & 1 deletion addons/Trust/cylibs/entity/party.lua
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,16 @@ local trusts = require('cylibs/res/trusts')
local Party = setmetatable({}, {__index = Entity })
Party.__index = Party

-- Event called when the party member is added.
function Party:on_party_member_added()
return self.party_member_added
end

-- Event called when the party member is removed.
function Party:on_party_member_removed()
return self.party_member_removed
end

-- Event called when a party member's HP changes.
function Party:on_party_member_hp_change()
return self.hp_change
Expand Down Expand Up @@ -50,6 +60,8 @@ function Party.new()
self.is_monitoring = false
self.party_members = T{}

self.party_member_added = Event.newEvent()
self.party_member_removed = Event.newEvent()
self.hp_change = Event.newEvent()
self.mp_change = Event.newEvent()
self.party_member_ko = Event.newEvent()
Expand Down Expand Up @@ -78,6 +90,8 @@ function Party:destroy()
party_member:destroy()
end

self:on_party_member_added():removeAllActions()
self:on_party_member_removed():removeAllActions()
self:on_party_member_hp_change():removeAllActions()
self:on_party_member_mp_change():removeAllActions()
self:on_party_member_ko():removeAllActions()
Expand Down Expand Up @@ -143,7 +157,7 @@ end
function Party:add_member(mob_id, name, main_job_id, sub_job_id, hpp, hp)
if mob_id and not self.party_members[mob_id] then
if party_util.is_alter_ego(name) then
self.party_members[mob_id] = AlterEgo.new(mob_id)
self.party_members[mob_id] = AlterEgo.new(mob_id, name)
else
self.party_members[mob_id] = PartyMember.new(mob_id)
end
Expand All @@ -156,6 +170,7 @@ function Party:add_member(mob_id, name, main_job_id, sub_job_id, hpp, hp)
if not self.party_members[mob_id]:is_alive() then
self:on_party_member_ko():trigger(self.party_members[mob_id])
end
self:on_party_member_added():trigger(self.party_members[mob_id])
end

local party_member = self.party_members[mob_id]
Expand Down Expand Up @@ -234,6 +249,7 @@ function Party:prune_party_members()
if party_member:get_id() == self:get_assist_target():get_id() then
self:set_assist_target(self:get_party_member(windower.ffxi.get_player().id))
end
self:on_party_member_removed():trigger(party_member)
party_member:destroy()
self.party_members[party_member:get_id()] = nil
end
Expand Down
69 changes: 69 additions & 0 deletions addons/Trust/cylibs/entity/party/ui/party_member_data_provider.lua
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 addons/Trust/cylibs/entity/party/ui/party_member_list_item.lua
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
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
Loading

0 comments on commit 850e335

Please sign in to comment.