void EnterSlashing() { Time.timeScale = slash_time_scale; CM_aiming_cam.gameObject.SetActive(false); CM_slashing_cam.gameObject.SetActive(true); Slash_state = Slash_states.Slash; }
void EnterAiming() { Slash_state = Slash_states.Aim; CM_aiming_cam.gameObject.SetActive(true); CM_aiming_cam.m_YAxis.Value = 0.35f; CM_topdown_cam.gameObject.SetActive(false); topdown_locomotion.enabled = false; player_animator.SetTrigger("Sheath"); StartCoroutine(AimTransition()); RechargeSharpness(); }
private void CancelSlash() { if (Target != null) { //Reset Target ToggleTargetOutline(false); Target = null; } //Reset Camera to topdown thirdperson_locomotion.enabled = false; thirdperson_locomotion.Can_control = false; Slash_state = Slash_states.Move; Time.timeScale = 1.0f; CM_slashing_cam.gameObject.SetActive(false); CM_aiming_cam.gameObject.SetActive(false); CM_topdown_cam.gameObject.SetActive(true); topdown_locomotion.enabled = true; player_animator.SetTrigger("Draw"); }
IEnumerator UnleashSlash(Vector2 input_direction) { Vector3 target_vector; Vector3 dash_vector; Enemy_AI_Control enemy_script; bool deflected; float slash_direction; deflected = false; thirdperson_locomotion.enabled = false; thirdperson_locomotion.Can_control = false; Slash_state = Slash_states.Move; Time.timeScale = 0.1f; //Calculate unleash direction slash_direction = Vector2.SignedAngle(Vector2.up, input_direction); player_animator.SetFloat("Slash_direction", slash_direction / 180f); //Degree to normalized //Boxcast to check enenmy bodyparts in the slash trajectory bodyparts_hits = Physics.BoxCastAll(main_cam.transform.position + main_cam.transform.forward * bodyparts_cast_offset, bodyparts_cast_size, main_cam.transform.forward, Quaternion.AngleAxis(slash_direction, main_cam.transform.forward), aim_cast_distance, bodyparts_layerMask); DEBUG_BOXCAST_BOX.transform.position = main_cam.transform.position + main_cam.transform.forward * bodyparts_cast_offset; DEBUG_BOXCAST_BOX.transform.localScale = bodyparts_cast_size; DEBUG_BOXCAST_BOX.transform.rotation = Quaternion.AngleAxis(slash_direction, main_cam.transform.forward); foreach (RaycastHit part in bodyparts_hits) { //part.collider.GetComponentInChildren<MeshRenderer>().material.EnableKeyword ("_EMISSION"); //Debug.Log(part.collider.gameObject.name); } if (Target != null) //When aiming at a target //Calculate target direction vector { target_vector = Target.transform.position - this.transform.position; //Calculate dash vector dash_vector = target_vector; dash_vector.y = 0; dash_vector.Normalize(); CM_slashing_cam.Follow = null; //Dash in front of the enemy Tween myTween = this.transform.DOMove(Target.transform.position + dash_vector * dash_deflected_offset, (target_vector.magnitude + dash_deflected_offset) / dash_speed).SetUpdate(true);//TODO actually calculate the dash duration based on dash speed yield return(myTween.WaitForCompletion()); //Play slash animation player_animator.SetTrigger("Unleash"); //Apply Damage if (Target.tag == "Enemy") { enemy_script = Target.GetComponent <Enemy_AI_Control> (); if (enemy_script.Attack_charging) { //Target.SendMessage ("ApplyDamage", slash_damage); foreach (RaycastHit part in bodyparts_hits) { Debug.Log(part.collider.gameObject.name); if (!part.collider.gameObject.GetComponent <Bodypart_Damage_Manager> ().isSteel) { part.collider.gameObject.SendMessage("ApplyDamage", slash_damage); Debug.Log("Damage"); } else { deflected = true; Debug.Log("Steel"); break; } } } else { deflected = true; } } if (!deflected) { //Not deflected dash_vector.Normalize(); dash_vector *= dash_offset; target_vector = Target.transform.position - this.transform.position; myTween = this.transform.DOMove(Target.transform.position + dash_vector, (target_vector + dash_vector).magnitude / dash_speed).SetUpdate(true); yield return(myTween.WaitForCompletion()); } else { //Deflected player_animator.SetTrigger("Deflected"); } } else //When aiming at no targets //Play slash animation { player_animator.SetTrigger("Unleash"); } yield return(slash_wait); CM_slashing_cam.Follow = this.gameObject.transform; Time.timeScale = 1f; //Reset Target ToggleTargetOutline(false); Target = null; if (Input.GetButton("Charge")) { EnterAiming(); } else { CancelSlash(); } //Reset Camera to topdown }