Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using Settings;
- using System;
- using UnityEngine.InputSystem;
- using InteractionSystem;
- using Movement;
- using TMPro;
- using FMODUnity;
- public class CurseActivator : Interactable
- {
- [SerializeField] private MovementSettings _settings;
- [SerializeField] private bool _activated;
- private Vector2 _input;
- private Vector2 _cursorPos;
- [SerializeField] private Vector2[] _letterPos;
- [SerializeField] private static List<LetterButton> letters = new List<LetterButton>();
- [SerializeField] private float stepSize = 1;
- [SerializeField] private GameObject _cursor;
- [SerializeField] private GameObject sheetVisual;
- [SerializeField] private TextMeshPro inputDisplay;
- [SerializeField] private String _secretKey;
- [SerializeField] private String _devKey;
- [SerializeField] private GameObject _successVFX;
- [SerializeField] private TextMeshPro _modeNoftif;
- [SerializeField] private Sprite openBoxSprite;
- [Header("Audio Refs")]
- [SerializeField] private EventReference _hoverAudio;
- [SerializeField] private EventReference _typingAudio;
- [SerializeField] private EventReference _errorAudio;
- [SerializeField] private EventReference _eraseAudio;
- [SerializeField] private EventReference _successAudio;
- private bool endOfUse;
- void Start()
- {
- letters.Clear();
- _letterPos = null;
- _cursorPos = _cursor.transform.localPosition;
- foreach (Transform child in this.transform)
- {
- if(child.GetComponent<LetterButton>())
- {
- letters.Add(child.transform.GetComponent<LetterButton>());
- }
- }
- if(letters.Count > 0)
- {
- _letterPos = new Vector2[letters.Count];
- for(int i = 0; i < letters.Count; i++)
- {
- _letterPos[i] = new Vector2(letters[i].transform.localPosition.x, letters[i].transform.localPosition.y);
- }
- }
- }
- private void onActivation()
- {
- //Clear previous input.
- inputDisplay.text = "";
- //Enable visuals
- inputDisplay.gameObject.SetActive(true);
- foreach (Transform child in this.transform)
- {
- if(child.GetComponent<SpriteRenderer>())
- {
- child.GetComponent<SpriteRenderer>().enabled = true;
- }
- }
- }
- private void Deactivate(PlayerInteract p)
- {
- //disable visuals
- inputDisplay.gameObject.SetActive(false);
- foreach (Transform child in this.transform)
- {
- if(child.GetComponent<SpriteRenderer>())
- {
- child.GetComponent<SpriteRenderer>().enabled = false;
- }
- }
- p.GetComponent<FreeMovement>().canMove = true;
- _activated = false;
- }
- // Update is called once per frame
- void FixedUpdate()
- {
- //Set cursor visual position
- _cursor.transform.localPosition = _cursorPos;
- }
- public void Move(InputAction.CallbackContext context)
- {
- if (!context.started) return;
- if(_activated)
- {
- _input = context.canceled ? Vector2.zero : context.ReadValue<Vector2>();
- //Preform move
- if(nextPosValid(context))
- {
- RuntimeManager.PlayOneShot(_hoverAudio);
- _cursorPos += _input * stepSize;
- }
- }
- }
- //Methods to check if cursors next position is valid
- private bool nextPosValid(InputAction.CallbackContext c)
- {
- foreach(Vector2 pos in _letterPos)
- {
- if((_cursorPos + c.ReadValue<Vector2>() * stepSize) == pos) return true;
- }
- return false;
- }
- //Gets the interact input from player
- public override void Interact(PlayerInteract player)
- {
- if(endOfUse)
- {
- return;
- }
- if(player.GetComponent<FreeMovement>().canMove == true)
- {
- player.GetComponent<FreeMovement>().canMove = false;
- player.GetComponent<FreeMovement>()._input = new Vector2(0,0);
- onActivation();
- _activated = true;
- }
- else
- {
- for(int i = 0; i < letters.Count; i++)
- {
- if(_letterPos[i] == _cursorPos)
- {
- if(letters[i].Press() == 32)
- {
- //ERASE
- RuntimeManager.PlayOneShot(_eraseAudio);
- if(inputDisplay.text.Length > 0)
- {
- inputDisplay.text = inputDisplay.text.Substring(0, inputDisplay.text.Length - 1);
- }
- }
- else if(letters[i].Press() == 35)
- {
- //# will close only
- Deactivate(player);
- _activated = false;
- }
- else if(letters[i].Press() != 33 && inputDisplay.text.Length < 10)
- {
- //ADD LETTER
- RuntimeManager.PlayOneShot(_typingAudio);
- inputDisplay.text += letters[i].Press();
- }
- else if(letters[i].Press() == 33)
- {
- //ENTER
- //Detect keyword
- if(inputDisplay.text == _secretKey)
- {
- this.GetComponent<SpriteRenderer>().sprite = openBoxSprite;
- RuntimeManager.PlayOneShot(_successAudio);
- PlayerPrefs.SetInt("secret", 1);
- Instantiate(_successVFX, this.transform.position,_successVFX.transform.rotation);
- _modeNoftif.text = "Secret Mode Active!";
- _modeNoftif.gameObject.SetActive(true);
- Deactivate(player);
- endOfUse = true;
- this.gameObject.GetComponent<CurseActivator>().enabled = false;
- }
- else if(inputDisplay.text == _devKey)
- {
- this.GetComponent<SpriteRenderer>().sprite = openBoxSprite;
- RuntimeManager.PlayOneShot(_successAudio);
- PlayerPrefs.SetInt("devmode", 1);
- Instantiate(_successVFX, this.transform.position,_successVFX.transform.rotation);
- _modeNoftif.text = "Developer Mode Active!";
- _modeNoftif.gameObject.SetActive(true);
- Deactivate(player);
- endOfUse = true;
- this.gameObject.GetComponent<CurseActivator>().enabled = false;
- }
- else
- {
- //ERROR shake
- RuntimeManager.PlayOneShot(_errorAudio);
- this.GetComponent<Animation>().Play();
- }
- }
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement