Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using EnumCubicle;
- public class CubicleSignal : MonoBehaviour {
- public delegate void EventHandler();
- public event EventHandler SignalEventCall; //이곳과 결속된 Cubicle_(엣지, 플레인, 라인) 컴포넌트들이 해당 이벤트 호출을 받는다.
- public delegate void SwitchHandler(SignalAxis dir);
- public event SwitchHandler SignalSwitchOnCall;
- [Header("Reference Linked Component")]
- public CubiclePlane mamaPlane;
- public CubicleEdge papaEdge;
- [Space]
- [Header("Axis Direction")]
- public SignalAxis direction;
- public float StickOutValue = 0.3f;
- [SerializeField]
- private Material[] MaterialColor = new Material[3];
- MeshRenderer _thisRenderer;
- private void Awake()
- {
- _thisRenderer = gameObject.GetComponent<MeshRenderer>();
- }
- public void Initialization(int index)
- {
- switch (index) //머터리얼 칼라 인덱스
- {
- case 0:
- papaEdge.xSignal = this;
- direction = SignalAxis.X;
- _thisRenderer.material = MaterialColor[0];
- transform.rotation = Quaternion.AngleAxis(90, Vector3.forward);
- name = "Signal_X";
- break;
- case 1:
- papaEdge.ySignal = this;
- direction = SignalAxis.Y;
- _thisRenderer.material = MaterialColor[1];
- transform.rotation = Quaternion.identity;
- name = "Signal_Y";
- break;
- case 2:
- papaEdge.zSignal = this;
- direction = SignalAxis.Z;
- _thisRenderer.material = MaterialColor[2];
- transform.rotation = Quaternion.AngleAxis(90, Vector3.right);
- name = "Signal_Z";
- break;
- }
- IsSwitchOn = false;
- }
- private bool isSwitchOn;
- public bool IsSwitchOn
- {
- get
- {
- return isSwitchOn;
- }
- set
- {
- isSwitchOn = value;
- DisplaySignalState();
- }
- }
- private void OnMouseDown()
- {
- ChangeSignalSwitch();
- }
- public void DisplaySignalState()
- {
- switch (direction)
- {
- case SignalAxis.X:
- if(papaEdge.sectionX == EdgeSectionX.Right)
- {
- if (IsSwitchOn) transform.localPosition = new Vector3(0, 0, 0);
- else transform.localPosition = new Vector3(-StickOutValue, 0, 0);
- }
- else
- {
- if (IsSwitchOn) transform.localPosition = new Vector3(0, 0, 0);
- else transform.localPosition = new Vector3(StickOutValue, 0, 0);
- }
- break;
- case SignalAxis.Y:
- if (papaEdge.sectionY == EdgeSectionY.Up)
- {
- if (IsSwitchOn) transform.localPosition = new Vector3(0, 0, 0);
- else transform.localPosition = new Vector3(0, -StickOutValue, 0);
- }
- else
- {
- if (IsSwitchOn) transform.localPosition = new Vector3(0, 0, 0);
- else transform.localPosition = new Vector3(0, StickOutValue, 0);
- }
- break;
- case SignalAxis.Z:
- if (papaEdge.sectionZ == EdgeSectionZ.Forward)
- {
- if (IsSwitchOn) transform.localPosition = new Vector3(0, 0, 0);
- else transform.localPosition = new Vector3(0, 0, -StickOutValue);
- }
- else
- {
- if (IsSwitchOn) transform.localPosition = new Vector3(0, 0, 0);
- else transform.localPosition = new Vector3(0, 0, StickOutValue);
- }
- break;
- }
- }
- public void ChangeSignalSwitch()
- {
- if (IsSwitchOn)
- {
- IsSwitchOn = false;
- }
- else {
- ActionToMamaPlane();
- ActionToPapaEdge();
- IsSwitchOn = true;
- SignalSwitchOnCall(direction);
- }
- SignalEventCall();
- }
- void ActionToMamaPlane()
- {
- for (int i = 0; i < 4; i++)
- {
- mamaPlane.axisSignal[i].IsSwitchOn = false;
- }
- }
- void ActionToPapaEdge()
- {
- papaEdge.xSignal.IsSwitchOn = false;
- papaEdge.ySignal.IsSwitchOn = false;
- papaEdge.zSignal.IsSwitchOn = false;
- for (int i = 0; i < 4; i++)
- {
- mamaPlane.axisSignal[i].papaEdge.CheckSelectionNone();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement