A game about forced loneliness, made by TACStudios
at master 20 kB view raw
1using UnityEngine; 2using UnityEngine.UI; 3using System.Collections; 4using TMPro; 5using UnityEngine.SceneManagement; 6 7public class InteractableText : MonoBehaviour 8{ 9 [Header("Interactable Settings")] 10 public string interactableName; 11 [Header("Text Settings")] 12 public string[] day1Text; 13 public string[] day2Text; 14 public string[] day3Text; 15 public string[] day4Text; 16 public string[] day5Text; 17 18 public string[] notYetText; 19 public string[] doesntMatter; 20 public PlayerStats player; 21 22 public GameObject interactIcon; 23 public Image textBox; 24 25 public bool canInteract = false; 26 public movement movement; 27 28 public ProgressTracker progressTracker; 29 30 public float characterDisplaySpeed = 0.05f; 31 32 public GameObject tableSecond; 33 34 public GameObject bedSecond; 35 36 public GameObject wallGraphic; 37 38 public GameObject choice1; 39 40 public GameObject drownChoice; 41 42 public FadeScript fadeScript; 43 44 public dayIntro dayIntro; 45 46 public bool skipTyping = false; 47 public bool isTyping = false; 48 49 50 51 private void Update() 52 { 53 Inputs(); 54 55 if (Input.GetKeyDown(KeyCode.Space) || Input.GetMouseButtonDown(0)) 56 { 57 if (isTyping) 58 { 59 skipTyping = true; 60 } 61 } 62 } 63 private void Inputs() 64 { 65 if (Input.GetKeyDown(KeyCode.E) && canInteract && !movement.movementDisabled) 66 { 67 CheckTextToUse(interactableName); 68 } 69 } 70 71 private void CheckTextToUse(string interactableName) 72 { 73 switch (interactableName) 74 { 75 case "Mirror": 76 switch (player.dayNumber) 77 { 78 case 1: 79 ShowDialogue(day1Text); 80 interactIcon.SetActive(false); 81 gameObject.GetComponent<Collider2D>().enabled = false; // Disable collider to prevent further interaction 82 progressTracker.interactedWithToday++; 83 break; 84 case 2: 85 ShowDialogue(day2Text); 86 interactIcon.SetActive(false); 87 gameObject.GetComponent<Collider2D>().enabled = false; // Disable collider to prevent further interaction 88 progressTracker.interactedWithToday++; 89 break; 90 case 3: 91 ShowDialogue(day3Text); 92 interactIcon.SetActive(false); 93 gameObject.GetComponent<Collider2D>().enabled = false; // Disable collider to prevent further interaction 94 progressTracker.interactedWithToday++; 95 break; 96 case 4: 97 if (progressTracker.gotFood) 98 { 99 ShowDialogue(doesntMatter); 100 } 101 else 102 { 103 ShowDialogue(notYetText); 104 } 105 break; 106 } 107 break; 108 case "Sink": 109 switch (player.dayNumber) 110 { 111 case 1: 112 ShowDialogue(day1Text); 113 interactIcon.SetActive(false); 114 gameObject.GetComponent<Collider2D>().enabled = false; // Disable collider to prevent further interaction 115 progressTracker.interactedWithToday++; 116 break; 117 case 2: 118 ShowDialogue(day2Text); 119 interactIcon.SetActive(false); 120 gameObject.GetComponent<Collider2D>().enabled = false; // Disable collider to prevent further interaction 121 progressTracker.interactedWithToday++; 122 break; 123 case 3: 124 ShowDialogue(day3Text); 125 interactIcon.SetActive(false); 126 gameObject.GetComponent<Collider2D>().enabled = false; // Disable collider to prevent further interaction 127 progressTracker.interactedWithToday++; 128 break; 129 case 4: 130 if (progressTracker.gotFood) 131 { 132 ShowDialogue(day4Text); 133 interactIcon.SetActive(false); 134 gameObject.GetComponent<Collider2D>().enabled = false; // Disable collider to prevent further interaction 135 progressTracker.drown = true; 136 break; 137 } 138 else 139 { 140 ShowDialogue(notYetText); 141 } 142 break; 143 } 144 break; 145 case "Doors": 146 switch (player.dayNumber) 147 { 148 case 1: 149 ShowDialogue(day1Text); 150 interactIcon.SetActive(false); 151 gameObject.GetComponent<Collider2D>().enabled = false; // Disable collider to prevent further interaction 152 progressTracker.interactedWithToday++; 153 break; 154 case 2: 155 ShowDialogue(day2Text); 156 interactIcon.SetActive(false); 157 gameObject.GetComponent<Collider2D>().enabled = false; // Disable collider to prevent further interaction 158 progressTracker.interactedWithToday++; 159 break; 160 case 3: 161 ShowDialogue(day3Text); 162 interactIcon.SetActive(false); 163 gameObject.GetComponent<Collider2D>().enabled = false; // Disable collider to prevent further interaction 164 progressTracker.interactedWithToday++; 165 break; 166 case 4: 167 if (progressTracker.gotFood) 168 { 169 ShowDialogue(doesntMatter); 170 } 171 else 172 { 173 ShowDialogue(notYetText); 174 } 175 break; 176 } 177 break; 178 case "Bed": 179 switch (player.dayNumber) 180 { 181 case 1: 182 ShowDialogue(day1Text); 183 interactIcon.SetActive(false); 184 gameObject.GetComponent<Collider2D>().enabled = false; // Disable collider to prevent further interaction 185 progressTracker.interactedWithToday++; 186 progressTracker.interactedWithBed = true; 187 break; 188 case 2: 189 ShowDialogue(day2Text); 190 interactIcon.SetActive(false); 191 gameObject.GetComponent<Collider2D>().enabled = false; // Disable collider to prevent further interaction 192 progressTracker.interactedWithToday++; 193 progressTracker.interactedWithBed = true; 194 break; 195 case 3: 196 ShowDialogue(day3Text); 197 interactIcon.SetActive(false); 198 gameObject.GetComponent<Collider2D>().enabled = false; // Disable collider to prevent further interaction 199 progressTracker.interactedWithToday++; 200 progressTracker.interactedWithBed = true; 201 break; 202 case 4: 203 if (progressTracker.gotFood) 204 { 205 StartCoroutine(SendToPreCreds()); 206 } 207 else 208 { 209 ShowDialogue(notYetText); 210 } 211 break; 212 } 213 break; 214 case "BedSecond": 215 switch (player.dayNumber) 216 { 217 case 1: 218 ShowDialogue(day1Text); 219 interactIcon.SetActive(false); 220 break; 221 case 2: 222 ShowDialogue(day2Text); 223 interactIcon.SetActive(false); 224 break; 225 case 3: 226 ShowDialogue(day3Text); 227 interactIcon.SetActive(false); 228 break; 229 case 4: 230 if (progressTracker.gotFood) 231 { 232 ShowDialogue(doesntMatter); 233 } 234 else 235 { 236 ShowDialogue(notYetText); 237 } 238 break; 239 } 240 break; 241 case "BedThird": 242 switch (player.dayNumber) 243 { 244 case 1: 245 ShowDialogue(day1Text); 246 interactIcon.SetActive(false); 247 gameObject.GetComponent<Collider2D>().enabled = false; // Disable collider to prevent further interaction 248 progressTracker.interactedWithToday++; 249 break; 250 case 2: 251 ShowDialogue(day2Text); 252 interactIcon.SetActive(false); 253 gameObject.GetComponent<Collider2D>().enabled = false; // Disable collider to prevent further interaction 254 progressTracker.interactedWithToday++; 255 break; 256 case 3: 257 ShowDialogue(day3Text); 258 interactIcon.SetActive(false); 259 gameObject.GetComponent<Collider2D>().enabled = false; // Disable collider to prevent further interaction 260 progressTracker.interactedWithToday++; 261 break; 262 case 4: 263 if (progressTracker.gotFood) 264 { 265 ShowDialogue(doesntMatter); 266 } 267 else 268 { 269 ShowDialogue(notYetText); 270 } 271 break; 272 } 273 break; 274 case "Table": 275 switch (player.dayNumber) 276 { 277 case 1: 278 ShowDialogue(day1Text); 279 interactIcon.SetActive(false); 280 gameObject.GetComponent<Collider2D>().enabled = false; // Disable collider to prevent further interaction 281 progressTracker.interactedWithToday++; 282 progressTracker.interactedWithTable = true; 283 break; 284 case 2: 285 ShowDialogue(day2Text); 286 interactIcon.SetActive(false); 287 gameObject.GetComponent<Collider2D>().enabled = false; // Disable collider to prevent further interaction 288 progressTracker.interactedWithToday++; 289 progressTracker.interactedWithTable = true; 290 break; 291 case 3: 292 ShowDialogue(day3Text); 293 interactIcon.SetActive(false); 294 gameObject.GetComponent<Collider2D>().enabled = false; // Disable collider to prevent further interaction 295 progressTracker.interactedWithToday++; 296 progressTracker.interactedWithTable = true; 297 break; 298 case 4: 299 if (progressTracker.gotFood) 300 { 301 ShowDialogue(doesntMatter); 302 } 303 else 304 { 305 ShowDialogue(notYetText); 306 } 307 break; 308 } 309 break; 310 case "Wall": 311 switch (player.dayNumber) 312 { 313 case 1: 314 ShowDialogue(day1Text); 315 interactIcon.SetActive(false); 316 gameObject.GetComponent<Collider2D>().enabled = false; 317 progressTracker.interactedWithToday++; 318 break; 319 case 2: 320 ShowDialogue(day2Text); 321 progressTracker.hasInteractedWithDay2Wall = true; 322 wallGraphic.SetActive(true); 323 interactIcon.SetActive(false); 324 gameObject.GetComponent<Collider2D>().enabled = false; 325 progressTracker.interactedWithToday++; 326 break; 327 case 3: 328 ShowDialogue(day3Text); 329 interactIcon.SetActive(false); 330 gameObject.GetComponent<Collider2D>().enabled = false; 331 progressTracker.interactedWithToday++; 332 break; 333 case 4: 334 if (progressTracker.gotFood) 335 { 336 ShowDialogue(doesntMatter); 337 } 338 else 339 { 340 ShowDialogue(notYetText); 341 } 342 break; 343 } 344 break; 345 case "TableSecond": 346 switch (player.dayNumber) 347 { 348 case 1: 349 ShowDialogue(day1Text); 350 interactIcon.SetActive(false); 351 gameObject.GetComponent<Collider2D>().enabled = false; 352 progressTracker.interactedWithToday++; 353 break; 354 case 2: 355 ShowDialogue(day2Text); 356 interactIcon.SetActive(false); 357 gameObject.GetComponent<Collider2D>().enabled = false; 358 progressTracker.interactedWithToday++; 359 break; 360 case 3: 361 ShowDialogue(day3Text); 362 interactIcon.SetActive(false); 363 gameObject.GetComponent<Collider2D>().enabled = false; 364 progressTracker.interactedWithToday++; 365 break; 366 case 4: 367 if (progressTracker.gotFood) 368 { 369 ShowDialogue(doesntMatter); 370 } 371 else 372 { 373 ShowDialogue(notYetText); 374 } 375 break; 376 } 377 break; 378 case "Food": 379 switch (player.dayNumber) 380 { 381 case 1: 382 ShowDialogue(day1Text); 383 interactIcon.SetActive(false); 384 gameObject.GetComponent<SpriteRenderer>().sortingOrder = -10; 385 gameObject.GetComponent<Collider2D>().enabled = false; 386 progressTracker.interactedWithToday++; 387 progressTracker.gotFood = true; 388 break; 389 case 2: 390 ShowDialogue(day2Text); 391 interactIcon.SetActive(false); 392 gameObject.GetComponent<SpriteRenderer>().sortingOrder = -10; 393 gameObject.GetComponent<Collider2D>().enabled = false; 394 progressTracker.interactedWithToday++; 395 progressTracker.gotFood = true; 396 break; 397 case 3: 398 ShowDialogue(day3Text); 399 interactIcon.SetActive(false); 400 gameObject.GetComponent<SpriteRenderer>().sortingOrder = -10; 401 gameObject.GetComponent<Collider2D>().enabled = false; 402 progressTracker.interactedWithToday++; 403 progressTracker.gotFood = true; 404 break; 405 case 4: 406 ShowDialogue(day4Text); 407 interactIcon.SetActive(false); 408 gameObject.GetComponent<SpriteRenderer>().sortingOrder = -10; 409 gameObject.GetComponent<Collider2D>().enabled = false; 410 progressTracker.interactedWithToday++; 411 progressTracker.gotFood = true; 412 progressTracker.interactedWithDay4Food = true; 413 break; 414 } 415 break; 416 } 417 } 418 419 public IEnumerator SendToPreCreds() 420 { 421 fadeScript.FadeIn(); 422 yield return new WaitForSecondsRealtime(1f); 423 SceneManager.LoadScene("BeforeCredits"); 424 } 425 426 public void ShowDialogue(string[] dialogueLines) 427 { 428 StartCoroutine(DialogueCoroutine(dialogueLines)); 429 } 430 431 private void DayEnd() 432 { 433 dayIntro.dayText.text = ""; 434 fadeScript.FadeIn(true); 435 } 436 437 private IEnumerator DialogueCoroutine(string[] dialogueLines) 438 { 439 movement.movementDisabled = true; 440 textBox.gameObject.SetActive(true); 441 TMP_Text uiText = textBox.GetComponentInChildren<TMP_Text>(); 442 int currentLine = 0; 443 444 while (currentLine < dialogueLines.Length) 445 { 446 isTyping = true; 447 uiText.text = ""; 448 string line = dialogueLines[currentLine]; 449 450 foreach (char c in line) 451 { 452 if (skipTyping) 453 { 454 uiText.text = line; 455 break; 456 } 457 uiText.text += c; 458 yield return new WaitForSeconds(characterDisplaySpeed); 459 } 460 461 isTyping = false; 462 skipTyping = false; 463 bool nextLine = false; 464 while (!nextLine) 465 { 466 if ((Input.GetKeyDown(KeyCode.Space) || Input.GetMouseButtonDown(0))) 467 { 468 if (isTyping) 469 skipTyping = true; 470 else 471 nextLine = true; 472 } 473 yield return null; 474 } 475 currentLine++; 476 } 477 478 textBox.gameObject.SetActive(false); 479 movement.movementDisabled = false; 480 481 if (progressTracker.dayHasEnded) 482 { 483 DayEnd(); 484 } 485 486 if (progressTracker.hasInteractedWithDay2Wall && player.dayNumber == 2) 487 { 488 progressTracker.SetName(); 489 progressTracker.hasInteractedWithDay2Wall = false; 490 } 491 492 if (progressTracker.playerName != "" && player.dayNumber == 2) 493 { 494 wallGraphic.SetActive(false); 495 } 496 497 if (progressTracker.interactedWithDay4Food && player.dayNumber == 4) 498 { 499 choice1.SetActive(true); 500 movement.movementDisabled = true; 501 } 502 503 if (progressTracker.drown) 504 { 505 drownChoice.SetActive(true); 506 } 507 } 508 509 private void OnTriggerEnter2D(Collider2D other) 510 { 511 if (other.CompareTag("Player")) 512 { 513 interactIcon.SetActive(true); 514 canInteract = true; 515 } 516 } 517 518 private void OnTriggerExit2D(Collider2D collision) 519 { 520 if (collision.CompareTag("Player")) 521 { 522 interactIcon.SetActive(false); 523 canInteract = false; 524 } 525 } 526}