private void OnSaveSnake() { PrefabUtility.ReplacePrefab(m_SnakeEditor.gameObject, PrefabUtility.GetPrefabParent(m_SnakeEditor.gameObject), ReplacePrefabOptions.ConnectToPrefab); string snakeName = m_SnakeEditor.gameObject.name.Remove(0, SNAKE_EDITOR_PREfAB_NAME_STARTWITHS.Length); string snakePrefabPath = string.Format("{0}{1}{2}.prefab", SNAKE_PREFAB_PATH, slConstants.SNAKE_PROPERTIES_PREfAB_NAME_STARTWITHS, snakeName); slSnakeProperties snakeProperties = CreateInstance <slSnakeProperties>(); snakeProperties.HeadColliderRadius = m_SnakeEditor.Head.GetComponent <CircleCollider2D>().radius; snakeProperties.ClothesColliderRadius = m_SnakeEditor.Clothes.GetComponent <CircleCollider2D>().radius; snakeProperties.BodyColliderRadius = m_SnakeEditor.Body1.GetComponent <CircleCollider2D>().radius; snakeProperties.DeadFoodColor = m_SnakeEditor.DeadFoodColor; AssetDatabase.CreateAsset(snakeProperties, snakePrefabPath); string snakePresentationPrefabPath = string.Format("{0}{1}{2}.prefab", SNAKE_PREFAB_PATH, slConstants.SNAKE_PRESENTATION_PROPERTIES_PREfAB_NAME_STARTWITHS, snakeName); GameObject snakePresentationGameObject = new GameObject(slConstants.SNAKE_PRESENTATION_PROPERTIES_PREfAB_NAME_STARTWITHS + snakeName); slSnakePresentationProperties snakePresentation = snakePresentationGameObject.AddComponent <slSnakePresentationProperties>(); snakePresentation.Head = InstantiateFromSnakeEditorToSnakePresentation(m_SnakeEditor.Head, snakePresentationGameObject); snakePresentation.Clothes = InstantiateFromSnakeEditorToSnakePresentation(m_SnakeEditor.Clothes, snakePresentationGameObject); snakePresentation.Body = InstantiateFromSnakeEditorToSnakePresentation(m_SnakeEditor.Body1, snakePresentationGameObject); snakePresentation.BodySpriteMaxOrderInLayer = snakePresentation.Body.GetComponent <SpriteRenderer>().sortingOrder; PrefabUtility.CreatePrefab(snakePresentationPrefabPath, snakePresentationGameObject); DestroyImmediate(snakePresentationGameObject); }
public NodePool(slSnakePresentationProperties presentation, Transform root, hwmQuadtree <slSnake.QuadtreeElement> quadtree) { m_Presentation = presentation; m_Root = root; m_Quadtree = quadtree; Type nodeType = typeof(T); m_NodeType = nodeType == typeof(slSnake.HeadNode) ? slConstants.NodeType.Head : nodeType == typeof(slSnake.ClothesNode) ? slConstants.NodeType.Clothes : slConstants.NodeType.Body; }
public void LoadSnake(string snakeName) { int index; if (!m_SnakeNameToIndex.TryGetValue(snakeName, out index)) { index = m_Propertiess.Count; m_SnakeNameToIndex.Add(snakeName, index); m_Propertiess.Add(UnityEngine.Object.Instantiate(hwmSystem.GetInstance().GetAssetLoader().LoadAsset(hwmAssetLoader.AssetType.Game , slConstants.SNAKE_PROPERTIES_PREfAB_NAME_STARTWITHS + snakeName)) as slSnakeProperties); slSnakePresentationProperties snakePresentationProperties = slWorld.GetInstance().NeedPresentation() ? UnityEngine.Object.Instantiate(hwmSystem.GetInstance().GetAssetLoader() .LoadAsset(hwmAssetLoader.AssetType.Game, slConstants.SNAKE_PRESENTATION_PROPERTIES_PREfAB_NAME_STARTWITHS + snakeName) as GameObject) .GetComponent <slSnakePresentationProperties>() : null; snakePresentationProperties.transform.SetParent(m_PoolRoot, false); snakePresentationProperties.gameObject.SetActive(false); NodePool <slSnake.HeadNode> headNodePool = new NodePool <slSnake.HeadNode>(snakePresentationProperties, m_PoolRoot, m_Quadtree); headNodePool.Initialize(1); m_HeadPools.Add(headNodePool); NodePool <slSnake.ClothesNode> clothesNodePool = new NodePool <slSnake.ClothesNode>(snakePresentationProperties, m_PoolRoot, m_Quadtree); clothesNodePool.Initialize(1); m_ClothesNodePools.Add(clothesNodePool); NodePool <slSnake.BodyNode> bodyNodePool = new NodePool <slSnake.BodyNode>(snakePresentationProperties, m_PoolRoot, m_Quadtree); bodyNodePool.Initialize(slConstants.SNAKE_POOL_BODYNODE_CACHECOUNT_PRESNAKE); m_BodyPools.Add(bodyNodePool); } else { m_HeadPools[index].Create(1); m_ClothesNodePools[index].Create(1); m_BodyPools[index].Create(slConstants.SNAKE_POOL_BODYNODE_CACHECOUNT_PRESNAKE); } }