private void OnCreateRemoteObject(ref CreateRemoteObject p) { int index = p.Index; if ((index & 0xff) == localPlayerIndex) { return; } if (remoteActors.ContainsKey(index)) { return; } EventType eventType = p.EventType; ushort[] eventParams = p.EventParams; Vector3 pos = p.Pos; Root.DispatchToMainThread(delegate { ActorBase actor = EventSpawner.SpawnEvent(ActorInstantiationFlags.None, eventType, pos, eventParams); IRemotableActor remotableActor = actor as IRemotableActor; if (remotableActor == null) { return; } remoteActors[index] = remotableActor; AddObject(actor); }); }
public override void RemoveActor(ActorBase actor) { base.RemoveActor(actor); IRemotableActor remotableActor = actor as IRemotableActor; if (remotableActor == null) { return; } int actorIndex = remotableActor.Index; if (!localRemotableActors.Remove(actorIndex)) { return; } DestroyRemotableActor p = new DestroyRemotableActor(); p.Index = actorIndex; net.Send(p, 5, NetDeliveryMethod.ReliableUnordered, PacketChannels.Main); }
public override void AddActor(ActorBase actor) { base.AddActor(actor); IRemotableActor remotableActor = actor as IRemotableActor; if (remotableActor == null) { return; } int actorIndex = localPlayerIndex | (lastRemotableActorIndex << 8); remotableActor.Index = actorIndex; localRemotableActors[actorIndex] = remotableActor; CreateRemotableActor p = new CreateRemotableActor(); remotableActor.OnCreateRemotableActor(ref p); p.Index = actorIndex; net.Send(p, 13, NetDeliveryMethod.ReliableUnordered, PacketChannels.Main); lastRemotableActorIndex++; }