Exemplo n.º 1
0
    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);
    }
Exemplo n.º 2
0
    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);
    }
Exemplo n.º 3
0
 public bool CheckRequest(IHaveAnID be)
 {
     return(be == requestingAccess);
 }
Exemplo n.º 4
0
 public ActiveSlot()
 {
     listID  = -1;
     IDowner = null;
 }
Exemplo n.º 5
0
 void SetWritten(IHaveAnID requester, bool isWritten)
 {
     requestingAccess = requester;
     requester.SetWritten(isWritten);
     requestingAccess = null;
 }
Exemplo n.º 6
0
 void PermitSelfAssignment(IHaveAnID requester)
 {
     requestingAccess = requester;
     requester.AllowSelfAssignment(true);
     requestingAccess = null;
 }
Exemplo n.º 7
0
 void DenySelfAssignment(IHaveAnID requester)
 {
     requestingAccess = requester;
     requester.AllowSelfAssignment(false);
     requestingAccess = null;
 }
Exemplo n.º 8
0
 void AssignIDs(IHaveAnID requester, int tempID, long uniqueID)
 {
     requestingAccess = requester;
     requester.QueueIDs(tempID, uniqueID);
     requestingAccess = null;
 }