Thread Tools Display Modes
09/19/18, 08:31 AM   #1
Cardinal05
AddOn Author - Click to view addons
Join Date: Feb 2018
Posts: 33
[implemented] Parent/Child Furniture Relationships (aka: Chip! Holy ---- this rocks)

Ok, so first, huge, huge thank you for the new Furniture Parent/Child relationship feature.

...and, the fact that they are hierarchical is amazing. I see what you did there. This is going to be game changing. <3

So, seeing all of the potential that this new feature has, I was wondering... would it be possible to add two methods:

furnitureId HousingEditorGetFurnitureParent( furnitureId )
furnitureId[] HousingEditorGetFurnitureChildren( furnitureId )

This would make managing these relationships way, way, way better from an addon perspective. If that would be at all doable, I would appreciate it so much.

Again, thank you for everything that you and your team do!
 
09/19/18, 09:50 AM   #2
Cardinal05
AddOn Author - Click to view addons
Join Date: Feb 2018
Posts: 33
Also, I am not sure if this is intended but the methods:

HousingEditorRequestSetFurnitureParent
HousingEditorRequestClearFurnitureParent

are kicking me from the server when I send them at the same rate as the HousingEditorSetFurniturePosition method (10 calls per second).

I also tried 5 calls per second and still get kicked from the server for a large set (testing with 200 items at the moment).

Should these be throttled this much?
 
09/19/18, 04:25 PM   #3
ZOS_ChipHilseberg
ZOS Staff!
Premium Member
Yes this person is from ZeniMax!
Join Date: Oct 2014
Posts: 551
We can add the new functions. The message rates will be an ongoing evaluation. What is your use case?
 
09/20/18, 11:02 PM   #4
Cardinal05
AddOn Author - Click to view addons
Join Date: Feb 2018
Posts: 33
Thank you so much Chip!

The domain of the Use Cases would be the integration of Essential Housing Tools' multi-select tools with the new Parent-Child relationship system.

So, an existing User Story I have for Essential Housing Tools' "Connected Items" multi-select tool is:


As a User, when I multi-select items using the "Connected Items" mode, all items adjacent to the target item as well as any items adjacent to those items (recursive) are added to my current selection.


To extend this functionality, I would like to be able to add the following User Stories:


As a User, when I choose "Link these items," the first item of every group of 50 items in my current selection is automatically linked as a parent of the subsequent 49 items; each parent item is then linked to the previous parent item to create a linked list that joins the entire group of items as one manageable unit.

As a User, when I choose "Unlink these items," all parent items in my current selection are automatically unlinked from all of their associated child items.


Additionally, by having awareness of the existing parent-child relationships within Essential Housing Tools, I can then manipulate groups of linked items correctly by only adjusting the parent item (or parent items) in the group of selected items, relative to that item(s)' position within the entire group.

For example, if the User selects a group of 50 linked items consisting of 1 parent and 49 children, and then pitches the entire selection by 45 degrees, I can identify which item(s) are the parents, calculate their position relative to the entire group, and adjust its pitch in a manner that nets a 45 degree pitch of the group of items as a single unit (providing an intuitive, "when I pitch this group of items, the whole thing pitches as expected without worrying about which item(s) are the parents).

And without boring you anymore, I'll just add that this would be tremendously useful for the host of other functions that Essential Housing Tools can provide, such as arrangement of items, laying items out, constructing shapes from groups of items, animations and more.

Again, thank you for all that you do -- the community greatly appreciates it! <3
 
09/21/18, 04:48 AM   #5
sirinsidiator
 
sirinsidiator's Avatar
AddOn Author - Click to view addons
Join Date: Apr 2014
Posts: 1,567
I'll also need this to update SaveHouse so it saves and restores the groups. If the message rate limit is too low, it will take forever to restore a saved state in a house with many groups.
 
09/21/18, 12:47 PM   #6
Cardinal05
AddOn Author - Click to view addons
Join Date: Feb 2018
Posts: 33
Originally Posted by sirinsidiator View Post
I'll also need this to update SaveHouse so it saves and restores the groups. If the message rate limit is too low, it will take forever to restore a saved state in a house with many groups.
Also, just to add, from what I have found and what I program for:

- The limit is 10 item placements, removals and moves per second.

- The limit for changing item state seems to be drastically lower -- I have to throttle it down to 2 state changes per second. I'm not sure why (perhaps more calls are being done on our behalf under the hood?).

- The limit for unlinking (and possibly linking) items is so low right now that I gave up on trying to use it because I was repeatedly kicked from the server. I think it may be, in part, due to O(n) calls being done on our behalf under the hood where n is related to the number of children; but I can't be certain.
 
10/05/18, 01:06 AM   #7
Cardinal05
AddOn Author - Click to view addons
Join Date: Feb 2018
Posts: 33
Programmatic Access to Query Parent/Child Relationships

The more I am working with the new changes on the PTS, the more I am realizing that we really will need a way to query the relationship between furniture items via the API.

Without methods to determine if a given item has a dependency or dependents, we cannot guarantee to the user that we will be able to move/manage their furniture accurately.

For example, if a user establishes a table as a parent with the surrounding chairs as children, our add-ons should only be moving the parent table item. Additionally, we should also move that table relative to the group as a whole in order to feel intuitive to the user when adjusting the orientation. If a user is rotating the group, they can currently expect that rotate operation to rotate the group around the group's logical center point (as is the case with Essential Housing Tools today).

If we cannot query which items, if any, are parents to any other items in the group, we cannot know whether we should restrict our move operations to the parent items or not; in fact, at this point in time on the PTS, anyone using a Housing add-on will be running a very likely risk of distorting their furniture layouts if they use the add-on to manipulate any group of items that contains parent-child relationships as the add-on will not know which items are the parents.

I hope I have explained this well as we really will need at least a function to identify the Parent of an item and/or the Children of an item (and more ideally, a function that can do this in bulk rather than individual checks - unless there's no server round-trip per call) if our Housing add-ons are to remain viable tools that you can reasonably assume will not "mess up" your house. <3

Thank you so much!
@Cardinal05
 
10/08/18, 07:43 AM   #8
ZOS_ChipHilseberg
ZOS Staff!
Premium Member
Yes this person is from ZeniMax!
Join Date: Oct 2014
Posts: 551
These should already exist as GetPlacedFurnitureParent and GetPlacedFurnitureChildren.
 
10/09/18, 11:54 AM   #9
Cardinal05
AddOn Author - Click to view addons
Join Date: Feb 2018
Posts: 33
Originally Posted by ZOS_ChipHilseberg View Post
These should already exist as GetPlacedFurnitureParent and GetPlacedFurnitureChildren.
So they do! You are awesome - thank you so much!

 

ESOUI » Developer Discussions » Wish List » [implemented] Parent/Child Furniture Relationships (aka: Chip! Holy ---- this rocks)

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off