private void OnDataReceive(string address, OscDataHandle data)
        {
            var command = data.GetElementAsString(0);

            switch (command)
            {
            case "alive":
                for (var i = 1; i < data.GetElementCount(); i++)
                {
                    var aliveId = data.GetElementAsInt(i);
                    _addedCursors.Add(aliveId);
                }


                foreach (var value in cursors.Where(value => !_addedCursors.Contains(value.Key)))
                {
                    _removedCursors.Add(value.Key);
                }

                break;

            case "set":
                if (data.GetElementCount() < 7)
                {
                    return;
                }

                var id = data.GetElementAsInt(1);

                if (!cursors.TryGetValue(id, out var cursor))
                {
                    cursor = new CCTuioCursor(id);
                }
                cursor.Update(
                    data.GetElementAsFloat(2),
                    data.GetElementAsFloat(3),
                    data.GetElementAsFloat(4),
                    data.GetElementAsFloat(5),
                    data.GetElementAsFloat(6)
                    );

                _updatedCursors.Add(cursor);
                break;

            case "fseq":
                if (data.GetElementCount() < 2)
                {
                    return;
                }
                frameNumber = data.GetElementAsInt(1);

                _updatedCursors.ForEach(updatedCursor =>
                {
                    _addedCursors.ForEach(i => Debug.Log(i));
                    if (_addedCursors.Contains(updatedCursor.Id) && !cursors.ContainsKey(updatedCursor.Id))
                    {
                        cursors.Add(updatedCursor.Id, updatedCursor);
                        _addQueue.Enqueue(updatedCursor);
                    }
                    else
                    {
                        _updateQueue.Enqueue(updatedCursor);
                    }
                });

                _removedCursors.ForEach(cursorId =>
                {
                    _removeQueue.Enqueue(cursors[cursorId]);
                    cursors.Remove(cursorId);
                });
                _addedCursors.Clear();
                _removedCursors.Clear();
                _updatedCursors.Clear();
                break;
            }
        }
Example #2
0
 void OnDataReceive(string address, OscDataHandle data)
 {
     lock (_queue) _queue.Enqueue(data.GetElementAsInt(0));
 }
Example #3
0
 protected override bool GetMessageValue(OscDataHandle dataHandle)
 {
     return(dataHandle.GetElementAsInt(0) > 0);
 }