Пример #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
        //static public void LoadCacheFromResources()
        //{

        //    sprites[0] = Resources.Load<UnityEngine.Sprite>("mb_beton");
        //    sprites[1] = Resources.Load<UnityEngine.Sprite>("mb_178");
        //    sprites[2] = Resources.Load<UnityEngine.Sprite>("mb_179");
        //    sprites[3] = Resources.Load<UnityEngine.Sprite>("mb_180");
        //    sprites[4] = Resources.Load<UnityEngine.Sprite>("grid");
        //    sprites[5] = Resources.Load<UnityEngine.Sprite>("bioslime");
        //    sprites[6] = Resources.Load<UnityEngine.Sprite>("key");
        //    sprites[7] = Resources.Load<UnityEngine.Sprite>("mb_ground");
        //    sprites[8] = Resources.Load<UnityEngine.Sprite>("pu");
        //    sprites[9] = Resources.Load<UnityEngine.Sprite>("rock1");
        //    sprites[10] = Resources.Load<UnityEngine.Sprite>("rock10");
        //    sprites[11] = Resources.Load<UnityEngine.Sprite>("rock9");
        //    sprites[12] = Resources.Load<UnityEngine.Sprite>("sand");
        //    sprites[13] = Resources.Load<UnityEngine.Sprite>("sand2");
        //    sprites[14] = Resources.Load<UnityEngine.Sprite>("sand3");


        //}
        static public void LinkTogoSpritesCache()
        {
            //из компонента достаем переменную с массиво спрайтов и оставляем ссылку на этот объект в этом классе StaticSpriteCache
            goCache = GameObject.Find("goSpritesCache");
            Cache   = (SpritesCache)goCache.GetComponent(typeof(SpritesCache));
            sprites = Cache.Sprites;
        }
Пример #3
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));
    }
Пример #4
0
    private static SpriteRenderer CreateSpriteInstance(ImageDescriptor imageDescriptor, SpritesCache cache)
    {
        Sprite sprite = cache.Get(imageDescriptor.assetPath, imageDescriptor.name);

        if (sprite == null)
        {
            return(null);
        }

        var obj = new GameObject(imageDescriptor.name);

        return(AttachSpriteToObject(obj.transform, imageDescriptor, sprite));
    }
Пример #5
0
    /// <summary>
    /// Create constrained count of visible SceneItems
    ///
    /// BuildParams defines constraint on visible SceneItems count
    /// </summary>
    /// <returns></returns>
    private List <SceneItem> CreateVisibleItems(List <ItemDescriptor> itemDescriptors, Transform sceneFolder, SpritesCache cache, BuildParams buildParams)
    {
        List <SceneItem> visibleItems = new List <SceneItem>();

        if (buildParams.ItemPrefab == null)
        {
#if DEBIG_PICKABLE_ITEMS_BUILDER
            Debug.LogError("Item Prefab does not exist");
#endif
            return(visibleItems);
        }

        CollisionController collisionController = new CollisionController(sceneFolder.gameObject.GetComponent <SceneComponent>().SceneSize);

        foreach (ItemDescriptor itemDescriptor in itemDescriptors)
        {
            if (itemDescriptor.placeHolders.Count == 0)
            {
#if DEBIG_PICKABLE_ITEMS_BUILDER
                Debug.LogWarningFormat("Item Descriptor {0} does not have placeholders", itemDescriptor.name);
#endif
                continue;
            }

            var shuffledPlaceHolders = shuffle(itemDescriptor.placeHolders).ToList();

            foreach (ItemPlaceHolderDescriptor placeHolder in shuffledPlaceHolders)
            {
                if (collisionController.CheckCollision(placeHolder.image))
                {
                    continue;
                }

                Sprite sprite = cache.Get(placeHolder.image.assetPath, placeHolder.image.name);
                if (sprite == null)
                {
                    continue;
                }

                GameObject sceneItem = Instantiate(buildParams.ItemPrefab, sceneFolder);

                sceneItem.name = placeHolder.image.name;
                AttachSpriteToObject(sceneItem.transform, placeHolder.image, sprite);

                SceneItem sceneItemComponent = sceneItem.GetComponent <SceneItem>();
                sceneItemComponent.DisplayName = itemDescriptor.displayName;

                Sprite silhouette = cache.Get(itemDescriptor.displayImage.assetPath, itemDescriptor.displayImage.name);
                if (silhouette != null)
                {
                    sceneItemComponent.Silhouette = silhouette;
                }

                foreach (var shadow in placeHolder.shadows)
                {
                    var obj = CreateSpriteInstance(shadow, cache);
                    // NOTE in game mode shadows attached to scene, not to scene item
                    obj.transform.SetParent(sceneFolder);
                    var childComponent = obj.gameObject.AddComponent <SceneItemChildLayer>();
                    childComponent.Type = SceneItemChildLayer.LayerType.Shadow;
                    sceneItemComponent.ChildLayers.Add(childComponent);
                }

                foreach (var patch in placeHolder.patches)
                {
                    var obj = CreateSpriteInstance(patch, cache);
                    // NOTE in game mode patches attached to scene, not to scene item
                    obj.transform.SetParent(sceneFolder);
                    var childComponent = obj.gameObject.AddComponent <SceneItemChildLayer>();
                    childComponent.Type = SceneItemChildLayer.LayerType.Patch;
                    sceneItemComponent.ChildLayers.Add(childComponent);
                }

                visibleItems.Add(sceneItemComponent);

                break;
            }

            if (visibleItems.Count >= buildParams.VisibleItemCount)
            {
                break;
            }
        }

        return(visibleItems);
    }
    public static SpriteRenderer CreateSpriteInstance(ImageDescriptor imageDescriptor, Transform parent, SpritesCache cache)
    {
        Sprite sprite = cache.Get(imageDescriptor.assetPath, imageDescriptor.name);

        if (sprite == null)
        {
            return(null);
        }

        Transform image = new GameObject(imageDescriptor.name).transform;

        image.SetParent(parent);
        image.position = imageDescriptor.position;

        SpriteRenderer imageRenderer = image.gameObject.AddComponent <SpriteRenderer>();

        imageRenderer.sprite       = sprite;
        imageRenderer.sortingOrder = imageDescriptor.sortingOrder;

        return(imageRenderer);
    }
    public static List <Transform> CreateInstances(List <ItemDescriptor> itemDescriptors, Transform parent, SpritesCache cache)
    {
        var objectsList = new List <Transform>();

        foreach (ItemDescriptor itemDescriptor in itemDescriptors)
        {
            Transform item = new GameObject(itemDescriptor.name).transform;
            item.SetParent(parent);
            item.position = new Vector3(0, 0, 0);
            objectsList.Add(item);

            SceneItem itemSceneComponent = item.gameObject.AddComponent <SceneItem>();

            Sprite silhouette = cache.Get(itemDescriptor.displayImage.assetPath, itemDescriptor.displayImage.name);
            if (silhouette != null)
            {
                itemSceneComponent.Silhouette = silhouette;
            }
            itemSceneComponent.DisplayName = itemDescriptor.displayName;

            foreach (ItemPlaceHolderDescriptor placeHolder in itemDescriptor.placeHolders)
            {
                var placeHolderObject = CreateSpriteInstance(placeHolder.image, item, cache);

                var shadows = CreateInstances(placeHolder.shadows, placeHolderObject.transform, cache);
                foreach (var shadow in shadows)
                {
                    var component = shadow.gameObject.AddComponent <SceneItemChildLayer>();
                    component.Type = SceneItemChildLayer.LayerType.Shadow;

                    itemSceneComponent.ChildLayers.Add(component);
                }

                var patches = CreateInstances(placeHolder.patches, placeHolderObject.transform, cache);
                foreach (var pacth in patches)
                {
                    var component = pacth.gameObject.AddComponent <SceneItemChildLayer>();
                    component.Type = SceneItemChildLayer.LayerType.Patch;

                    itemSceneComponent.ChildLayers.Add(component);
                }
            }
        }

        return(objectsList);
    }
    public static List <Transform> CreateInstances(List <ImageDescriptor> imagesDescriptor, Transform parent, SpritesCache cache)
    {
        var objectsList = new List <Transform>();

        foreach (ImageDescriptor imageDescriptor in imagesDescriptor)
        {
            objectsList.Add(CreateSpriteInstance(imageDescriptor, parent, cache).transform);
        }

        return(objectsList);
    }