using System.Collections; using System.Collections.Generic; using UnityEngine; public class GroundManager : MonoBehaviour { public PhysicMaterial m_Floor; public PhysicMaterial m_Agent; public float m_Timer; public float m_TimerTray; public bool m_HasChanged; // Start is called before the first frame update private void OnEnable() { m_Timer = 5f; m_HasChanged = false; m_Floor.staticFriction = 1000f; m_Floor.dynamicFriction = 1000f; m_Agent.staticFriction = 2f; m_Agent.dynamicFriction = 2f; } void Start() { if (m_Floor == null || m_Agent == null) Debug.Log($"Physics Material of Floor/Agent was never set in FloorManager"); } public void ActivateSlipperySurface() { if (!m_HasChanged) Debug.Log($"Starting Cortouine on Banana for {m_Timer} seconds."); StartCoroutine(ChangeSurface()); } public void ActivateSlipperyChair() { if (!m_HasChanged) Debug.Log($"Starting Cortouine on Chair for {m_Timer} seconds."); StartCoroutine(ChangeChair()); } public void ActivateSlipperyTray() { if (!m_HasChanged) Debug.Log($"Starting Cortouine on Tray for {m_TimerTray} seconds."); StartCoroutine(IkeaTrayAttach()); } IEnumerator ChangeSurface() { m_HasChanged = true; m_Floor.staticFriction = 0f; m_Floor.dynamicFriction = 0f; m_Agent.staticFriction = 0f; m_Agent.dynamicFriction = 0f; yield return new WaitForSeconds(m_Timer); m_Floor.staticFriction = 1000f; m_Floor.dynamicFriction = 1000f; m_Agent.staticFriction = 2f; m_Agent.dynamicFriction = 2f; m_HasChanged = false; Debug.Log($"Coroutine has ended for Banana"); } IEnumerator ChangeChair() { m_HasChanged = true; yield return new WaitForSeconds(m_Timer / 2); m_Agent.staticFriction = 0f; m_Agent.dynamicFriction = 0f; yield return new WaitForSeconds(m_Timer / 2); m_Agent.staticFriction = 2f; m_Agent.dynamicFriction = 2f; m_HasChanged = false; Debug.Log($"Coroutine has ended for Banana"); } IEnumerator IkeaTrayAttach() { m_HasChanged = true; m_Floor.staticFriction = 0f; m_Floor.dynamicFriction = 0f; m_Agent.staticFriction = 0f; m_Agent.dynamicFriction = 0f; yield return new WaitForSeconds(m_TimerTray); m_Floor.staticFriction = 1000f; m_Floor.dynamicFriction = 1000f; m_Agent.staticFriction = 2f; m_Agent.dynamicFriction = 2f; Debug.Log($"Coroutine has ended for Tray"); } }