private void Awake() { manualInput = GetComponent <ManualInput>(); animationProgress = GetComponent <AnimationProgress>(); aiProgress = GetComponentInChildren <AIProgress>(); damageDetector = GetComponentInChildren <DamageDetector>(); boxCollider = GetComponent <BoxCollider>(); animator = GetComponentInChildren <Animator>(); obstacle = GetComponent <NavMeshObstacle>(); collisionSpheres = GetComponentInChildren <CollisionSpheres>(); collisionSpheres.owner = this; CollisionSpheres.SetupColliders(boxCollider, out float bottom, out float top, out float front, out float back, out float right, out float left); collisionSpheres.PlaceEdgeSphere(bottom, top, front, back, left, right); collisionSpheres.FindEveryChild(gameObject.transform); aiController = GetComponentInChildren <AIController>(); if (aiController == null) { if (obstacle != null) { obstacle.carving = true; } } RegisterCharacter(); }
private void ControlledMove(CharacterControl control, Animator animator, AnimatorStateInfo stateInfo) { CollisionSpheres collisionSpheres = control.collisionSpheres; if (control.moveRight) { if (!IsBlocked(control, speed, stateInfo)) { control.MoveForward(speed, speedGraph.Evaluate(stateInfo.normalizedTime)); } else { foreach (CharacterControl co in FindObjectOfType <CharacterManager>().characters) { foreach (GameObject o in collisionSpheres.frontSpheres) { if (Physics.Raycast(o.transform.position, o.transform.TransformDirection(Vector3.right), out RaycastHit hit, blockDistance)) { if (!control.GetComponent <ManualInput>().enabled) { float currentDistance = Vector3.Distance(control.transform.position, hit.transform.position); if (currentDistance < 2.0f) { while (IsBlocked(control, speed, stateInfo)) { Vector3 dist = control.transform.position - hit.transform.position; //control.transform.position += Vector3.SqrMagnitude(dist) * Time.deltaTime * Vector3.forward; control.RIGID_BODY.AddForce(control.transform.forward * Vector3.Magnitude(dist) * 100 * Time.deltaTime); break; } } } } } } } } if (control.moveLeft) { if (!IsBlocked(control, speed, stateInfo)) { control.MoveForward(speed, speedGraph.Evaluate(stateInfo.normalizedTime)); } else { foreach (CharacterControl co in FindObjectOfType <CharacterManager>().characters) { foreach (GameObject o in collisionSpheres.backSpheres) { if (Physics.Raycast(o.transform.position, o.transform.TransformDirection(-Vector3.right), out RaycastHit hit, blockDistance)) { if (!control.GetComponent <ManualInput>().enabled) { float currentDistance = Vector3.Distance(control.transform.position, hit.transform.position); if (currentDistance < 2.0f) { while (IsBlocked(control, speed, stateInfo)) { Vector3 dist = control.transform.position - hit.transform.position; //control.transform.position -= Vector3.SqrMagnitude(dist) * Time.deltaTime * Vector3.forward; control.RIGID_BODY.AddForce(control.transform.forward * Vector3.Magnitude(dist) * 100 * Time.deltaTime); break; } } } } } } } } if (control.moveUp) { if (!IsBlocked(control, speed, stateInfo)) { if (control.transform.rotation == Quaternion.Euler(0, 0, 0)) { control.transform.Translate(Vector3.forward * speed * Time.deltaTime); } else if (control.transform.rotation == Quaternion.Euler(0, 180, 0)) { control.transform.Translate(Vector3.forward * -speed * Time.deltaTime); } } else { if (control.transform.rotation == Quaternion.Euler(0, 0, 0)) { foreach (CharacterControl co in FindObjectOfType <CharacterManager>().characters) { foreach (GameObject o in collisionSpheres.forwardSpheres) { if (Physics.Raycast(o.transform.position, o.transform.TransformDirection(Vector3.forward), out RaycastHit hit, blockDistance)) { if (!control.GetComponent <ManualInput>().enabled) { //float currentDistance = Vector3.Distance(control.transform.position, hit.transform.position); //if (currentDistance < 2f) { Vector3 dist = control.transform.position - hit.transform.position; //control.RIGID_BODY.AddForce(control.transform.right * Vector3.Magnitude(dist) * 300 * Time.deltaTime); //control.transform.Translate(Vector3.right * Time.deltaTime * .35f); //Vector3.Magnitude(dist)); control.transform.position += Time.deltaTime * Vector3.right * Vector3.Magnitude(dist); //control.RIGID_BODY.MovePosition(control.transform.position + control.transform.right * Time.deltaTime * 30); //* Vector3.Magnitude(dist) * 60); //control.RIGID_BODY.velocity = control.transform.right * Time.deltaTime * Vector3.Magnitude(dist) * 300; break; } } } } } } else if (control.transform.rotation == Quaternion.Euler(0, 180, 0)) { foreach (CharacterControl co in FindObjectOfType <CharacterManager>().characters) { foreach (GameObject o in collisionSpheres.backwardSpheres) { if (Physics.Raycast(o.transform.position, o.transform.TransformDirection(Vector3.forward), out RaycastHit hit, blockDistance)) { if (!control.GetComponent <ManualInput>().enabled) { //float currentDistance = Vector3.Distance(control.transform.position, hit.transform.position); //if (currentDistance < 2f) { //while (IsBlocked(control, speed, stateInfo)) { Vector3 dist = control.transform.position - hit.transform.position; //control.RIGID_BODY.AddForce(control.transform.right * Vector3.Magnitude(dist) * -300 * Time.deltaTime); control.transform.position -= Vector3.Magnitude(dist) * Time.deltaTime * Vector3.right; break; } } } } } } } } } if (control.moveDown) { if (!IsBlocked(control, speed, stateInfo)) { if (control.transform.rotation == Quaternion.Euler(0, 0, 0)) { control.transform.Translate(Vector3.forward * -speed * Time.deltaTime); } else if (control.transform.rotation == Quaternion.Euler(0, 180, 0)) { control.transform.Translate(Vector3.forward * speed * Time.deltaTime); } } else { if (control.transform.rotation == Quaternion.Euler(0, 0, 0)) { foreach (CharacterControl co in FindObjectOfType <CharacterManager>().characters) { foreach (GameObject o in collisionSpheres.backwardSpheres) { if (Physics.Raycast(o.transform.position, o.transform.TransformDirection(-Vector3.forward), out RaycastHit hit, blockDistance)) { if (!control.GetComponent <ManualInput>().enabled) { //float currentDistance = Vector3.Distance(control.transform.position, hit.transform.position); //if (currentDistance < 2f) { //while (IsBlocked(control, speed, stateInfo)) { Vector3 dist = control.transform.position - hit.transform.position; //control.RIGID_BODY.AddForce(control.transform.right * Vector3.Magnitude(dist) * 300 * Time.deltaTime); control.transform.position += Vector3.Magnitude(dist) * Time.deltaTime * Vector3.right; break; } } } } } } } else if (control.transform.rotation == Quaternion.Euler(0, 180, 0)) { foreach (CharacterControl co in FindObjectOfType <CharacterManager>().characters) { foreach (GameObject o in collisionSpheres.forwardSpheres) { if (Physics.Raycast(o.transform.position, o.transform.TransformDirection(-Vector3.forward), out RaycastHit hit, blockDistance)) { if (!control.GetComponent <ManualInput>().enabled) { //float currentDistance = Vector3.Distance(control.transform.position, hit.transform.position); //if (currentDistance < 2f) { //while (IsBlocked(control, speed, stateInfo)) { Vector3 dist = control.transform.position - hit.transform.position; control.transform.position -= Vector3.Magnitude(dist) * Time.deltaTime * Vector3.right; //control.RIGID_BODY.AddForce(control.transform.right * Vector3.Magnitude(dist) * -300 * Time.deltaTime); break; } } } } } } } } } CheckTurn(control); }
private void Awake() { damageTaken = 0; control = GetComponent <CharacterControl>(); collisionSpheres = GetComponentInChildren <CollisionSpheres>(); }