123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259 |
- using System.Linq;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.EventSystems;
- using UnityEngine.AI;
- public class CastingToObject : MonoBehaviour
- {
- [Header("Set Camera Perspective (cam1) and TopDown (cam2)")]
- public Camera cam1;
- public Camera cam2;
- [Header("Set Layer Mask")]
- public LayerMask layer;
- [Header("Set Materials")]
- public Material defaultMaterial;
- public Material materialMost;
- public Material materialLow;
- public Material materialHigh;
- [Header("Intersection between Most (1), Low (2), High (3)")]
- public Material material12;
- public Material material13;
- public Material material23;
- public Material material123;
- [Header("GameObject with MarketStall Childs")]
- public GameObject marketStalls;
- private Camera currentCam;
- private RaycastHit theObject;
- private RaycastHit oldObject1;
- private RaycastHit oldObject2;
- private RaycastHit oldObject3;
- private int selectedToggle = 3; // 3-Nothing; 0-Most; 1-Low, 2-High
- // To have access to the final Objects
- public static string[] marketStallNames;
- public static List<int>[][] selectedMarketStalls;
- public static List<float>[][] selectedMarketStallsTimes;
- // Messure time needed to select the market stalls
- private float time0 = 0.0f;
- private float time1 = 0.0f;
- private float time2 = 0.0f;
- private NavMeshModifier[] childs;
- private void Start()
- {
- currentCam = cam1;
- oldObject1 = new RaycastHit();
- oldObject2 = new RaycastHit();
- oldObject3 = new RaycastHit();
- childs = marketStalls.GetComponentsInChildren<NavMeshModifier>();
- selectedMarketStalls = new List<int>[childs.Length][];
- selectedMarketStallsTimes = new List<float>[childs.Length][];
- marketStallNames = new string[childs.Length];
- for (int i = 0; i < childs.Length; i++)
- {
- selectedMarketStalls[i] = new List<int>[3];
- selectedMarketStallsTimes[i] = new List<float>[3];
- marketStallNames[i] = childs[i].transform.name;
- for (int j = 0; j < selectedMarketStalls[i].Length; j++)
- {
- selectedMarketStalls[i][j] = new List<int>();
- selectedMarketStalls[i][j].Add(0);
- selectedMarketStallsTimes[i][j] = new List<float>(1);
- selectedMarketStallsTimes[i][j].Add(0);
- }
- }
- }
- public void OnChangeViewClicked()
- {
- if(currentCam == cam1)
- currentCam = cam2;
- else
- currentCam = cam1;
- }
- public void OnMostVisitedToggled(bool isOn)
- {
- if (isOn)
- selectedToggle = 0;
- else
- selectedToggle = 3;
- }
- public void OnLowWaitingTimeToggled(bool isOn)
- {
- if (isOn)
- selectedToggle = 1;
- else
- selectedToggle = 3;
- }
- public void OnHighWaitingTimeToggled(bool isOn)
- {
- if (isOn)
- selectedToggle = 2;
- else
- selectedToggle = 3;
- }
- public void OnSubmitClicked()
- {
- selectedMarketStalls = new List<int>[childs.Length][];
- selectedMarketStallsTimes = new List<float>[childs.Length][];
- marketStallNames = new string[childs.Length];
- for (int i = 0; i < childs.Length; i++)
- {
- selectedMarketStalls[i] = new List<int>[3];
- selectedMarketStallsTimes[i] = new List<float>[3];
- marketStallNames[i] = childs[i].transform.name;
- for (int j = 0; j < selectedMarketStalls[i].Length; j++)
- {
- selectedMarketStalls[i][j] = new List<int>();
- selectedMarketStalls[i][j].Add(0);
- selectedMarketStallsTimes[i][j] = new List<float>(1);
- selectedMarketStallsTimes[i][j].Add(0);
- }
- }
- }
- private void HighlightMarketStalls()
- {
- for (int i = 0; i < selectedMarketStalls.Length; i++)
- {
- var theStall = marketStalls.transform.Find(marketStallNames[i]);
- if (selectedMarketStalls[i][0].LastOrDefault() == 0 && selectedMarketStalls[i][1].LastOrDefault() == 0 && selectedMarketStalls[i][2].LastOrDefault() == 0)
- {
- theStall.transform.GetComponent<Renderer>().material = defaultMaterial;
- }
- else if (selectedMarketStalls[i][0].LastOrDefault() == 1 && selectedMarketStalls[i][1].LastOrDefault() == 0 && selectedMarketStalls[i][2].LastOrDefault() == 0)
- {
- theStall.transform.GetComponent<Renderer>().material = materialMost;
- }
- else if (selectedMarketStalls[i][0].LastOrDefault() == 0 && selectedMarketStalls[i][1].LastOrDefault() == 1 && selectedMarketStalls[i][2].LastOrDefault() == 0)
- {
- theStall.transform.GetComponent<Renderer>().material = materialLow;
- }
- else if (selectedMarketStalls[i][0].LastOrDefault() == 0 && selectedMarketStalls[i][1].LastOrDefault() == 0 && selectedMarketStalls[i][2].LastOrDefault() == 1)
- {
- theStall.transform.GetComponent<Renderer>().material = materialHigh;
- }
- else if (selectedMarketStalls[i][0].LastOrDefault() == 1 && selectedMarketStalls[i][1].LastOrDefault() == 1 && selectedMarketStalls[i][2].LastOrDefault() == 0)
- {
- theStall.transform.GetComponent<Renderer>().material = material12;
- }
- else if (selectedMarketStalls[i][0].LastOrDefault() == 1 && selectedMarketStalls[i][1].LastOrDefault() == 0 && selectedMarketStalls[i][2].LastOrDefault() == 1)
- {
- theStall.transform.GetComponent<Renderer>().material = material13;
- }
- else if (selectedMarketStalls[i][0].LastOrDefault() == 0 && selectedMarketStalls[i][1].LastOrDefault() == 1 && selectedMarketStalls[i][2].LastOrDefault() == 1)
- {
- theStall.transform.GetComponent<Renderer>().material = material23;
- }
- else if (selectedMarketStalls[i][0].LastOrDefault() == 1 && selectedMarketStalls[i][1].LastOrDefault() == 1 && selectedMarketStalls[i][2].LastOrDefault() == 1)
- {
- theStall.transform.GetComponent<Renderer>().material = material123;
- }
- }
- }
- private bool isMouseOverUI()
- {
- return EventSystem.current.IsPointerOverGameObject();
- }
- // Update is called once per frame
- void FixedUpdate()
- {
- if (Input.GetMouseButtonDown(0) && !isMouseOverUI())
- {
- var ray = currentCam.ScreenPointToRay(Input.mousePosition);
- if (Physics.Raycast(ray, out theObject, float.MaxValue, layer))
- {
- int index = System.Array.IndexOf(marketStallNames, theObject.transform.name);
- if (selectedToggle == 0)
- {
- if (!theObject.Equals(oldObject1))
- {
- selectedMarketStalls[index][selectedToggle].Add(1);
- selectedMarketStallsTimes[index][selectedToggle].Add(time0);
- if (oldObject1.transform != null)
- {
- selectedMarketStalls[System.Array.IndexOf(marketStallNames, oldObject1.transform.name)][selectedToggle].Add(0);
- selectedMarketStallsTimes[System.Array.IndexOf(marketStallNames, oldObject1.transform.name)][selectedToggle].Add(0);
- }
- oldObject1 = theObject;
- }
- else
- {
- selectedMarketStalls[index][selectedToggle].Add(0);
- selectedMarketStallsTimes[index][selectedToggle].Add(0);
- oldObject1 = new RaycastHit();
- }
- }
- else if (selectedToggle == 1)
- {
- if (!theObject.Equals(oldObject2))
- {
- selectedMarketStalls[index][selectedToggle].Add(1);
- selectedMarketStallsTimes[index][selectedToggle].Add(time1);
- if (oldObject2.transform != null)
- {
- selectedMarketStalls[System.Array.IndexOf(marketStallNames, oldObject2.transform.name)][selectedToggle].Add(0);
- selectedMarketStallsTimes[System.Array.IndexOf(marketStallNames, oldObject2.transform.name)][selectedToggle].Add(0);
- }
- oldObject2 = theObject;
- }
- else
- {
- selectedMarketStalls[index][selectedToggle].Add(0);
- selectedMarketStallsTimes[index][selectedToggle].Add(0);
- oldObject2 = new RaycastHit();
- }
- }
- else if (selectedToggle == 2)
- {
- if (!theObject.Equals(oldObject3))
- {
- selectedMarketStalls[index][selectedToggle].Add(1);
- selectedMarketStallsTimes[index][selectedToggle].Add(time2);
- if (oldObject3.transform != null)
- {
- selectedMarketStalls[System.Array.IndexOf(marketStallNames, oldObject3.transform.name)][selectedToggle].Add(0);
- selectedMarketStallsTimes[System.Array.IndexOf(marketStallNames, oldObject3.transform.name)][selectedToggle].Add(0);
- }
- oldObject3 = theObject;
- }
- else
- {
- selectedMarketStalls[index][selectedToggle].Add(0);
- selectedMarketStallsTimes[index][selectedToggle].Add(0);
- oldObject3 = new RaycastHit();
- }
- }
- }
- }
- HighlightMarketStalls();
- time0 += Time.deltaTime;
- time1 += Time.deltaTime;
- time2 += Time.deltaTime;
- }
- }
|