Untitled

mail@pastecode.io avatarunknown
csharp
a month ago
1.9 kB
5
Indexable
Never
using UnityEngine;
using Zenject;

namespace Infrastructure.Factory
{
    // TODO: More option for instantiating like Unity
    public class ZenjectResourceFactory : IResourceFactory
    {
        private readonly DiContainer _container;

        public ZenjectResourceFactory(DiContainer container)
        {
            _container = container;
        }

        public Object Instantiate(Object @object)
        {
            Object instance = Object.Instantiate(@object);
            _container.Inject(instance);
            return instance;
        }

        public Transform Instantiate(Transform transform)
        {
            Transform obj = _container.InstantiatePrefab(transform).transform;
            return obj;
        }

        public Transform Instantiate(Transform transform, Transform parent)
        {
            Transform obj = _container.InstantiatePrefab(transform, parent).transform;
            return obj;
        }

        public Transform Instantiate(Transform transform, Vector3 position)
        {
            Transform obj = _container.InstantiatePrefab(transform).transform;
            obj.transform.position = position;
            return obj;
        }

        public Transform Instantiate(Transform transform, Vector3 position, Transform parent)
        {
            Transform obj = _container.InstantiatePrefab(transform, parent).transform;
            obj.transform.position = position;
            return obj;
        }

        public Transform Instantiate(Transform transform, Vector3 position, Quaternion rotation, Transform parent)
        {
            Transform obj = _container.InstantiatePrefab(transform, parent).transform;
            obj.transform.position = position;
            obj.transform.rotation = rotation;
            return obj;
        }
    }
}