85 lines
2.9 KiB
C#
85 lines
2.9 KiB
C#
using System.Collections;
|
|
using DG.Tweening;
|
|
using UnityEngine;
|
|
using AibisDream.FixSystem;
|
|
using UnityEngine.UI;
|
|
using AibisDream.Kit;
|
|
|
|
public class PunchTapeSystem : MonoBehaviour
|
|
{
|
|
public RectTransform punchTapeMachine;
|
|
public RectTransform punchTape;
|
|
|
|
public GameObject blackPanel;
|
|
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 IEnumerator PrintPunchTapes(int tapeCount)
|
|
{
|
|
blackPanel.SetActive(true);
|
|
Vector3 tapeStartPos = punchTape.anchoredPosition;
|
|
Color tapeStartColor = punchTape.GetComponent<Image>().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.Instance.PlaySfx("event:/Scriptal/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<Image>().DOFade(0f, 1f).WaitForCompletion();
|
|
|
|
// Reset the punch tape position and opacity
|
|
punchTape.anchoredPosition = tapeStartPos;
|
|
punchTape.GetComponent<Image>().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<SpriteRenderer>())
|
|
{
|
|
s.DOFade(0, 0.5f);
|
|
}
|
|
|
|
yield return new WaitForSeconds(0.5f);
|
|
tempPunchTapeGroup.SetActive(false);
|
|
}
|
|
} |