2using System.Collections;
3using System.Collections.Generic;
7using NaughtyAttributes;
11using System.Diagnostics;
14using Valve.VR.InteractionSystem;
15using ViveHandTracking;
21 Vector3 playerOriginalPos, playerOriginalRot;
22 bool isHighlight =
false;
28 bool activated =
false;
31 private GameObject ProgressCanvas;
32 internal float holdTime = 2.0f;
33 private float currTime;
35 private bool inProgress=
false;
36 private Transform originalProgressParent;
37 private Camera VRCamera;
38 private float realTime = 0.0f;
39 bool endOfProcess =
false;
43 ProgressCanvas = GameObject.Find(
"Canvas_ProgressBar").gameObject;
44 ProgressCanvas.GetComponentInChildren<
Image>(
true).fillAmount = 0;
45 currTime = holdTime * 2;
47 originalProgressParent = ProgressCanvas.transform.parent;
48 VRCamera = GameObject.Find(
"VRCamera")?.GetComponent<Camera>();
50 VRCamera = Camera.current;
55 var playerHands = Player.instance.hands;
56 Image Progress = ProgressCanvas.GetComponentInChildren<
Image>(
true);
57 List<bool> atph =
new List<bool>();
58 foreach (var hand
in playerHands)
61 if (hh && hh.attachedToHand) atph.Add(
true);
62 else if (hh && hh.realToolInHand) atph.Add(
true);
66 StartCoroutine(LookAtCanvas());
70 speak(
"Miután megfogtuk az alkatrészt, a felvillanó kék modell jelzi, hogy hova kell tennünk azt.");
72 if (first && second && InGoodPos())
76 currTime -= Time.deltaTime;
77 ProgressCanvas.transform.SetParent(
cube.transform,
true);
80 ProgressCanvas.transform.localPosition =
new Vector3(0, 0, 0);
81 ProgressCanvas.transform.position = ProgressCanvas.transform.position +
new Vector3(0, 0.2f, 0);
86 StartCoroutine(ProgressBar(holdTime, Progress, ProgressCanvas));
88 if (first && second && !InGoodPos())
92 ProgressCanvas.transform.GetChild(0).gameObject.SetActive(
false);
100 StartCoroutine(latePreview(
true));
101 speak(
"Amennyiben a modellünk körül két kezet látunk, az azt jelenti, hogy két kézzel kell megfognunk. Miután megfogtuk tegyük ezt is a helyére.");
104 if (first && second && !third && !once)
107 speak(
"Szerszámok használatakor egy zöld modell fogja jelezni, hogy hol kell használnunk azt. A szerszámokat használat után vissza kell raknunk a helyükre, ezt jelzi a kék modell.");
112 StartCoroutine(latePreview());
114 if (first && second && third && !once)
116 speak(
"A bemutató véget ért, a Start gomb megnyomásával tudjuk a jelenetet indítani!");
117 clone.SetActive(
false);
125 attachedToHand =
true;
126 MatChange(
cube,
true);
130 CubeHighlight(
clone,
new Vector3(40.9840012f, 1.11800003f, 0.569999993f));
133 if (first && !second)
136 CubeHighlight(
clone,
new Vector3(42.73f, 1.11800003f, 0.569999993f));
141 speak(
"Amennyiben utasítást kapunk rá, a szerszámot egy bizonyos ideig kell a cél területen tartani. Azt , hogy meddig kell a helyén tartanunk, egy folyamat jelző sáv fogja jelezni. Akkor kell kivenni a szerszámot a cél pozícióból, amikor a jelző sáv eléri a zöldet, ellenkező esetben büntetést kapunk.");
143 CubeHighlight(
target,
new Vector3(41.97f, 1.525f, 0.569999993f));
152 public void StartTutorial()
155 if (playerOriginalPos ==
null)
157 playerOriginalPos =
player.transform.position;
158 playerOriginalRot =
player.transform.eulerAngles;
161 cube.SetActive(
true);
162 Table.SetActive(
true);
164 clone.SetActive(
true);
171 speak(
"A folyamat elindítása után, ilyen hangutasítások fogják jelezni számunkra, hogy mit kell csinálnunk. Amennyiben messze vagyunk a céltól, a hangutasításon kívül egy kék szellem fogja jelezni, hogy merre kell mennünk. A kéken villogó modellt kell megfognunk.");
182 IEnumerator LateStart()
184 while (!endOfProcess)
191 clone.SetActive(
true);
197 public void speak(
string textToSpeak,
string selectedLanguage =
"hu-HU")
200 var proc =
VoiceTTS.Speak(textToSpeak, selectedLanguage);
202 StartCoroutine(waiter(proc));
205 public IEnumerator waiter(Process p)
216 IEnumerator LateSpeak(
string textToSpeak,
string selectedLanguage =
"hu-HU")
218 yield
return new WaitForSeconds(1);
220 var proc =
VoiceTTS.Speak(textToSpeak, selectedLanguage);
222 StartCoroutine(waiter(proc));
225 private IEnumerator latePreview(
bool twohand =
false)
227 yield
return new WaitForSeconds(0.5f);
235 public void CubeHighlight(GameObject obj ,Vector3 TargetPos)
239 obj.transform.position = TargetPos;
244 public void FinishTutorial()
246 player.transform.position = playerOriginalPos;
249 cube.SetActive(
false);
250 Table.SetActive(
false);
251 clone.SetActive(
false);
255 GetComponent<TutorialManager>().enabled =
false;
259 private bool InGoodPos()
262 var targetPosition =
target.transform.localPosition;
263 local =
target.transform.InverseTransformPoint(
cube.transform.position);
264 if (
Math.Abs(local.x) > 0.1f)
return false;
265 if (
Math.Abs(local.y) > 0.1f)
return false;
266 if (
Math.Abs(local.z) > 0.1f)
return false;
270 private void MatChange(GameObject go,
bool changeMat =
false)
272 var mrs = go.GetComponentsInChildren<MeshRenderer>();
274 foreach (var meshRenderer
in mrs)
276 var list =
new List<Material>();
278 meshRenderer.materials = list.ToArray();
283 private IEnumerator ProgressBar(
float value,
Image progressImage, GameObject progressCanvas)
285 float time = realTime;
288 progressCanvas.transform.GetChild(0).gameObject.SetActive(
true);
290 Color yellow =
new Color(250 / 255f, 250 / 255f, 6 / 255f);
291 Color red =
new Color(250 / 255f, 13 / 255f, 6 / 255f);
292 Color green =
new Color(11 / 255f, 250 / 255f, 6 / 255f);
294 while (inProgress && progressImage.fillAmount < 1)
296 time += Time.deltaTime;
297 if (progressImage.fillAmount <= 0.30f)
299 progressImage.color = yellow;
303 fill = progressImage.fillAmount - 0.3f;
304 if (progressImage.fillAmount >= 0.30f && progressImage.fillAmount <= 0.36f)
306 progressImage.color =
Color.Lerp(yellow, green, fill / 0.06f);
308 fill = progressImage.fillAmount - 0.58f;
309 if (progressImage.fillAmount >= 0.58f && progressImage.fillAmount <= 0.64f)
311 progressImage.color =
Color.Lerp(green, red, fill / 0.06f);
314 if (progressImage.fillAmount <= 0.36f)
316 progressImage.fillAmount = Mathf.Lerp(0, 0.36f, time / ((value) * 0.9f));
319 deltaTime = time - ((value) * 0.9f);
320 if (progressImage.fillAmount >= 0.36f && progressImage.fillAmount <= 0.64f)
322 progressImage.fillAmount = Mathf.Lerp(0.36f, 0.64f, deltaTime / (value * 2 * 0.1f));
324 deltaTime = time - ((value) * 1.1f);
325 if (progressImage.fillAmount >= 0.64f)
327 progressImage.fillAmount = Mathf.Lerp(0.64f, 1, deltaTime / ((value * 2) - (value * 1.1f)));
336 private IEnumerator LookAtCanvas()
340 ProgressCanvas.transform.LookAt(VRCamera.transform);
344 public void actionCounter()
346 attachedToHand =
false;
358 ProgressCanvas.transform.SetParent(originalProgressParent);
UnityEngine.UI.Button Button
System.Drawing.Image Image
void showBlur(Process p, string text)
static BlurTheScene Instance
void StartFollowing(Vector3 EndPosition, GameObject TargetObject)
void hideHandPreview(GameObject objectToGrab)
void EnterOffsetEditor(GameObject objectToGrab, ActionObject action, Vector3 TargetPos, Vector3 TargetRot)
static PreviewHand Instance
Material highlightMaterial
Material originalHighlight