Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

make SearchUtilities.Find work with inactive objects (make it work the same as GameObject.Find) #845

Open
JohnCorby opened this issue Apr 17, 2024 · 2 comments
Assignees
Labels
bug Something isn't working nice to have Features that could be implemented maybe

Comments

@JohnCorby
Copy link
Member

JohnCorby commented Apr 17, 2024

now that owrigidbodys are not unparented until after a frame, most addon paths are wrong (start with body name instead of SolarSystemRoot/whatever_body, and anglerfish are worse) and so search will occur only on the name.
this has already broken some things, such as solar rangers using owlk gameobjects from band together

this can either be fixed by manually checking against those certain paths and making them resolve correctly, or more accurately, by supporting partial paths.
currently gameobject.find does this, but the inactive version does not, and we really should at this point. it wouldnt be that much slower than searching by only name (just get the leaf name and go up the parent or get the root and go down the child. unity docs suggests it does the former idk where i got that from)
we can benchmark this probably

then we can just be exactly the same as gameobject.find except working with inactive objects too.

implementation

top down

  • find all objects with name path[0]
  • try transform.find to path[length-1] until it works
    or manually traverse down child but i imagine that is slower

bottom up

  • find all objects with name path[lenth-1]
  • traverse up
  • this sounds slower cuz manual traverse
    also current implementation is top down already, all thats really needed is making it search all objects instead of just root objects
    also this means u can remove the step where it search for object by name. can just do gameobject.find first and if that doesnt work do this good way

okay so do top down thats like way easy and good

@JohnCorby JohnCorby added the nice to have Features that could be implemented maybe label Apr 17, 2024
@JohnCorby JohnCorby self-assigned this Apr 17, 2024
@JohnCorby JohnCorby added the bug Something isn't working label Apr 17, 2024
@JohnCorby
Copy link
Member Author

probably like a 5 line change LOL

@JohnCorby JohnCorby removed their assignment Jan 6, 2025
@JohnCorby JohnCorby changed the title SearchUtilities.Find feature parity with GameObject.Find make SearchUtilities.Find work with inactive objects (make it work the same as GameObject.Find) Jan 6, 2025
@JohnCorby JohnCorby self-assigned this Jan 20, 2025
@xen-42
Copy link
Member

xen-42 commented Jan 20, 2025

Whenever SearchUtilities uses a fallback method because the full path did not work (so it tries a partial path or just the name) make it print out as a debug message the entire path to the object that would have worked instead.

Also instead of just finding by name we should try finding by all partial paths. So say if you are looking for:
Sector_DreamWorld/Sector_Underground/Sector_PrisonCell/Ghosts_PrisonCell/GhostNodeMap_PrisonCell_Lower/Prefab_IP_GhostBird_Prisoner

If it is not found then try
Sector_Underground/Sector_PrisonCell/Ghosts_PrisonCell/GhostNodeMap_PrisonCell_Lower/Prefab_IP_GhostBird_Prisoner

If it is not found then try
Sector_PrisonCell/Ghosts_PrisonCell/GhostNodeMap_PrisonCell_Lower/Prefab_IP_GhostBird_Prisoner

All the way down until we end up searching just by name (Prefab_IP_GhostBird_Prisoner) or until we find it using a partial path.

This will be slow working but it'll be meant just as a fallback and will prompt the mod creator to update the path properly. Slow is better than not working and the mod explodes.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working nice to have Features that could be implemented maybe
Projects
None yet
Development

No branches or pull requests

2 participants