public BulletPool(int poolCapacity, BulletData bulletData, IBulletFactory factory) { _factory = factory; _bulletPool = new Dictionary <BulletTypes, HashSet <BaseBulletController> >(); _poolCapacity = poolCapacity; _bulletData = bulletData; if (!_poolRoot) { _poolRoot = new GameObject(ObjectNames.POOL_BULLETS).transform; } }
public (GameObject, BulletCollision, Rigidbody2D) Create(BulletData data) { if (!_created) { _instance = new GameObject(ObjectNames.LASER); _instance.layer = data.Layer; _instance.AddComponent <SpriteRenderer>().sprite = data.BulletSprite; var rigidbody2D = _instance.AddComponent <Rigidbody2D>(); rigidbody2D.gravityScale = 0.0f; rigidbody2D.collisionDetectionMode = CollisionDetectionMode2D.Continuous; var collider = _instance.AddComponent <CapsuleCollider2D>(); collider.size = data.BulletColliderSize; var bulletCollision = _instance.AddComponent <BulletCollision>(); _instance.tag = Tags.BULLET_TAG; _instance.transform.localScale = new Vector3(data.SpriteScale, data.SpriteScale); _created = true; return(_instance, bulletCollision, rigidbody2D); } else { _instance = Object.Instantiate(_instance); _instance.name = ObjectNames.LASER; var bulletCollision = _instance.GetComponent <BulletCollision>(); var rigidbody2D = _instance.GetComponent <Rigidbody2D>(); return(_instance, bulletCollision, rigidbody2D); } }