Advertisement
Guest User

Untitled

a guest
Jan 29th, 2020
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.73 KB | None | 0 0
  1. public class VerticalLine : MonoBehaviour
  2. {
  3.     [SerializeField] private Transform start = null;
  4.     [SerializeField] private Transform end = null;
  5.  
  6.     [SerializeField] private LineItem lineItem = null;
  7.  
  8.     private LineItemPool objectPool;
  9.  
  10.     private List<LineItem> lineItems;
  11.  
  12.     public float SpawnYPosition
  13.     {
  14.         get
  15.         {
  16.             if (lineItems.Count == 0)
  17.                 return StartYPosition;
  18.  
  19.             LineItem lineItem = lineItems[lineItems.Count - 1];
  20.             return lineItem.transform.position.y - lineItem.transform.localScale.y/2;
  21.         }
  22.     }
  23.  
  24.     public float EndYPosition => end.position.y;
  25.  
  26.     public float StartYPosition => start.position.y;
  27.     void Start()
  28.     {
  29.         lineItems = new List<LineItem>();
  30.         objectPool = new LineItemPool(this, lineItem, 10);
  31.         AddLine();
  32.     }
  33.  
  34.     public void AddLine()
  35.     {
  36.         lineItems.Add(objectPool.GetObject());
  37.     }
  38.  
  39.     public void ReturnToPool(LineItem lineItem)
  40.     {
  41.         lineItems.Remove(lineItem);
  42.         objectPool.ReturnObject(lineItem);
  43.         lineItem.Initialize(objectPool.GetNewParametrs());
  44.     }
  45.  
  46. }
  47.  
  48. public class LineItem : PoolingObject
  49. {
  50.     private VerticalLine verticalLine;
  51.     [SerializeField] private MeshRenderer meshRenderer = null;
  52.  
  53.     private bool spawn = false;
  54.  
  55.     private float length;
  56.     private int id;
  57.  
  58.     public void Initialize(VerticalLine verticalLine, LineItemParametrs parametrs)
  59.     {
  60.         this.verticalLine = verticalLine;
  61.         Initialize(parametrs);
  62.     }
  63.  
  64.     public void Initialize(LineItemParametrs parametrs)
  65.     {
  66.         meshRenderer.material.color = parametrs.color;
  67.         length = parametrs.length;
  68.         id = parametrs.id;
  69.     }
  70.  
  71.     private void SetTransformParametrs()
  72.     {
  73.         transform.localScale = new Vector3(2F, length);
  74.         transform.position = new Vector3(transform.position.x, verticalLine.SpawnYPosition - transform.localScale.y / 2);
  75.     }
  76.  
  77.     private void Update()
  78.     {
  79.         if(!spawn)
  80.             CheckLowerEdge();
  81.         CheckHightEdge();
  82.     }
  83.  
  84.     private void CheckLowerEdge()
  85.     {
  86.         if(transform.position.y - transform.localScale.y/2 > verticalLine.EndYPosition)
  87.         {
  88.             verticalLine.AddLine();
  89.             spawn = true;
  90.         }
  91.     }
  92.  
  93.     private void CheckHightEdge()
  94.     {
  95.         if (transform.position.y - transform.localScale.y > verticalLine.StartYPosition)
  96.         {
  97.             verticalLine.ReturnToPool(this);
  98.         }
  99.     }
  100.  
  101.     public override void ReturnToPool()
  102.     {
  103.         base.ReturnToPool();
  104.         spawn = false;
  105.     }
  106.  
  107.     public override void GetFromPool()
  108.     {
  109.         base.GetFromPool();
  110.         SetTransformParametrs();
  111.     }
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement