[ ] have a Zone module then a ZoneController as a child
[ ] for zone, support both players and parts
[ ] have methods like :getPlayers, :getLocalPlayer, :getParts, :checkPlayerInZone, :checkLocalPlayerInZone, :checkPartInZone
[ ] have events which automatically initiate a loop when connected to - .playerEntered, playerExited, partEntered, partExited, localPlayerEntered, localPlayerExited
[ ] for players, dynamically change between region3 + raycasting and solely raycasting depending upon factors such as total volume across all zones, number of players in server, localPlayer loop, etc
[ ] for parts, call region3 like normal then raycast, however if a part is anchored (or not) consider caching results based on enum.accuracy
[ ] handle logic, decision making and even raycasting within the controller
[ ] when raycasting, perform a centre check initially, then if this fails use angle math to get the face nearest to the closest zone centre, and perform an additional tiny raycast in that direction
[ ] introduce enum.Accuracy with items such as 'Precise', 'High', 'Medium', 'Low' and a zone.accuracy property
[ ] once again have :update and. updated for calculating the zones min and max bounds and region, but completely scrap the 'cluster system'
[ ] introduce :getRandomPoint again but this time do purely a while loop with completely random casting
[ ] for ZoneController, remove create/remove methods entirely and just have ZoneController.getZones()
[ ] parent utility modules like Signal and Maid under the Zone module
Improvements
Bugs
[ ] have the raycast fire from the hrp centre (instead of feet) for improved accuracy on upwards slanting shapes dipping into the ground
[ ] explore rotated wedge bug. this may be solved by the points above
[ ] random generation appears to fail below other parts Repo file: https://devforum.roblox.com/uploads/short-url/pn1v2zXgk3e5QxwU62m2QjnocD4.rbxl
[ ] cluster infinite recursion https://devforum.roblox.com/t/zone-errors/864654/5
Main