Skip to content

Instantly share code, notes, and snippets.

@ManickYoj
Last active January 15, 2022 18:01
Show Gist options
  • Save ManickYoj/164b25c954cd7624c02a70976d736641 to your computer and use it in GitHub Desktop.
Save ManickYoj/164b25c954cd7624c02a70976d736641 to your computer and use it in GitHub Desktop.
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