示例#1
0
    private void DoAttack()
    {
        currentAttackGrade = BeatManager.GetGrade();
        SetupVFX();
        OnAttack?.Invoke(currentAttackGrade);
        if (currentAttackGrade != RhythmGrade.Miss)
        {
            SyncPowerManager.KeepTheBeatGoing();
        }
        else
        {
            SyncPowerManager.Miss();
        }

        player.OnAttackedPressed?.Invoke();
        PlayerAnimator.SetTrigger(CurrentAttack.AttackTag);
        RuntimeManager.PlayOneShotAttached(CurrentAttack.AttackSFX, player.gameObject);
        timer = 0;
        hitObjects.Clear();
        timeOfLastAttack = Time.time + CurrentAttack.Clip.length;

        if (DirectionInput.magnitude > 0)
        {
            PlayerAnimator.transform.LookAt(PlayerAnimator.transform.position + Vector3.ProjectOnPlane(GetInputRelativeToCamera(), Vector3.up));
        }
        AutoTargeting();
    }
示例#2
0
 private void Awake()
 {
     if (instance)
     {
         Destroy(this);
     }
     instance = this;
 }
示例#3
0
 /*
  * public Vector3 ApplyNormalForce(Vector3 vector, float skinWidth = 0.05f) {
  *  Vector3 point1 = transform.position + Collider.radius * Vector3.up;
  *  Vector3 point2 = transform.position + (Collider.height - Collider.radius) * Vector3.up;
  *
  *  int counter = 0;
  *  RaycastHit hit = new RaycastHit();
  *  Physics.CapsuleCast(point1, point2, Collider.radius, vector.normalized, out hit, 1000, MovementMask);
  *  while (hit.collider != null && counter++ < 100) {
  *      float distanceToCorrect = skinWidth / Vector3.Dot(vector.normalized, hit.normal);
  *      float distanceToMove = hit.distance + distanceToCorrect;
  *
  *      if (distanceToMove > vector.magnitude * Time.deltaTime) break;
  *      if (distanceToMove > 0.0f) transform.position += vector.normalized * distanceToMove;
  *
  *      float dot = Vector3.Dot(hit.normal, vector);
  *      vector -= hit.normal * (dot < 0.0f ? dot : 0.0f);
  *      Physics.CapsuleCast(point1, point2, Collider.radius, vector.normalized, out hit, 1000, MovementMask);
  *
  *  }
  *  return vector;
  * } */
 public bool CheckSyncPower()
 {
     if (Input.GetButtonDown("Super") && SyncPowerManager.CurrentSyncProcent() >= movementMachine.GetState <PlayerSuperState>().Supers[0].SyncPercentage)
     {
         movementMachine.TransitionTo <PlayerSuperState>();
         return(true);
     }
     return(false);
 }
示例#4
0
    public override void StateUpdate()
    {
        rend.material.SetFloat("Vector1_6DD9F6DE", (1 - (respawnTimer / clip.length)));


        if (respawnTimer > clip.length)
        {
            TransitionTo <PlayerSpawningState>();
            snapIntensity.setValue(0f);
            StreakCounterUI.DeathResetStreak();
            SyncPowerManager.DeathResetSync();
        }
        respawnTimer += Time.deltaTime;
    }
示例#5
0
 public override void Enter()
 {
     skipBeats = 0;
     CameraController.Instance.ChangeStateToIdle();
     toBeDisabled.Clear();
     BeatManager.OnBeat += EnterOnBeat;
     for (int i = Supers.Length - 1; i <= 0; i--)
     {
         if (SyncPowerManager.CurrentSyncProcent() >= Supers[i].SyncPercentage)
         {
             index = i;
             SyncPowerManager.UseSyncPower(Supers[i].SyncPercentage);
             break;
         }
     }
     Velocity = Vector3.zero;
 }
示例#6
0
    private void HighruleSwordCollision()
    {
        bool newhit = false;

        RaycastHit[] hits = Physics.SphereCastAll(Position, CurrentAttacks[AttackIndex].Radius, Vector3.up, 0.01f,
                                                  AttackLayer);
        Vector3 toTarget = Vector3.zero;


        foreach (RaycastHit raycastHit in hits)
        {
            if (hitObjects.Contains(raycastHit.transform.root) || currentAttackGrade == RhythmGrade.Miss && MissFactor == 0 || raycastHit.transform.root.GetComponent <IDamageable>() == null)
            {
                continue;
            }
            toTarget   = raycastHit.transform.position;
            toTarget.y = Position.y;
            toTarget  -= Position;
            bool isClose = toTarget.magnitude <= CurrentAttack.CloseAttackRange;
            toTarget = toTarget.normalized;
            if (Vector3.Angle(toTarget, Quaternion.Euler(0, isClose ? CurrentAttack.CloseAttackAngleOffset : CurrentAttack.AngleOffset, 0) * PlayerAnimator.transform.forward) > (isClose ? CurrentAttack.CloseAttackAngle : CurrentAttacks[AttackIndex].Angle) * 0.5f)
            {
                continue;
            }
            hitObjects.Add(raycastHit.transform.root);
            player.OnAttackHitt?.Invoke(raycastHit.transform.root.GetComponent <IDamageable>());
            CurrentAttacks[AttackIndex].HitParticle.Play(raycastHit.collider.ClosestPoint(Position + PlayerCollider.height * Vector3.up), Quaternion.LookRotation((raycastHit.transform.root.position - Position).normalized));
            RuntimeManager.PlayOneShotAttached(CurrentAttacks[AttackIndex].HitSFX, player.gameObject);
            raycastHit.transform.root.GetComponent <IDamageable>()?.TakeDamage(CurrentAttacks[AttackIndex].Damage, currentAttackGrade, PlayerAnimator.transform, MissFactor);
            StreakCounterUI.AddHit(currentAttackGrade);
            newhit = true;
            Quaternion rot = Quaternion.LookRotation(player.transform.InverseTransformDirection(Vector3.left * CurrentAttacks[AttackIndex].AngleOffset), Vector3.up);
            bloodSplat.Play(raycastHit.collider.ClosestPoint(Position + PlayerCollider.height * Vector3.up), rot);
            AttackFreeze();
        }

        if (newhit)
        {
            //Can we do this only once per attack on enemy?
            SyncPowerManager.AddSyncPower(CurrentAttacks[AttackIndex].Damage);
            StreakCounterUI.AddMultiplier(currentAttackGrade);
        }


        swordLastPos = SwordTransform.position;
    }
示例#7
0
    public override void Enter()
    {
        if (!isOffColldown())
        {
            TransitionTo <PlayerIdleState>();
            return;
        }

        if (BeatManager.GetGrade() != RhythmGrade.Miss)
        {
            SyncPowerManager.KeepTheBeatGoing();
        }

        StreakCounterUI.DashTimerReset();
        RuntimeManager.PlayOneShot(DashSFX);
        normalDash = false;
        timer      = 0;
        hitObjects.Clear();
        ogInput = GetInputRelativeToCamera();
        Debug.Log(ogInput);
        if (ogInput.magnitude <= 0.01f)
        {
            ogInput = PlayerAnimator.transform.forward;
            Debug.Log("Small man");
        }
        ogInput = ogInput.normalized;

        PlayerAnimator.SetBool("inDash", true);

        for (int i = numDashes - 1; i >= 0; i--)
        {
            if (cooldowns[i] > dashCD)
            {
                normalDash   = true;
                cooldowns[i] = 0f;
                break;
            }
        }

        OnDash?.Invoke();
        dashVFX.enabled = true;
        dashChargeVFX.Play();
    }
示例#8
0
    public void ResetRound()
    {
        AiController[] allEnemies = FindObjectsOfType <AiController>();

        foreach (AiController controller in allEnemies)
        {
            controller.gameObject.SetActive(false);
        }

        timer  = 0;
        rIndex = -1;
        sIndex = 0;
        alive  = 0;

        SyncPowerManager.SetSyncPower(0f);
        GameObject.FindGameObjectWithTag("Player").GetComponent <PlayerEngine>().ResetPlayer();
        BeatManager.Instance.Setup();
        currentState = State.NewRound;
    }