mirror of
https://github.com/MirrorNetworking/Mirror.git
synced 2024-11-18 02:50:32 +00:00
Remove and RemoveAt now get the item that was removed
This commit is contained in:
parent
1e55a28f67
commit
f22f4a2c8e
@ -99,7 +99,7 @@ public T GetItem(int i)
|
||||
[EditorBrowsable(EditorBrowsableState.Never)]
|
||||
public abstract class SyncList<T> : IList<T>, SyncObject
|
||||
{
|
||||
public delegate void SyncListChanged(Operation op, int itemIndex);
|
||||
public delegate void SyncListChanged(Operation op, int itemIndex, T item);
|
||||
|
||||
readonly List<T> m_Objects = new List<T>();
|
||||
|
||||
@ -164,7 +164,7 @@ void AddOperation(Operation op, int itemIndex, T item)
|
||||
SyncListChanged listChanged = Callback;
|
||||
if (listChanged != null)
|
||||
{
|
||||
listChanged(op, itemIndex);
|
||||
listChanged(op, itemIndex, item);
|
||||
}
|
||||
}
|
||||
|
||||
@ -264,7 +264,7 @@ public void OnDeserializeDelta(NetworkReader reader)
|
||||
// that we have not applied yet
|
||||
bool apply = changesAhead == 0;
|
||||
int index = 0;
|
||||
T item;
|
||||
T item = default(T);
|
||||
|
||||
switch (operation)
|
||||
{
|
||||
@ -305,6 +305,7 @@ public void OnDeserializeDelta(NetworkReader reader)
|
||||
index = (int)reader.ReadPackedUInt32();
|
||||
if (apply)
|
||||
{
|
||||
item = m_Objects[index];
|
||||
m_Objects.RemoveAt(index);
|
||||
}
|
||||
break;
|
||||
@ -323,7 +324,7 @@ public void OnDeserializeDelta(NetworkReader reader)
|
||||
SyncListChanged listChanged = Callback;
|
||||
if (apply && listChanged != null)
|
||||
{
|
||||
listChanged(operation, index);
|
||||
listChanged(operation, index, item);
|
||||
}
|
||||
|
||||
// we just skipped this change
|
||||
|
@ -166,14 +166,59 @@ public void SyncListFloatTest()
|
||||
public void CallbackTest()
|
||||
{
|
||||
bool called = false;
|
||||
int calledIndex = 0;
|
||||
|
||||
clientSyncList.Callback += (op, index) => { called = true; calledIndex = index; };
|
||||
clientSyncList.Callback += (op, index, item) =>
|
||||
{
|
||||
called = true;
|
||||
|
||||
Assert.That(op, Is.EqualTo(SyncList<string>.Operation.OP_ADD));
|
||||
Assert.That(index, Is.EqualTo(3));
|
||||
Assert.That(item, Is.EqualTo("yay"));
|
||||
};
|
||||
|
||||
serverSyncList.Add("yay");
|
||||
SerializeDeltaTo(serverSyncList, clientSyncList);
|
||||
|
||||
|
||||
Assert.That(called, Is.True);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void CallbackRemoveTest()
|
||||
{
|
||||
bool called = false;
|
||||
|
||||
clientSyncList.Callback += (op, index, item) =>
|
||||
{
|
||||
called = true;
|
||||
|
||||
Assert.That(op, Is.EqualTo(SyncList<string>.Operation.OP_REMOVE));
|
||||
Assert.That(item, Is.EqualTo("World"));
|
||||
};
|
||||
serverSyncList.Remove("World");
|
||||
SerializeDeltaTo(serverSyncList, clientSyncList);
|
||||
|
||||
Assert.That(called, Is.True);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void CallbackRemoveAtTest()
|
||||
{
|
||||
bool called = false;
|
||||
|
||||
clientSyncList.Callback += (op, index, item) =>
|
||||
{
|
||||
called = true;
|
||||
|
||||
Assert.That(op, Is.EqualTo(SyncList<string>.Operation.OP_REMOVEAT));
|
||||
Assert.That(index, Is.EqualTo(1));
|
||||
Assert.That(item, Is.EqualTo("World"));
|
||||
};
|
||||
|
||||
serverSyncList.RemoveAt(1);
|
||||
SerializeDeltaTo(serverSyncList, clientSyncList);
|
||||
|
||||
Assert.That(called, Is.True);
|
||||
Assert.That(calledIndex, Is.EqualTo(3));
|
||||
}
|
||||
|
||||
[Test]
|
||||
|
Loading…
Reference in New Issue
Block a user