// This syncs everything except the behavior sources void SyncDatabase() { if (currentBatchName != null) { // Wait for end of batch before sync'ing. return; } using (Util.Profile("SyncDatabase")) { UpdateRequest request = new UpdateRequest(); request.jsonObject = db.Save(); Util.Maybe <UpdateResponse> maybeResponse = voosEngine.CommunicateWithAgent <UpdateRequest, UpdateResponse>(request); if (maybeResponse.IsEmpty()) { throw new System.Exception("Failed to sync behavior database. Cannot proceed."); } brainIdsHandlingCollisions.Clear(); brainIdsHandlingCollisions.AddRange(maybeResponse.Value.brainsHandlingCollisions); onBrainsHandlingCollisionsChanged?.Invoke(); } }
SavedActorPrefab ToPrefab(VoosActor root, Texture2D thumbnail) { List <VoosActor.PersistedState> savedActors = new List <VoosActor.PersistedState>(); Behaviors.Database brainDatabase = new Behaviors.Database(); List <Sojo.Saved> sojos = new List <Sojo.Saved>(); void ExportActorRecursive(VoosActor actor) { savedActors.Add(actor.Save()); actor.GetBehaviorSystem().ExportBrain(actor.GetBrainName(), brainDatabase); foreach (string sojoId in GetUsedSojoIds(actor)) { Sojo sojo = sojoSystem.GetSojoById(sojoId); if (sojo == null) { Util.LogError($"Could not find sojo of id {sojoId} for actor {actor.name}"); continue; } sojos.Add(sojo.Save()); } foreach (VoosActor child in actor.GetChildActors()) { ExportActorRecursive(child); } } ExportActorRecursive(root); return(new SavedActorPrefab { version = SavedActorPrefab.CurrentVersion, label = root.GetDisplayName(), thumbnailJZB64 = System.Convert.ToBase64String(Util.TextureToZippedJpeg(thumbnail)), brainDatabase = brainDatabase.Save(), sojos = sojos.ToArray(), actors = savedActors.ToArray() }); }