Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class VerticalLine : MonoBehaviour
- {
- [SerializeField] private Transform start = null;
- [SerializeField] private Transform end = null;
- [SerializeField] private LineItem lineItem = null;
- private LineItemPool objectPool;
- private List<LineItem> lineItems;
- public float SpawnYPosition
- {
- get
- {
- if (lineItems.Count == 0)
- return StartYPosition;
- LineItem lineItem = lineItems[lineItems.Count - 1];
- return lineItem.transform.position.y - lineItem.transform.localScale.y/2;
- }
- }
- public float EndYPosition => end.position.y;
- public float StartYPosition => start.position.y;
- void Start()
- {
- lineItems = new List<LineItem>();
- objectPool = new LineItemPool(this, lineItem, 10);
- AddLine();
- }
- public void AddLine()
- {
- lineItems.Add(objectPool.GetObject());
- }
- public void ReturnToPool(LineItem lineItem)
- {
- lineItems.Remove(lineItem);
- objectPool.ReturnObject(lineItem);
- lineItem.Initialize(objectPool.GetNewParametrs());
- }
- }
- public class LineItem : PoolingObject
- {
- private VerticalLine verticalLine;
- [SerializeField] private MeshRenderer meshRenderer = null;
- private bool spawn = false;
- private float length;
- private int id;
- public void Initialize(VerticalLine verticalLine, LineItemParametrs parametrs)
- {
- this.verticalLine = verticalLine;
- Initialize(parametrs);
- }
- public void Initialize(LineItemParametrs parametrs)
- {
- meshRenderer.material.color = parametrs.color;
- length = parametrs.length;
- id = parametrs.id;
- }
- private void SetTransformParametrs()
- {
- transform.localScale = new Vector3(2F, length);
- transform.position = new Vector3(transform.position.x, verticalLine.SpawnYPosition - transform.localScale.y / 2);
- }
- private void Update()
- {
- if(!spawn)
- CheckLowerEdge();
- CheckHightEdge();
- }
- private void CheckLowerEdge()
- {
- if(transform.position.y - transform.localScale.y/2 > verticalLine.EndYPosition)
- {
- verticalLine.AddLine();
- spawn = true;
- }
- }
- private void CheckHightEdge()
- {
- if (transform.position.y - transform.localScale.y > verticalLine.StartYPosition)
- {
- verticalLine.ReturnToPool(this);
- }
- }
- public override void ReturnToPool()
- {
- base.ReturnToPool();
- spawn = false;
- }
- public override void GetFromPool()
- {
- base.GetFromPool();
- SetTransformParametrs();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement