|
|
|
using System.Collections;
|
|
|
|
using System.Collections.Generic;
|
|
|
|
using System.Runtime.InteropServices.WindowsRuntime;
|
|
|
|
using Unity.VisualScripting;
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
|
|
public class Treadmill : MonoBehaviour
|
|
|
|
{
|
|
|
|
//public Rigidbody m_Body;
|
|
|
|
public float m_HoldSpeed;
|
|
|
|
|
|
|
|
private float m_CurrentForce = 0f;
|
|
|
|
|
|
|
|
private float m_angleOffset;
|
|
|
|
|
|
|
|
private bool m_RampActive;
|
|
|
|
|
|
|
|
public float m_RampTimer;
|
|
|
|
|
|
|
|
public float m_RampIncrement;
|
|
|
|
|
|
|
|
public float m_HoldSpeedTimer;
|
|
|
|
|
|
|
|
public Material m_Belt;
|
|
|
|
|
|
|
|
private float m_BeltSpeed;
|
|
|
|
|
|
|
|
private void OnEnable()
|
|
|
|
{
|
|
|
|
OnChairContact.ApplyTreadmillForce += ApplyForce;
|
|
|
|
OnChairContact.RemoveTreadmillForce += RemoveForce;
|
|
|
|
m_angleOffset = 16.6f;
|
|
|
|
}
|
|
|
|
|
|
|
|
private void OnDisable()
|
|
|
|
{
|
|
|
|
OnChairContact.ApplyTreadmillForce -= ApplyForce;
|
|
|
|
OnChairContact.RemoveTreadmillForce -= RemoveForce;
|
|
|
|
}
|
|
|
|
|
|
|
|
public void ApplyForce(Rigidbody rb)
|
|
|
|
{
|
|
|
|
Vector3 forceDirection = Quaternion.Euler(0, -m_angleOffset, 0) * Vector3.forward;
|
|
|
|
|
|
|
|
|
|
|
|
if (!m_RampActive && m_RampTimer > 0f)
|
|
|
|
{
|
|
|
|
m_RampTimer -= Time.deltaTime;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
m_RampActive = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (m_RampActive)
|
|
|
|
{
|
|
|
|
|
|
|
|
if (m_CurrentForce > m_HoldSpeed && m_HoldSpeedTimer >= 0)
|
|
|
|
{
|
|
|
|
m_HoldSpeedTimer -= Time.deltaTime;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
m_CurrentForce += Time.deltaTime * m_RampIncrement;
|
|
|
|
}
|
|
|
|
|
|
|
|
rb.AddForce(forceDirection * m_CurrentForce);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
public void RemoveForce(Rigidbody rb)
|
|
|
|
{
|
|
|
|
rb.AddForce(new Vector3(0, 0, 0));
|
|
|
|
}
|
|
|
|
|
|
|
|
private void OnDrawGizmosSelected()
|
|
|
|
{
|
|
|
|
// Draw a line representing the force direction
|
|
|
|
Gizmos.color = Color.red;
|
|
|
|
Gizmos.DrawRay(transform.position, Quaternion.Euler(0, -m_angleOffset, 0) * Vector3.forward);
|
|
|
|
}
|
|
|
|
|
|
|
|
private void FixedUpdate()
|
|
|
|
{
|
|
|
|
m_BeltSpeed += Map(m_CurrentForce, 0, 600, 0, 0.01f);
|
|
|
|
|
|
|
|
m_Belt.SetFloat("_Speed", -m_BeltSpeed);
|
|
|
|
}
|
|
|
|
|
|
|
|
private float Map(float s, float a1, float a2, float b1, float b2)
|
|
|
|
{
|
|
|
|
return b1 + (s - a1) * (b2 - b1) / (a2 - a1);
|
|
|
|
}
|
|
|
|
}
|