Files
2026-03-04 10:03:45 +08:00

110 lines
2.4 KiB
C#

using System.Collections;
using UnityEngine;
public class FootPrint : MonoBehaviour
{
public enum FootSide
{
Left = 0,
Right = 1
}
public FootSide footSide;
public bool footPrintsEnabled;
public GameObject footPrintPrefab;
public GameObject dustStep;
public bool groundContact;
public float groundDistance;
public int decayRate;
public Vector3 offset;
private Quaternion reflected;
private Transform mytransform;
private float ry;
public Transform playerTransform;
public Color stepFootWedColor;
public Color stepFootDirtyColor;
private bool isFootPrint;
private void Awake()
{
mytransform = base.transform;
reflected = default(Quaternion);
}
private void Start()
{
footPrintsEnabled = true;
}
private void OnTriggerEnter(Collider grounder)
{
if (grounder.tag == "Terrain")
{
groundContact = true;
}
}
private void OnTriggerExit(Collider grounder)
{
if (grounder.tag == "Terrain")
{
groundContact = false;
if (Physics.Raycast(mytransform.position, -Vector3.up, out var hitInfo, groundDistance) && hitInfo.collider.CompareTag("Terrain") && !isFootPrint)
{
ry = playerTransform.eulerAngles.y + 180f;
StartCoroutine(startFootPrint(hitInfo.point + offset, ry, reflected));
}
}
}
private IEnumerator startFootPrint(Vector3 position, float ry, Quaternion rotation)
{
GameObject gameObject = Object.Instantiate(footPrintPrefab);
if ((bool)gameObject)
{
if (ScriptsHandler.Instance.m_PlayerMain.m_underWaterlevel > 0f)
{
gameObject.GetComponent<Renderer>().material.SetColor("_Color", stepFootWedColor);
}
else
{
gameObject.GetComponent<Renderer>().material.SetColor("_Color", stepFootDirtyColor);
}
gameObject.transform.position = position;
gameObject.transform.rotation = rotation;
gameObject.transform.Rotate(0f, ry, 0f, Space.Self);
isFootPrint = true;
yield return new WaitForSeconds(0.5f);
isFootPrint = false;
}
}
private IEnumerator startFootParticles(Vector3 position, float ry, Quaternion rotation)
{
GameObject footPrint = Object.Instantiate(dustStep);
if ((bool)footPrint)
{
footPrint.transform.position = position;
footPrint.transform.rotation = rotation;
footPrint.GetComponent<ParticleSystem>().Play();
yield return new WaitForSeconds(5f);
footPrint.GetComponent<ParticleSystem>().Stop();
Object.Destroy(footPrint);
}
}
}