コード例 #1
0
    private void OnOpenButtonClick(string dataBaseOpenPath)
    {
        SceneDescriptor sceneDescriptor = SceneDescriptorsHelper.LoadFromFile(dataBaseOpenPath);

        if (!String.IsNullOrEmpty(sceneDescriptor.sceneName))
        {
            scene = new GameObject(sceneDescriptor.sceneName).transform;
        }
        else
        {
            scene = new GameObject("Scene").transform;
        }

        scene.position = new Vector3(0, 0, 0);
        SceneComponent sceneComponent = scene.gameObject.AddComponent <SceneComponent>();

        sceneComponent.SceneSize = sceneDescriptor.sceneSize;

        var environmentFolder = new GameObject(SceneDescriptorsHelper.EnvironmentFolderName).transform;

        environmentFolder.transform.SetParent(scene);

        SpritesCache cache = new SpritesCache();

        SceneDescriptorsHelper.CreateInstances(sceneDescriptor.imagesEnvironment, environmentFolder, cache);
        SceneDescriptorsHelper.CreateInstances(sceneDescriptor.items, scene, cache);
    }
コード例 #2
0
    private void OnCreateButtonClick()
    {
        SceneItem[]      AllItems    = scene.GetComponentsInChildren <SceneItem>();
        List <SceneItem> AllItemList = new List <SceneItem>(AllItems);

        foreach (SceneItem item in AllItemList)
        {
            if (item.transform == scene)
            {
                continue;
            }

            Transform[] placeHolders = item.GetComponentsInChildren <Transform>();
            int         counter      = placeHolders.Length + 1;

            for (int i = 0; i < 10; i++)
            {
                foreach (Transform placeHolder in placeHolders)
                {
                    if (placeHolder == item.transform || placeHolder.parent != item.transform)
                    {
                        continue;
                    }

                    GameObject newPlaceHolder = Instantiate(placeHolder.gameObject, item.transform) as GameObject;
                    newPlaceHolder.name = item.name + "_" + counter;

                    SpriteRenderer[] images = newPlaceHolder.GetComponentsInChildren <SpriteRenderer>();
                    foreach (SpriteRenderer image in images)
                    {
                        string   resourceName = SceneDescriptorsHelper.GetResourceName(AssetDatabase.GetAssetPath(image.sprite)) + UnityEngine.Random.Range(2, 21);
                        Sprite[] spritesAll   = Resources.LoadAll <Sprite>(resourceName);
                        Sprite   sprite       = spritesAll.FirstOrDefault(x => x.name == image.sprite.name);
                        image.sprite = sprite;
                    }
                    counter++;
                }
            }
        }

        for (int i = 0; i < 10; i++)
        {
            foreach (SceneItem item in AllItemList)
            {
                if (item.transform == scene)
                {
                    continue;
                }

                GameObject newitem = Instantiate(item.gameObject, scene.transform) as GameObject;
                newitem.name = item.name + i;
            }
        }
    }
コード例 #3
0
    private List <ItemDescriptor> GetItems()
    {
        List <ItemDescriptor> itemList = new List <ItemDescriptor>();

        SceneItem[] allItems = scene.GetComponentsInChildren <SceneItem>();

        foreach (SceneItem item in allItems)
        {
            if (item == scene)
            {
                continue;
            }
            itemList.Add(SceneDescriptorsHelper.CreateItemDescriptor(item));
        }
        return(itemList);
    }
コード例 #4
0
    public BuildResult Build(SceneDescriptor sceneDescriptor)
    {
        // in this case scene does not exists
        // so first need to pick items directly from SceneDescriptor
        // and then create objects ONLY for picked items

        SpritesCache cache = new SpritesCache();

        // create scene
        Transform sceneFolder = CreateSceneFolder(sceneDescriptor);

        // load envinronment images
        SceneDescriptorsHelper.CreateInstances(sceneDescriptor.imagesEnvironment, sceneFolder, cache);

        // load items from SceneDescriptor
        var visibleItems = CreateVisibleItems(shuffle(sceneDescriptor.items).ToList(), sceneFolder, cache, _buildParams);

        // and make some of them pickable
        var pickableItems = MakeSomeSceneItemsPickable(visibleItems, _buildParams);

        return(GetBuildResult(pickableItems));
    }
コード例 #5
0
    private List <ImageDescriptor> GetImagesEnvironment()
    {
        List <ImageDescriptor> imagesList = new List <ImageDescriptor>();

        foreach (Transform layer in scene)
        {
            if (layer.GetComponent <SceneItem>() != null || String.Compare(layer.name, SceneDescriptorsHelper.ErrorFolderName, true) == 0)
            {
                continue;
            }

            Transform[] allImages = layer.GetComponentsInChildren <Transform>();

            foreach (Transform image in allImages)
            {
                if (image.GetComponent <SceneItem>() != null || image.GetComponent <SpriteRenderer>() == null)
                {
                    continue;
                }
                imagesList.Add(SceneDescriptorsHelper.CreateImageDescriptor(image.GetComponent <SpriteRenderer>()));
            }
        }
        return(imagesList);
    }
コード例 #6
0
    public static ItemDescriptor CreateItemDescriptor(SceneItem item)
    {
        ItemDescriptor itemDescriptor = new ItemDescriptor();

        itemDescriptor.name = item.gameObject.name;

        if (string.IsNullOrEmpty(item.DisplayName.Trim()))
        {
            itemDescriptor.displayName = SceneDescriptorsHelper.ToDisplayName(item.gameObject.name);
        }
        else
        {
            itemDescriptor.displayName = item.DisplayName.Trim();
        }

        if (item.Silhouette != null)
        {
            itemDescriptor.displayImage = CreateImageDescriptor(item.Silhouette);
        }

        itemDescriptor.placeHolders = GetItemPlaceHolders(item);

        return(itemDescriptor);
    }
コード例 #7
0
ファイル: SpritesCache.cs プロジェクト: Riska32/HOGameBuilder
        public Sprite Get(string assetPath, string spriteName)
        {
            string resourceName = SceneDescriptorsHelper.GetResourceName(assetPath);

            if (StringHelper.IsNullOrWhitespace(resourceName) || StringHelper.IsNullOrWhitespace(spriteName))
            {
                return(null);
            }

            if (!dictionary.ContainsKey(resourceName))
            {
                Put(resourceName);
            }

            Sprite sprite = dictionary[resourceName].FirstOrDefault(x => x.name == spriteName);

            if (sprite == null)
            {
                Debug.LogError("Error sprite in asset : " + spriteName + " does not exist!");
                return(null);
            }

            return(sprite);
        }
コード例 #8
0
    public BuildResult Build(TextAsset textAsset)
    {
        SceneDescriptor sceneDescriptor = SceneDescriptorsHelper.CreateFromString(textAsset.text);

        return(Build(sceneDescriptor));
    }
コード例 #9
0
    public BuildResult Build(string dataBasePath)
    {
        SceneDescriptor sceneDescriptor = SceneDescriptorsHelper.LoadFromFile(dataBasePath);

        return(Build(sceneDescriptor));
    }
コード例 #10
0
    private void AttachSceneItemComponents(Dictionary <string, Item> items)
    {
        if (items == null)
        {
#if DEBUG_SCENE_GENERATION
            Debug.LogError("AttachSceneItemComponents: Error: items is null");
#endif
            return;
        }

        foreach (var item in items)
        {
            Transform sceneItem          = null;
            SceneItem sceneItemComponent = null;

            foreach (var placeHolder in item.Value.placeHolders)
            {
                if (placeHolder.Value.itemImage == null)
                {
                    foreach (var patch in placeHolder.Value.patches)
                    {
                        patch.gameObject.transform.SetParent(GetErrorFolder());
                    }

                    foreach (var shadow in placeHolder.Value.shadows)
                    {
                        shadow.gameObject.transform.SetParent(GetErrorFolder());
                    }
                }
                else
                {
                    Transform parent = null;
                    if (sceneItem == null)
                    {
                        sceneItem = new GameObject(item.Key).transform;
                        sceneItem.SetParent(scene_folder);
                        sceneItemComponent             = sceneItem.gameObject.AddComponent <SceneItem>();
                        sceneItemComponent.DisplayName = SceneDescriptorsHelper.ToDisplayName(item.Key);

                        if (item.Value.displayImage != null)
                        {
                            sceneItemComponent.Silhouette = item.Value.displayImage.sprite;

                            // destroy silhouette object
                            GameObject.DestroyImmediate(item.Value.displayImage.gameObject);
                        }
                    }

                    placeHolder.Value.itemImage.gameObject.transform.SetParent(sceneItem);
                    parent = placeHolder.Value.itemImage.gameObject.transform;

                    foreach (var patch in placeHolder.Value.patches)
                    {
                        var component = patch.gameObject.AddComponent <SceneItemChildLayer>();
                        component.Type = SceneItemChildLayer.LayerType.Patch;
                        if (sceneItemComponent)
                        {
                            sceneItemComponent.ChildLayers.Add(component);
                        }

                        patch.gameObject.transform.SetParent(parent);
                    }

                    foreach (var shadow in placeHolder.Value.shadows)
                    {
                        var component = shadow.gameObject.AddComponent <SceneItemChildLayer>();
                        component.Type = SceneItemChildLayer.LayerType.Shadow;
                        if (sceneItemComponent)
                        {
                            sceneItemComponent.ChildLayers.Add(component);
                        }

                        shadow.gameObject.transform.SetParent(parent);
                    }
                }
            }
        }
    }