protected override void UpdateFollowState() { #region Action MoveControl.Move(PlayerTarget.position); MoveControl.LookAt(PlayerTarget.position); aniControlBoss.SpeedPercent = MoveControl.Magnitude / 2; #endregion #region Transtions float pointDistance = Distance(MonitoringPoint.position, transform.position); if (pointDistance > RadiusLimitMonitoringPoint) { // Personagem muito longe do ponto de origem // EnterState(TypeStateCharacter.Back); return; } float playerDistance = Distance(PlayerTarget.position, transform.position); if (playerDistance > RadiusPlayerDistance) { // Detectou o jogador // EnterState(TypeStateCharacter.Back); return; } if (playerDistance <= RadiusAttack) { // Detectou o jogador e está em área de ataque // //EnterState(TypeStateCharacter.Attack); AttacksVerification(); return; } #endregion }
protected override void EnterSpecialAttack2State() { aniControlBoss.IsSpecialAttack2 = true; MoveControl.Stop(); MoveControl.LookAt(PlayerTarget.position); //MoveControl.Move(PlayerTarget.position); }
protected override void UpdateBackState() { #region Action MoveControl.Move(MonitoringPoint.position); MoveControl.LookAt(MonitoringPoint.position); aniControlBoss.SpeedPercent = MoveControl.Magnitude / 2; #endregion #region Transtions float pointDistance = Distance(MonitoringPoint.position, transform.position); //Debug.Log("pointDistance: " + pointDistance); if (pointDistance <= RadiusMonitoringPoint) { // Chegou a ponto de origem // // radiusMonitoringPoint precisa ser igual ao navAgent.StoppingDistance // EnterState(TypeStateCharacter.Move); return; } #endregion }
protected override void UpdateSpecialAttack1MidState() { #region Action Old //// Olhar para o player // //MoveControl.Move(PlayerTarget.position); //MoveControl.LookAt(PlayerTarget.position); //aniControlBoss.SpeedPercent = MoveControl.Magnitude / 2; #endregion #region Transtions Old //timer += Time.deltaTime; //if (timer >= 5) //{ // timer = 0; // EnterState(TypeStateCharacter.SpecialAttack1End); // return; //} // Enter // #endregion #region Action MoveControl.Move(ListWayPoints[ActualWp].position); MoveControl.LookAt(ListWayPoints[ActualWp].position); //aniControlBoss.SpeedPercent = MoveControl.Magnitude / 2; #endregion #region Transtions //float playerDistance = Distance(playerTarget.position, transform.position); //if (playerDistance <= radiusPlayerDistance) //{ // // Detectou o jogador // // EnterState(TypeStateCharacter.Follow); // return; //} float pointDistance = Distance(ListWayPoints[ActualWp].position, transform.position); if (pointDistance <= RadiusMonitoringPoint) { // Chegou no destino // //EnterState(TypeStateCharacter.Move); //return; if (ActualWp + 1 >= ListWayPoints.Count) { ActualWp = 0; } else { ActualWp++; } if (!isStartPointAttack) { if (ListWayPoints[ActualWp].position.Equals(startPointAttack.position)) { isStartPointAttack = true; } } else { if (ListWayPoints[ActualWp].position.Equals(startPointAttack.position)) { EnterState(TypeStateCharacter.SpecialAttack1End); } } } #endregion // Leave // //ActualWp++; //if (ActualWp >= ListWayPoints.Count) //{ // ActualWp = 0; // if (!IsPatrolStart) // IsPatrolCompleted = true; //} }
protected override void EnterAttackState() { aniControlBoss.IsAttack = true; MoveControl.Stop(); MoveControl.LookAt(PlayerTarget.position); }