Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.25 KB | None | 0 0
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4.  
  5. namespace GameOver.HouseEditor
  6. {
  7.     public class LineSelector : MonoBehaviour
  8.     {
  9.  
  10.         public enum EDirection
  11.         {
  12.             Back,
  13.             Forward,
  14.             Left,
  15.             Right,
  16.             Up,
  17.             Down
  18.         }
  19.  
  20.         private static Material _lineMaterial;
  21.         [SerializeField]
  22.         private EDirection _direction;
  23.         [SerializeField]
  24.         private Color _color = Color.white;
  25.         //[SerializeField]
  26.         private float _lenght = 100f;
  27.         private ArrowSelector _arrowSelector;
  28.  
  29.         private Vector3 _vectorDirection;
  30.         private Transform _arrow;
  31.  
  32.         public float Length
  33.         {
  34.             get { return _lenght; }
  35.             set {
  36.                 _lenght = value;
  37.                 SetDirection(_direction);
  38.             }
  39.         }
  40.  
  41.         public EDirection Direction
  42.         {
  43.             get { return _direction; }
  44.             set { SetDirection(value); }
  45.         }
  46.  
  47.         private void Awake()
  48.         {
  49.             _arrow = GetComponentsInChildren<Transform>()[1];
  50.             SetDirection(_direction);
  51.         }
  52.  
  53.         private void SetDirection(EDirection direction)
  54.         {
  55.             _direction = direction;
  56.             switch (_direction)
  57.             {
  58.                 case EDirection.Forward:
  59.                     _vectorDirection = Vector3.forward;
  60.                     break;
  61.                 case EDirection.Back:
  62.                     _vectorDirection = Vector3.back;
  63.                     break;
  64.                 case EDirection.Left:
  65.                     _vectorDirection = Vector3.left;
  66.                     break;
  67.                 case EDirection.Right:
  68.                     _vectorDirection = Vector3.right;
  69.                     break;
  70.                 case EDirection.Up:
  71.                     _vectorDirection = Vector3.up;
  72.                     break;
  73.                 case EDirection.Down:
  74.                     _vectorDirection = Vector3.down;
  75.                     break;
  76.             }
  77.             _arrow.transform.localPosition = _vectorDirection * _lenght;
  78.         }
  79.  
  80.         private static void CreateLineMaterial()
  81.         {
  82.             if (!_lineMaterial)
  83.             {
  84.                 Shader shader = Shader.Find("Hidden/Internal-Colored");
  85.                 _lineMaterial = new Material(shader);
  86.                 _lineMaterial.hideFlags = HideFlags.HideAndDontSave;
  87.                 _lineMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha);
  88.                 _lineMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
  89.                 _lineMaterial.SetInt("_Cull", (int)UnityEngine.Rendering.CullMode.Off);
  90.                 _lineMaterial.SetInt("_ZWrite", 0);
  91.             }
  92.         }
  93.  
  94.         public void OnRenderObject()
  95.         {
  96.             CreateLineMaterial();
  97.             _lineMaterial.SetPass(0);
  98.  
  99.             GL.PushMatrix();
  100.             GL.MultMatrix(transform.localToWorldMatrix);
  101.             GL.Begin(GL.LINES);
  102.             GL.Color(_color);
  103.             GL.Vertex3(0, 0, 0);
  104.             GL.Vertex(_vectorDirection * _lenght);
  105.             GL.End();
  106.             GL.PopMatrix();
  107.         }
  108.     }
  109. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement