using System.Collections; using System.Collections.Generic; using DG.Tweening; using UnityEngine; using AibisDream.FixSystem; using UnityEngine.UI; using Unity.VisualScripting; using AibisDream; public class PunchTapeSystem : MonoBehaviour { public RectTransform punchTapeMachine; public RectTransform punchTape; public GameObject blackPanel; public float stepInterval = 0.1f; // Interval between each printing step public float stepDistance = 0.5f; // Distance moved per step public float[] stepPatterns = { 0.3f, 0.5f, 0.2f, 0.4f, 0.6f }; // Pattern of intervals to simulate rhythmic printing public GameObject tempPunchTapeGroup; private void Awake() { FixSystemCenter.SystemDic.Register(this); } // public void Update() // { // if (Input.GetKeyDown(KeyCode.P)) // { // StartPrinting(2); // } // } public void StartPrinting(int tapeCount) { StartCoroutine(PrintPunchTapes(tapeCount)); } public IEnumerator PrintPunchTapes(int tapeCount) { blackPanel.SetActive(true); Vector3 machineStartPos = punchTapeMachine.anchoredPosition; Vector3 tapeStartPos = punchTape.anchoredPosition; Color tapeStartColor = punchTape.GetComponent().color; while (tapeCount > 0) { // Move the printer to x = 2 over 1 second yield return punchTapeMachine.DOAnchorPos(new Vector2(-1252f, punchTapeMachine.anchoredPosition.y), 1f).WaitForCompletion(); AudioManager.RandomPlayInteraction("typing"); // Gradually move the punch tape to x = -3.8 with rhythmic pattern Vector2 targetPosition = new Vector2(796f, punchTape.anchoredPosition.y); int patternIndex = 0; while (Vector2.Distance(punchTape.anchoredPosition, targetPosition) > stepDistance) { punchTape.anchoredPosition = Vector3.MoveTowards(punchTape.anchoredPosition, targetPosition, stepDistance); yield return new WaitForSeconds(stepPatterns[patternIndex % stepPatterns.Length]); patternIndex++; } // Ensure exact final position punchTape.anchoredPosition = targetPosition; // Fade out the punch tape over 1 second yield return punchTape.GetComponent().DOFade(0f, 1f).WaitForCompletion(); // Reset the punch tape position and opacity punchTape.anchoredPosition = tapeStartPos; punchTape.GetComponent().color = tapeStartColor; // Decrement the tape count tapeCount--; } // Move the printer back to x = 0 over 1 second yield return punchTapeMachine.DOAnchorPos(new Vector2(-1428.186f, punchTapeMachine.anchoredPosition.y), 1f).WaitForCompletion(); blackPanel.SetActive(false); } public void Temp_showPunchTapeGroup() { tempPunchTapeGroup.SetActive(true); } public IEnumerator Temp_HidePunchTapeGroup() { foreach(SpriteRenderer s in tempPunchTapeGroup.GetComponentsInChildren()) { s.DOFade(0,0.5f); } yield return new WaitForSeconds(0.5f); tempPunchTapeGroup.SetActive(false); } }