示例#1
0
    // 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()
        });
    }