Files

94 lines
2.3 KiB
C#
Raw Permalink Normal View History

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class removeGravityFromCharacterSystem : MonoBehaviour
{
[Header ("Main Settings")]
[Space]
public float removeGravityDuration = 5;
public float extraGravityForce = 5;
public float extraTorqueForce = 8;
public ForceMode torqueForceMode;
public bool pauseExtraForceAfterDelay;
public float pauseExtraForceDelay;
public float pauseExtraForceSpeed = 3;
[Space]
[Header ("Components")]
[Space]
public ragdollActivator mainRagdollActivator;
public Transform characterTransform;
Coroutine removeGravityCoroutine;
public void activateRemoveGravity ()
{
if (removeGravityCoroutine != null) {
StopCoroutine (removeGravityCoroutine);
}
removeGravityCoroutine = StartCoroutine (activateRemoveGravityCoroutine ());
}
IEnumerator activateRemoveGravityCoroutine ()
{
mainRagdollActivator.pushCharacterWithoutForceXAmountOfTime (removeGravityDuration);
mainRagdollActivator.enableOrDisableRagdollGravityState (false);
Vector3 initialForce = characterTransform.up * extraGravityForce;
mainRagdollActivator.setVelocityToRagdollInDirection (initialForce);
Rigidbody hipsRigidbody = mainRagdollActivator.getHipsRigidbody ();
if (hipsRigidbody != null) {
hipsRigidbody.AddRelativeTorque (characterTransform.forward * extraTorqueForce, torqueForceMode);
hipsRigidbody.AddRelativeTorque (characterTransform.right * extraTorqueForce, torqueForceMode);
// hipsRigidbody.AddTorque (hipsRigidbody.transform.up * extraTorqueForce);
}
// yield return new WaitForSeconds (removeGravityDuration);
bool targetReached = false;
float timer = 0;
bool pauseExtraForceActivated = false;
while (!targetReached) {
timer += Time.deltaTime;
if (pauseExtraForceAfterDelay) {
if (pauseExtraForceActivated) {
if (GKC_Utils.distance (initialForce, Vector3.zero) > 0.05f) {
initialForce = Vector3.MoveTowards (initialForce, Vector3.zero, timer * pauseExtraForceSpeed);
mainRagdollActivator.setVelocityToRagdollInDirection (initialForce);
}
} else {
if (timer >= pauseExtraForceDelay) {
pauseExtraForceActivated = true;
}
}
}
if (timer >= removeGravityDuration) {
targetReached = true;
}
yield return null;
}
mainRagdollActivator.enableOrDisableRagdollGravityState (true);
}
}