private void InstantiateOrDestroyGameObjectsAtDeltaReplay(Dictionary <int, string> idToNames) { var idToGameObject = ReplayManager.Instance.IdToGameObject; foreach (var idToName in idToNames) { if (!string.IsNullOrEmpty(idToName.Value)) { var go = GameObject.Instantiate(Resources.Load(idToName.Value) as GameObject, Vector3.zero, Quaternion.identity); idToGameObject.Add(idToName.Key, go); var newEntity = go.GetComponent <ReplayEntity>(); ReplayEntities.Add(go.GetComponent <ReplayEntity>()); Debug.Log($"{go.name} created with id {idToName.Key}"); } else { var go = idToGameObject[idToName.Key]; ReplayEntities.Remove(go.GetComponent <ReplayEntity>()); go.GetComponent <ReplayEntity>().IsDestroyed = true; Debug.Log($"{go.name} destroyed with id {go.GetComponent<ReplayEntity>().Id}"); GameObject.Destroy(idToGameObject[idToName.Key].gameObject); idToGameObject.Remove(idToName.Key); } } }
public override void WriteObjectsIdsAndNames() { var entities = new List <ReplayEntity>(); var i = 0; foreach (var replayEntity in ReplayEntities.Where(replayEntity => !BaseFrame.FrameEntities.Contains(replayEntity))) { entities.Add(replayEntity); i++; } var j = 0; foreach (var replayEntity in BaseFrame.FrameEntities.Where(replayEntity => !ReplayEntities.Contains(replayEntity))) { entities.Add(replayEntity); j++; } ReplayWriter.Write((byte)(i + j)); for (var z = 0; z < (i + j); z++) { ReplayWriter.Write(entities[z].Id); if (z < i) // instantiate those { ReplayWriter.Write(entities[z].GameObjectName); } else if (z < (j + i)) // delete those { ReplayWriter.Write(""); // u dont need the name for objects to delte cause they exist already } } }