using System; using UnityEngine; public class LevelMapper : MonoBehaviour { private CharacterData data; private PlayerJump jump; private PlayerMovement movement; private bool isJumping; private bool isRunning; public GameObject node; public GameObject line; public GameObject line2; private Vector3 jumpPos; private Vector3 landPos; private Vector3 startRunPos; private Vector3 leaveGroundPos; private void Start() { data = GetComponentInParent(); jump = data.jump; movement = data.movement; PlayerJump playerJump = jump; playerJump.JumpAction = (Action)Delegate.Combine(playerJump.JumpAction, new Action(Jump)); CharacterData characterData = data; characterData.TouchGroundAction = (Action)Delegate.Combine(characterData.TouchGroundAction, new Action(Ground)); CharacterData characterData2 = data; characterData2.TouchWallAction = (Action)Delegate.Combine(characterData2.TouchWallAction, new Action(Wall)); } private void Update() { if (!data.isGrounded) { LeaveGround(); } } private void Jump() { isJumping = true; jumpPos = base.transform.position; } private void Wall(float sinceWall, Vector3 pos, Vector3 normal) { if (!data.isWallGrab) { if (data.sinceJump < 0.1f) { isJumping = false; } else { Land(); } } } private void Ground(float sinceGround, Vector3 pos, Vector3 groundNormal, Transform groundTransform = null) { if (!isRunning) { startRunPos = pos; isRunning = true; } if (!data.isGrounded) { if (data.sinceJump < 0.1f) { isJumping = false; } else { Land(); } } } private void Land() { landPos = base.transform.position; if (Vector3.Distance(landPos, jumpPos) > 3f && isJumping) { SaveJump(); } isJumping = false; } private void LeaveGround() { if (isRunning) { leaveGroundPos = data.groundPos; SaveRun(); isRunning = false; } } private void SaveJump() { UnityEngine.Object.Instantiate(node, jumpPos, Quaternion.identity).GetComponent().color = Color.green; UnityEngine.Object.Instantiate(node, landPos, Quaternion.identity).GetComponent().color = Color.red; LineRenderer component = UnityEngine.Object.Instantiate(line, Vector3.zero, Quaternion.identity).GetComponent(); component.SetPosition(0, jumpPos); component.SetPosition(1, landPos); } private void SaveRun() { if (!(Vector3.Distance(startRunPos, jumpPos) < 2f)) { UnityEngine.Object.Instantiate(node, startRunPos, Quaternion.identity).GetComponent().color = Color.blue; UnityEngine.Object.Instantiate(node, leaveGroundPos, Quaternion.identity).GetComponent().color = Color.blue; LineRenderer component = UnityEngine.Object.Instantiate(line2, Vector3.zero, Quaternion.identity).GetComponent(); component.SetPosition(0, startRunPos); component.SetPosition(1, leaveGroundPos); } } }