Advertisement
EmmyDev

Input Code

Jul 2nd, 2023
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.54 KB | Source Code | 0 0
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using Settings;
  5. using System;
  6. using UnityEngine.InputSystem;
  7. using InteractionSystem;
  8. using Movement;
  9. using TMPro;
  10. using FMODUnity;
  11.  
  12.  
  13.    
  14. public class CurseActivator : Interactable
  15. {
  16.     [SerializeField] private MovementSettings _settings;
  17.     [SerializeField] private bool _activated;
  18.     private Vector2 _input;
  19.  
  20.     private Vector2 _cursorPos;
  21.  
  22.     [SerializeField] private Vector2[] _letterPos;
  23.     [SerializeField] private static List<LetterButton> letters = new List<LetterButton>();
  24.  
  25.     [SerializeField] private float stepSize = 1;
  26.  
  27.     [SerializeField] private GameObject _cursor;
  28.  
  29.     [SerializeField] private GameObject sheetVisual;
  30.  
  31.     [SerializeField] private TextMeshPro inputDisplay;
  32.  
  33.     [SerializeField] private String _secretKey;
  34.     [SerializeField] private String _devKey;
  35.  
  36.     [SerializeField] private GameObject _successVFX;
  37.     [SerializeField] private TextMeshPro _modeNoftif;
  38.  
  39.     [SerializeField] private Sprite openBoxSprite;
  40.  
  41.     [Header("Audio Refs")]
  42.     [SerializeField] private EventReference _hoverAudio;
  43.     [SerializeField] private EventReference _typingAudio;
  44.     [SerializeField] private EventReference _errorAudio;
  45.     [SerializeField] private EventReference _eraseAudio;
  46.     [SerializeField] private EventReference _successAudio;
  47.  
  48.     private bool endOfUse;
  49.    
  50.     void Start()
  51.     {
  52.         letters.Clear();
  53.         _letterPos = null;
  54.  
  55.         _cursorPos = _cursor.transform.localPosition;
  56.         foreach (Transform child in this.transform)
  57.         {
  58.             if(child.GetComponent<LetterButton>())
  59.             {
  60.                 letters.Add(child.transform.GetComponent<LetterButton>());
  61.             }
  62.         }
  63.         if(letters.Count > 0)
  64.         {
  65.             _letterPos = new Vector2[letters.Count];
  66.             for(int i = 0; i < letters.Count; i++)
  67.             {
  68.                 _letterPos[i] = new Vector2(letters[i].transform.localPosition.x, letters[i].transform.localPosition.y);
  69.             }
  70.         }
  71.     }
  72.    
  73.     private void onActivation()
  74.     {
  75.         //Clear previous input.
  76.         inputDisplay.text = "";
  77.  
  78.         //Enable visuals
  79.         inputDisplay.gameObject.SetActive(true);
  80.  
  81.         foreach (Transform child in this.transform)
  82.         {
  83.            
  84.             if(child.GetComponent<SpriteRenderer>())
  85.             {
  86.                 child.GetComponent<SpriteRenderer>().enabled = true;
  87.             }
  88.         }
  89.        
  90.        
  91.     }
  92.     private void Deactivate(PlayerInteract p)
  93.     {
  94.         //disable visuals
  95.         inputDisplay.gameObject.SetActive(false);
  96.  
  97.         foreach (Transform child in this.transform)
  98.         {  
  99.             if(child.GetComponent<SpriteRenderer>())
  100.             {
  101.                 child.GetComponent<SpriteRenderer>().enabled = false;
  102.             }
  103.         }
  104.         p.GetComponent<FreeMovement>().canMove = true;
  105.         _activated = false;
  106.  
  107.     }
  108.  
  109.     // Update is called once per frame
  110.     void FixedUpdate()
  111.     {
  112.         //Set cursor visual position
  113.         _cursor.transform.localPosition = _cursorPos;
  114.     }
  115.     public void Move(InputAction.CallbackContext context)
  116.     {
  117.        
  118.         if (!context.started) return;
  119.         if(_activated)
  120.         {
  121.             _input = context.canceled ? Vector2.zero : context.ReadValue<Vector2>();
  122.  
  123.             //Preform move
  124.             if(nextPosValid(context))
  125.             {
  126.                 RuntimeManager.PlayOneShot(_hoverAudio);
  127.                 _cursorPos += _input * stepSize;
  128.             }
  129.  
  130.         }
  131.     }
  132.  
  133.     //Methods to check if cursors next position is valid
  134.     private bool nextPosValid(InputAction.CallbackContext c)
  135.     {
  136.         foreach(Vector2 pos in _letterPos)
  137.         {
  138.             if((_cursorPos + c.ReadValue<Vector2>() * stepSize) == pos) return true;
  139.         }
  140.         return false;
  141.     }
  142.  
  143.     //Gets the interact input from player
  144.     public override void Interact(PlayerInteract player)
  145.     {
  146.         if(endOfUse)
  147.         {
  148.             return;
  149.         }
  150.  
  151.  
  152.         if(player.GetComponent<FreeMovement>().canMove == true)
  153.         {
  154.             player.GetComponent<FreeMovement>().canMove = false;
  155.             player.GetComponent<FreeMovement>()._input = new Vector2(0,0);
  156.             onActivation();
  157.             _activated = true;
  158.         }
  159.         else
  160.         {
  161.             for(int i = 0; i < letters.Count; i++)
  162.             {
  163.                 if(_letterPos[i] == _cursorPos)
  164.                 {
  165.                     if(letters[i].Press() == 32)
  166.                     {
  167.                         //ERASE
  168.                         RuntimeManager.PlayOneShot(_eraseAudio);
  169.                         if(inputDisplay.text.Length > 0)
  170.                         {
  171.                             inputDisplay.text = inputDisplay.text.Substring(0, inputDisplay.text.Length - 1);
  172.                         }
  173.                        
  174.                     }
  175.                     else if(letters[i].Press() == 35)
  176.                     {
  177.                         //# will close only
  178.                         Deactivate(player);
  179.                         _activated = false;
  180.                        
  181.                     }
  182.                     else if(letters[i].Press() != 33 && inputDisplay.text.Length < 10)
  183.                     {
  184.                         //ADD LETTER
  185.                         RuntimeManager.PlayOneShot(_typingAudio);
  186.                         inputDisplay.text += letters[i].Press();
  187.                     }
  188.                     else if(letters[i].Press() == 33)
  189.                     {
  190.                         //ENTER
  191.                         //Detect keyword
  192.                         if(inputDisplay.text == _secretKey)
  193.                         {
  194.                             this.GetComponent<SpriteRenderer>().sprite = openBoxSprite;
  195.                             RuntimeManager.PlayOneShot(_successAudio);
  196.                             PlayerPrefs.SetInt("secret", 1);
  197.                             Instantiate(_successVFX, this.transform.position,_successVFX.transform.rotation);
  198.                             _modeNoftif.text = "Secret Mode Active!";
  199.                             _modeNoftif.gameObject.SetActive(true);
  200.                             Deactivate(player);
  201.                             endOfUse = true;
  202.                             this.gameObject.GetComponent<CurseActivator>().enabled = false;
  203.                         }
  204.                         else if(inputDisplay.text == _devKey)
  205.                         {
  206.                             this.GetComponent<SpriteRenderer>().sprite = openBoxSprite;
  207.                             RuntimeManager.PlayOneShot(_successAudio);
  208.                             PlayerPrefs.SetInt("devmode", 1);
  209.                             Instantiate(_successVFX, this.transform.position,_successVFX.transform.rotation);
  210.                             _modeNoftif.text = "Developer Mode Active!";
  211.                             _modeNoftif.gameObject.SetActive(true);
  212.                             Deactivate(player);
  213.                             endOfUse = true;
  214.                             this.gameObject.GetComponent<CurseActivator>().enabled = false;
  215.                         }
  216.                         else
  217.                         {
  218.                             //ERROR shake
  219.                             RuntimeManager.PlayOneShot(_errorAudio);
  220.                             this.GetComponent<Animation>().Play();
  221.                         }
  222.                        
  223.                     }
  224.                 }
  225.             }
  226.         }
  227.        
  228.     }
  229. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement