Mirror of Svelto.ECS because we're a fan of it
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

65 lines
1.8KB

  1. #if UNITY_5 || UNITY_5_3_OR_NEWER
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. namespace Svelto.Context
  5. {
  6. public class GameObjectFactory : Factories.IGameObjectFactory
  7. {
  8. public GameObjectFactory()
  9. {
  10. _prefabs = new Dictionary<string, GameObject[]>();
  11. }
  12. public GameObject Build(string prefabName)
  13. {
  14. DesignByContract.Check.Require(_prefabs.ContainsKey(prefabName), "Svelto.Factories.IGameObjectFactory -prefab was not found:" + prefabName);
  15. var go = Build(_prefabs[prefabName][0]);
  16. GameObject parent = _prefabs[prefabName][1];
  17. if (parent != null)
  18. {
  19. Transform transform = go.transform;
  20. var scale = transform.localScale;
  21. var rotation = transform.localRotation;
  22. var position = transform.localPosition;
  23. parent.SetActive(true);
  24. transform.parent = parent.transform;
  25. transform.localPosition = position;
  26. transform.localRotation = rotation;
  27. transform.localScale = scale;
  28. }
  29. return go;
  30. }
  31. /// <summary>
  32. /// Register a prefab to be built later using a string ID.
  33. /// </summary>
  34. /// <param name="prefab">original prefab</param>
  35. virtual public GameObject Build(GameObject prefab)
  36. {
  37. var copy = Object.Instantiate(prefab) as GameObject;
  38. return copy;
  39. }
  40. public void RegisterPrefab(GameObject prefab, string prefabName, GameObject parent = null)
  41. {
  42. var objects = new GameObject[2];
  43. objects[0] = prefab; objects[1] = parent;
  44. _prefabs.Add(prefabName, objects);
  45. }
  46. Dictionary<string, GameObject[]> _prefabs;
  47. }
  48. }
  49. #endif