Skip to content

Commit f3c95f3

Browse files
committed
Laid out more flow code
1 parent 61f06db commit f3c95f3

File tree

4 files changed

+36
-20
lines changed

4 files changed

+36
-20
lines changed

MLAPI/Data/NetworkedVar.cs

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -29,27 +29,22 @@ public T Value
2929
}
3030
set
3131
{
32-
if (Settings.SendOnChange)
33-
{
34-
IsDirty = false;
35-
LastSyncedTime = NetworkingManager.singleton.NetworkTime;
36-
InternalValue = value;
37-
//TODO: Send
38-
}
39-
else
40-
{
41-
InternalValue = value;
42-
IsDirty = true;
43-
}
32+
IsDirty = true;
33+
InternalValue = value;
4434
}
4535
}
4636

47-
bool INetworkedVar.NeedsDirtySync()
37+
void INetworkedVar.OnSynced()
4838
{
49-
if (!IsDirty && !Settings.SendOnChange && NetworkingManager.singleton.NetworkTime - LastSyncedTime >= Settings.SendDelay)
50-
{
51-
IsDirty = true;
52-
}
39+
IsDirty = false;
40+
LastSyncedTime = NetworkingManager.singleton.NetworkTime;
41+
}
42+
43+
bool INetworkedVar.IsDirty()
44+
{
45+
if (!IsDirty) return false;
46+
if (Settings.SendOnChange) return true;
47+
if (NetworkingManager.singleton.NetworkTime - LastSyncedTime >= Settings.SendDelay) return true;
5348
return IsDirty;
5449
}
5550

@@ -100,7 +95,7 @@ void INetworkedVar.SetNetworkedBehaviour(NetworkedBehaviour behaviour)
10095
void INetworkedVar.SetFieldFromReader(BitReader reader)
10196
{
10297
// TODO TwoTen - Boxing sucks
103-
T newValue = (T)FieldTypeHelper.ReadFieldType(reader, typeof(T), (object)InternalValue);
98+
InternalValue = (T)FieldTypeHelper.ReadFieldType(reader, typeof(T), (object)InternalValue);
10499
}
105100

106101
void INetworkedVar.WriteFieldToWriter(BitWriter writer)
@@ -109,9 +104,10 @@ void INetworkedVar.WriteFieldToWriter(BitWriter writer)
109104
}
110105
}
111106

112-
internal interface INetworkedVar
107+
public interface INetworkedVar
113108
{
114-
bool NeedsDirtySync();
109+
void OnSynced();
110+
bool IsDirty();
115111
bool CanClientWrite(uint clientId);
116112
bool CanClientRead(uint clientId);
117113
void WriteFieldToWriter(BitWriter writer);

MLAPI/MonoBehaviours/Core/NetworkedBehaviour.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -953,6 +953,17 @@ internal void NetworkedVarInit()
953953
}
954954
}
955955

956+
internal void NetworkedVarPrepareSend()
957+
{
958+
//TODO: Loop all the fields, write dirty fields and send them to the transport.
959+
//TODO: Do this efficiently.
960+
//Avoid: One loop for the networkedFields and then one per client per networkedField iteration.
961+
962+
//Flow:
963+
//Check if dirty, send to clients that have read access
964+
//Call OnSynced
965+
}
966+
956967
internal void HandleNetworkedVarChangedByRemote(BitReader reader)
957968
{
958969
ushort index = reader.ReadUShort();

MLAPI/MonoBehaviours/Core/NetworkedObject.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,14 @@ internal static void InvokeSyncvarUpdate()
281281
}
282282
}
283283

284+
internal static void NetworkedVarPrepareSend()
285+
{
286+
for (int i = 0; i < NetworkedBehaviours.Count; i++)
287+
{
288+
NetworkedBehaviours[i].NetworkedVarPrepareSend();
289+
}
290+
}
291+
284292

285293
//Writes SyncedVar data in a formatted way so that the SetFormattedSyncedVarData method can read it.
286294
//The format doesn't NECCECARLY correspond with the "general syncedVar message layout"

MLAPI/MonoBehaviours/Core/NetworkingManager.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -640,6 +640,7 @@ private void Update()
640640
{
641641
if((NetworkTime - lastSendTickTime >= (1f / NetworkConfig.SendTickrate)) || NetworkConfig.SendTickrate <= 0)
642642
{
643+
NetworkedObject.NetworkedVarPrepareSend();
643644
foreach (KeyValuePair<uint, NetworkedClient> pair in ConnectedClients)
644645
{
645646
byte error;

0 commit comments

Comments
 (0)