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(); }
private void Awake() { if (instance) { Destroy(this); } instance = this; }
/* * 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); }
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; }
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; }
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; }
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(); }
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; }