aboutsummaryrefslogtreecommitdiff
path: root/JamTools/Assets/JamTools/Scripts/Character/FPSCharacterController/WallChecker.cs
diff options
context:
space:
mode:
Diffstat (limited to 'JamTools/Assets/JamTools/Scripts/Character/FPSCharacterController/WallChecker.cs')
-rw-r--r--JamTools/Assets/JamTools/Scripts/Character/FPSCharacterController/WallChecker.cs104
1 files changed, 66 insertions, 38 deletions
diff --git a/JamTools/Assets/JamTools/Scripts/Character/FPSCharacterController/WallChecker.cs b/JamTools/Assets/JamTools/Scripts/Character/FPSCharacterController/WallChecker.cs
index 946c326..8137670 100644
--- a/JamTools/Assets/JamTools/Scripts/Character/FPSCharacterController/WallChecker.cs
+++ b/JamTools/Assets/JamTools/Scripts/Character/FPSCharacterController/WallChecker.cs
@@ -2,45 +2,73 @@ using System.Collections;
using System.Collections.Generic;
using UnityEngine;
-public class WallChecker : MonoBehaviour
+namespace JamTools
{
- private bool m_IsOnWall;
- public bool IsOnWall
- {
- get
- {
- return m_IsOnWall;
- }
- }
-
- private List<Collider> m_Colliders = new List<Collider>();
-
- private void Update()
- {
- if (m_IsOnWall && m_Colliders.Count == 0)
- {
- m_IsOnWall = false;
- }
- }
-
- private void OnTriggerEnter(Collider other)
- {
- m_IsOnWall = true;
-
- m_Colliders.Add(other);
- }
-
- private void OnTriggerStay(Collider other)
- {
- }
-
- private void OnTriggerExit(Collider other)
- {
- if(m_Colliders.Contains(other))
- {
- m_Colliders.Remove(other);
- }
- }
+
+ public class WallChecker : MonoBehaviour
+ {
+
+ private bool m_IsOnWall;
+ public bool IsOnWall
+ {
+ get
+ {
+ return m_IsOnWall;
+ }
+ }
+
+ private List<Collider> m_Colliders = new List<Collider>();
+
+ private void Update()
+ {
+ if (m_IsOnWall && m_Colliders.Count == 0)
+ {
+ m_IsOnWall = false;
+ }
+ }
+
+ public bool GetCollisionPoint(out Vector3 point)
+ {
+ bool result = false;
+ point = Vector3.zero;
+ if (m_Colliders.Count > 0)
+ {
+ float dist = 100f;
+ for (int i = 0; i < m_Colliders.Count; ++i)
+ {
+ Collider col = m_Colliders[i];
+ Vector3 p = ColliderUtility.FindClosestPoint(col, transform.position);
+ if (Vector3.Distance(p, transform.position) <= dist)
+ {
+ dist = Vector3.Distance(p, transform.position);
+ point = p;
+ result = true;
+ }
+ }
+ }
+ return result;
+ }
+
+ private void OnTriggerEnter(Collider other)
+ {
+ m_IsOnWall = true;
+
+ m_Colliders.Add(other);
+ }
+
+ private void OnTriggerStay(Collider other)
+ {
+ }
+
+ private void OnTriggerExit(Collider other)
+ {
+ if (m_Colliders.Contains(other))
+ {
+ m_Colliders.Remove(other);
+ }
+ }
+
+ }
}