public void RegisterID(IHaveAnID needsID) { if (needsID.Written || !needsID.CanSelfAssign) { return; } ActiveSlot newActive = null; if (Application.isEditor) { if (needsID == null) { Debug.LogError("ERROR: TRYING TO REGISTER ID OF NULL ITEM!"); return; } } if (inactiveQueue.Count == 0) { newActive = new ActiveSlot(); allActive.Add(newActive); newActive.listID = allActive.Count - 1; } else { newActive = inactiveQueue.Dequeue(); if (Application.isEditor) { if (newActive.IDowner != null) { Debug.LogError("ERROR: ENTITY ID " + newActive.listID + " IS ALREADY IN USE BY " + allActive[newActive.listID].IDowner.name); return; } } } newActive.IDowner = needsID; AssignIDs(needsID, newActive.listID, -1); SetWritten(needsID, true); }
public void UnregisterID(IHaveAnID toReturn) { if (Application.isEditor) { if (toReturn == null) { Debug.LogError("ERROR: RETURNING NULL ENTITY!"); return; } if (toReturn.NetworkingID < 0) { Debug.LogError("ERROR: " + toReturn.name + " NEVER HAD ITS ID SET"); return; } if (allActive[toReturn.NetworkingID].IDowner != toReturn) { Debug.LogError("ERROR: MISMATCH OF REGISTERED IDS FOR " + toReturn.name); } } if (!toReturn.Written) { return; } int returningID = toReturn.NetworkingID; inactiveQueue.Enqueue(allActive[returningID]); allActive[returningID].IDowner = null; RevokeIDs(toReturn); SetWritten(toReturn, false); }
public bool CheckRequest(IHaveAnID be) { return(be == requestingAccess); }
public ActiveSlot() { listID = -1; IDowner = null; }
void SetWritten(IHaveAnID requester, bool isWritten) { requestingAccess = requester; requester.SetWritten(isWritten); requestingAccess = null; }
void PermitSelfAssignment(IHaveAnID requester) { requestingAccess = requester; requester.AllowSelfAssignment(true); requestingAccess = null; }
void DenySelfAssignment(IHaveAnID requester) { requestingAccess = requester; requester.AllowSelfAssignment(false); requestingAccess = null; }
void AssignIDs(IHaveAnID requester, int tempID, long uniqueID) { requestingAccess = requester; requester.QueueIDs(tempID, uniqueID); requestingAccess = null; }