예제 #1
0
 private void Awake()
 {
     if (instance)
     {
         Destroy(this);
     }
     instance = this;
 }
예제 #2
0
 public override void Enter()
 {
     RuntimeManager.PlayOneShotAttached(PlayerDeathSFX, player.gameObject);
     snapIntensity.setValue(100f);
     PlayerAnimator.SetFloat("Velocity", 0);
     PlayerAnimator.SetTrigger("Death");
     Velocity = Vector3.zero;
     PlayerAnimator.SetTrigger(DeathAnimationTag);
     respawnTimer = 0f;
     player.OnPlayerDeath?.Invoke();
     StreakCounterUI.CollectDeath();
 }
예제 #3
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;
    }
예제 #4
0
    private void AddPlayerScore(ref Save[] saves)
    {
        playerSave.name  = "Insert your name";
        playerSave.value = StreakCounterUI.GetHighScore();
        int savesLength = saves.Length + 1;

        Save[] newSave = new Save[savesLength + 1];
        for (int i = 0; i < savesLength - 1; i++)
        {
            newSave[i] = saves[i];
        }
        newSave[savesLength - 1] = playerSave;
        saves = newSave;
    }
예제 #5
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;
    }
예제 #6
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();
    }
예제 #7
0
 private void Update()
 {
     _vfx.SetFloat("BeatTime", _beatCurve.Evaluate(BeatManager.GetTimeToQuarterNote()));
     _vfx.SetFloat("Sync Intensity/Performance", StreakCounterUI.GetCurrentStreakPercentage());
 }