Exemple #1
0
 void EnterSlashing()
 {
     Time.timeScale = slash_time_scale;
     CM_aiming_cam.gameObject.SetActive(false);
     CM_slashing_cam.gameObject.SetActive(true);
     Slash_state = Slash_states.Slash;
 }
Exemple #2
0
 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();
 }
Exemple #3
0
    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");
    }
Exemple #4
0
    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
    }