public void Add(ObjectLockingEventArgs objectsLockingEvent)
 {
     if (IsSceneOrProject(objectsLockingEvent.ObjectIds.FirstOrDefault()))   //in the list, there should be always only objects or only projects/scenes, so taking the first id should work
     {
         OnObjectLockingEvent?.Invoke(this, objectsLockingEvent);
     }
     else
     {
         lock (events) {
             events.Add(objectsLockingEvent);
         }
     }
     InvokeEvents();
 }
        private void InvokeEvents()
        {
            if (!canInvoke)
            {
                if (SceneManager.Instance.Valid || ProjectManager.Instance.Valid)   //if there is no locked object when app started, class misses onprojectloaded event
                {
                    OnProjectOrSceneLoaded(null, null);
                    return;
                }
                if (wasAppKilled)   //check for my locks, which are needed to be unlocked, because UI was reset
                //Debug.LogError("!caninvoke + app was killer");
                {
                    lock (events) {
                        if (!wasAppKilled) //check again
                        {
                            return;
                        }
                        List <ObjectLockingEventArgs> toRemove = new List <ObjectLockingEventArgs>();
                        foreach (ObjectLockingEventArgs ev in events)
                        {
                            if (ev.Locked && ev.Owner == LandingScreen.Instance.GetUsername())
                            {
                                foreach (var id in ev.ObjectIds)
                                {
                                    WebsocketManager.Instance.WriteUnlock(id); //if the app was killed, unlock my locks, because UI doesnt know what menu should be opened
                                }
                                toRemove.Add(ev);
                            }
                        }
                        events.RemoveAll(ev => toRemove.Contains(ev));
                    }
                }
                return;
            }
            wasAppKilled = false;

            lock (events) {
                foreach (ObjectLockingEventArgs ev in events)
                {
                    //Debug.LogError("invokuju" + ev.ObjectId);
                    OnObjectLockingEvent?.Invoke(this, ev);
                }
                events.Clear();
            }
        }