Files
HauntedBloodlines/Assets/Scripts/CurtainBehaviour.cs
2025-05-29 22:31:40 +03:00

127 lines
4.5 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CurtainBehaviour : MonoBehaviour
{
[SerializeField] private Cloth curtainCloth;
public float fadeSpeed = 2.0f; // The speed at which to fade towards the external acceleration
public float fadeDelay = 1.0f; // Optional delay before starting the fading process
[Tooltip("BECAREFUL if used at start then there will be no forces applied if the dev has (ApplyAccelerationToCurtainAtStart) bool TRUE as well")]
public bool ZeroAccelerationToCurtainsAtStart;
public bool ApplyAccelerationToCurtainAtStart;
public Vector3 targetExternalAccelerationToCurtain;
public Vector3 targetRandomAccelerationToCurtain;
public float lerpToTarget = 0;
Coroutine accelerationFadeIn;
Coroutine accelerationFadeOut;
//private void Awake()
//{
// curtainCloth.externalAcceleration = new Vector3(curtainCloth.externalAcceleration.x, 1000f, curtainCloth.externalAcceleration.z);
//}
// Start is called before the first frame update
void Start()
{
if (ZeroAccelerationToCurtainsAtStart)
{
curtainCloth.externalAcceleration = Vector3.zero;
curtainCloth.randomAcceleration = Vector3.zero;
}
StartCoroutine(AtStartOfGame());
if (ApplyAccelerationToCurtainAtStart)
{
StartRandomAccelerationToCurtain();
}
}
public void FixCurtains()
{
StartCoroutine(AtStartOfGame());
}
IEnumerator AtStartOfGame()
{
curtainCloth.externalAcceleration = new Vector3(curtainCloth.externalAcceleration.x, 3000f, curtainCloth.externalAcceleration.z);
print("Skato kourtines");
yield return new WaitForSeconds(0.1f);
curtainCloth.externalAcceleration = new Vector3(curtainCloth.externalAcceleration.x, 0f, curtainCloth.externalAcceleration.z);
}
public void StartRandomAccelerationToCurtain()
{
print("Started acceleration to curtain");
accelerationFadeIn = StartCoroutine(AccelerationToCurtainFadeIn());
if (accelerationFadeOut != null)
{
StopCoroutine(accelerationFadeOut);
accelerationFadeOut = null;
}
}
public void StopRandomAccelerationToCurtain()
{
print("Stopping acceleration to curtain");
accelerationFadeOut = StartCoroutine(AccelerationToCurtainFadeOut());
if (accelerationFadeIn != null)
{
StopCoroutine(accelerationFadeIn);
accelerationFadeOut = null;
}
}
IEnumerator AccelerationToCurtainFadeIn()
{
lerpToTarget = 0f;
float transitionTime = 1;
yield return new WaitForSeconds(0f);
while (lerpToTarget <= transitionTime)
{
lerpToTarget += Time.deltaTime;
float normalizedTime = Mathf.Clamp01(lerpToTarget / transitionTime);
// Update the current target position towards the externalAcceleration
curtainCloth.externalAcceleration = Vector3.Lerp(curtainCloth.externalAcceleration, targetExternalAccelerationToCurtain, normalizedTime);
curtainCloth.randomAcceleration = Vector3.Lerp(curtainCloth.externalAcceleration, targetRandomAccelerationToCurtain, normalizedTime);
yield return null;
}
// Ensure the final value is exactly the externalAcceleration to avoid slight discrepancies
curtainCloth.externalAcceleration = targetExternalAccelerationToCurtain;
curtainCloth.randomAcceleration = targetRandomAccelerationToCurtain;
}
IEnumerator AccelerationToCurtainFadeOut()
{
lerpToTarget = 0f;
float transitionTime = 1;
yield return new WaitForSeconds(0f);
while (lerpToTarget <= transitionTime)
{
lerpToTarget += Time.deltaTime;
float normalizedTime = Mathf.Clamp01(lerpToTarget / transitionTime);
// Update the current target position towards the externalAcceleration
curtainCloth.externalAcceleration = Vector3.Lerp(curtainCloth.externalAcceleration, Vector3.zero, transitionTime);
curtainCloth.randomAcceleration = Vector3.Lerp(curtainCloth.externalAcceleration, Vector3.zero, transitionTime);
yield return null;
}
// Ensure the final value is exactly the externalAcceleration to avoid slight discrepancies
curtainCloth.externalAcceleration = Vector3.zero;
curtainCloth.randomAcceleration = Vector3.zero;
}
}