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); }
//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; }
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)); }
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)); }
/// <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); }