public void Import(string id, SavedActorPrefab prefab)
    {
        string json = JsonUtility.ToJson(prefab, true);
        Sojo   sojo = new Sojo(ToSojoId(id), prefab.label, SojoType.ActorPrefab, json);

        sojoSystem.PutSojo(sojo);
    }
Example #2
0
 public ActorPrefabImpl(SavedActorPrefab saved, Texture2D thumbnail, string id, SojoSystem sojos)
 {
     saved.AssertValid();
     this.saved     = saved;
     this.thumbnail = thumbnail;
     this.id        = id;
     this.sojos     = sojos;
 }
    ActorPrefabImpl Deserialize(Sojo sojo)
    {
        SavedActorPrefab saved = JsonUtility.FromJson <SavedActorPrefab>(sojo.content);

        saved.PerformUpgrades();
        Texture2D thumbnail = null;

        if (!saved.thumbnailJZB64.IsNullOrEmpty())
        {
            thumbnail = Util.ZippedJpegToTexture2D(System.Convert.FromBase64String(saved.thumbnailJZB64), false);
        }
        return(new ActorPrefabImpl(saved, thumbnail, FromSojoId(sojo.id), sojoSystem));
    }
    public static Dictionary <string, SavedActorPrefab> ReadPrefabsFromDir(
        string path,
#if USE_STEAMWORKS
        WorkshopItem workshopItem = null,
#endif
        Dictionary <string, SavedActorPrefab> prefabs = null)
    {
        if (prefabs == null)
        {
            prefabs = new Dictionary <string, SavedActorPrefab>();
        }
        IEnumerable <string> files = Directory.EnumerateFiles(path, "*.json");

        foreach (string file in files)
        {
            string id = Path.GetFileNameWithoutExtension(file);
            try
            {
                string           json   = File.ReadAllText(file);
                SavedActorPrefab prefab = JsonUtility.FromJson <SavedActorPrefab>(json);
#if USE_STEAMWORKS
                if (workshopItem != null)
                {
                    id               += $" (from \"{workshopItem.Name}\" on Workshop)";
                    prefab.label     += $" (from \"{workshopItem.Name}\" on Workshop)";
                    prefab.workshopId = workshopItem.SteamNative.m_nPublishedFileId.ToString();
                }
#endif
                prefabs[id] = prefab;
            }
            catch (System.IO.FileNotFoundException)
            {
                // Maybe user modified it badly? Ignore it.
            }
        }

        foreach (string subDir in Directory.GetDirectories(path))
        {
            ReadPrefabsFromDir(subDir,
#if USE_STEAMWORKS
                               workshopItem,
#endif
                               prefabs);
        }

        return(prefabs);
    }
Example #5
0
    ActorPrefab LoadActorPrefab(string uri)
    {
        string           voosFilePath = GetPathForUri(uri);
        string           json         = File.ReadAllText(voosFilePath);
        SavedActorPrefab actorPrefab  = JsonUtility.FromJson <SavedActorPrefab>(json);

        actorPrefab.PerformUpgrades();

        // Load thumbnail
        string    thumbnailPng = GetActorThumbnailPath(uri);
        Texture2D thumbnail    = Util.ReadPngToTexture(thumbnailPng);

        if (thumbnail == null && !actorPrefab.thumbnailJZB64.IsNullOrEmpty())
        {
            thumbnail = Util.ZippedJpegToTexture2D(
                System.Convert.FromBase64String(actorPrefab.thumbnailJZB64));
        }
        return(new ActorPrefabImpl(actorPrefab, thumbnail, uri, sojos));
    }
 public string FindOneActorUsingBehavior(string behaviorUri)
 {
     foreach (var sojo in sojoSystem.GetAllSojosOfType(SojoType.ActorPrefab))
     {
         Debug.Assert(sojo.id.Contains(SojoIdPrefix));
         SavedActorPrefab saved = JsonUtility.FromJson <SavedActorPrefab>(sojo.content);
         saved.PerformUpgrades();
         foreach (var brain in saved.brainDatabase.brains)
         {
             foreach (var use in brain.behaviorUses)
             {
                 if (use.behaviorUri == behaviorUri)
                 {
                     // Too lazy to find the actual actor in the prefab..
                     return($"Actor in prefab '{saved.label}'");
                 }
             }
         }
     }
     return(null);
 }