using System.Collections; using System.Collections.Generic; using DG.Tweening; using UnityEngine; using AibisDream.FixSystem; using UnityEngine.UI; public class PunchTapeSystem : MonoBehaviour { public RectTransform punchTapeMachine; public RectTransform punchTape; 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 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) { 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(); // 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(); } }