/// <summary> /// Visite les modules qui implémentent "StateUpdater" un par un et collecte leurs informations pour les rassembler /// dans le StateUpdateMessage. /// </summary> void CookStateUpdate() { List <BloodAndBileEngine.Networking.Messaging.NetworkMessages.StateUpdateObject> stateUpdates = new List <BloodAndBileEngine.Networking.Messaging.NetworkMessages.StateUpdateObject>(); foreach (IStateUpdater module in StateUpdaterModules) { foreach (BloodAndBileEngine.Networking.Messaging.NetworkMessages.StateUpdateObject stateUpdate in module.GetStateUpdateInformation()) { stateUpdates.Add(stateUpdate); } } StateUpdateMessage = new BloodAndBileEngine.Networking.Messaging.NetworkMessages.StateUpdateMessage(stateUpdates.ToArray()); }
/// <summary> /// Création des entités créées, destruction des entités détruites, /// et synchronisation des autres. /// </summary> /// <param name="stateUpdate"></param> public void OnStateUpdate(BloodAndBileEngine.Networking.Messaging.NetworkMessages.StateUpdateMessage stateUpdate) { // Synchronisation // Chaque EntitySynchronizationDataObject a un identifiant d'entité à synchroniser, il suffit donc // d'appliquer la synchronisation à l'entité en question. BloodAndBileEngine.EntitySynchronizationDataObject[] synchObject = (BloodAndBileEngine.EntitySynchronizationDataObject[])(stateUpdate.GetStateUpdateInfo("EntitySynchronization")[0].Information); if (synchObject == null || synchObject.Length == 0) { BloodAndBileEngine.Debugger.Log("ERREUR : pas de EntitySynchronizationDataObject !", UnityEngine.Color.red); } foreach (BloodAndBileEngine.EntitySynchronizationDataObject SynchData in synchObject) { BloodAndBileEngine.Entity entity = BloodAndBileEngine.EntitiesManager.GetEntityFromID(SynchData.GetEntityID()); BloodAndBileEngine.EntitySynchroniserComponent synchComponent = (BloodAndBileEngine.EntitySynchroniserComponent)entity.GetComponent(typeof(BloodAndBileEngine.EntitySynchroniserComponent)); if (synchComponent != null) { synchComponent.GetSynchronizationData().SetSynchInfoFromSynchObject(SynchData); synchComponent.OnSynch(); } } }
public override void Stop() { base.Stop(); StateUpdaterModules = null; StateUpdateMessage = null; }