Last active
January 15, 2022 18:01
-
-
Save ManickYoj/164b25c954cd7624c02a70976d736641 to your computer and use it in GitHub Desktop.
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
class Registry : MonoBehaviour { | |
// ... | |
// Receivers and transmitterAssignments indexes must be the same length. | |
// It is assumed that every element in receivers is occupied. However, it's okay | |
// if some or all of the transmitters are not occupied | |
[SerializeField] private Receiver[] receivers = new Receiver[2]; | |
private Transmitter[] transmitterAssignments = new Transmitter[2]; | |
private static void AssignReceiver(Transmitter transmitter, int recvIdx) { | |
Receiver receiver = _instance.receivers[recvIdx]; | |
_instance.transmitterAssignments[recvIdx] = transmitter; | |
transmitter.Connect(receiver); | |
} | |
private static void RevokeReceiver(Transmitter transmitter, int recvIdx) { | |
if (recvIdx == -1) return; | |
Receiver receiver = _instance.receivers[recvIdx]; | |
_instance.transmitterAssignments[recvIdx] = null; | |
transmitter.Disconnect(receiver); | |
} | |
private static int NextFreeRecvIdx(int startIndex = 0) { | |
if (startIndex == -1) startIndex = 0; | |
// Starts at start index, but wraps around to look at every receiver once | |
for(int i = startIndex; i < (_instance.receivers.Length + startIndex); i++) { | |
int index = i % _instance.receivers.Length; | |
if (_instance.transmitterAssignments[index] == null) { | |
return index; | |
} | |
} | |
return -1; | |
} | |
// ... | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment