// Lance une mise à jour de chaque EntitySynchroniserComponent et regroupe leurs // EntitySynchronizationDataObjects dans un objet StateUpdateObject portant le nom "EntitySynchronization". // Renvoi également un StateUpdateObject "CreatedEntities" et un StateUpdateObject "DestroyedEntities". public StateUpdateObject[] GetStateUpdateInformation() { StateUpdateObject EntitySyncObject = new StateUpdateObject("EntitySynchronization", null); List <BloodAndBileEngine.EntitySynchronizationDataObject> SyncDataObjectList = new List <BloodAndBileEngine.EntitySynchronizationDataObject>(); foreach (BloodAndBileEngine.Entity entity in LivingEntities) { BloodAndBileEngine.EntitySynchroniserComponent syncComponent = (BloodAndBileEngine.EntitySynchroniserComponent)entity.GetComponent(typeof(BloodAndBileEngine.EntitySynchroniserComponent)); if (syncComponent != null) { syncComponent.Update(0f); SyncDataObjectList.Add(syncComponent.GetSynchronizationData()); } } EntitySyncObject.Information = SyncDataObjectList.ToArray(); return(new StateUpdateObject[] { EntitySyncObject }); }
/// <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(); } } }