void EnemyMove(bool grounded, bool landed, bool fall) { Vector3 mvt = Vector3.zero; bool dodge_input = false; bool sprint_input = false; bool sprint_attack = false; bool walk_around = false; bool hit = false; EnemyInput(out mvt, out dodge_input, out sprint_input, out sprint_attack, out walk_around, out hit); float enemy_mvt_intensity = Vector3.SqrMagnitude(mvt); SendTriggerToAnimator(false, landed, fall, dodge_input, false, false, false, false, false); if (sprint_input) { anim_control.Launch("sprint_attack"); } if (sprint_attack) { anim_control.BoolControl("in_range", true); } if (walk_around) { anim_control.Launch("walk_around"); } if (hit) { if (CurrentState == CharacterState.hit) { anim_control.HitAnimation("follow"); } else { anim_control.HitAnimation("hit"); } } if (GetComponent <EnemyAI>().IsWalkAround()) { Vector3 look_at_ennemy = GetComponent <EnemyAI>().GetLookDirection(); CharacterMovement.MoveCharacter(controller, transform, mvt, intensity: 1f, ref current_horizontal_speed, GroundSpeed, Acceleration, Decceleration, ref current_vertical_speed, JumpSpeed, GroundedGravity, AimAerialGravity, MaxFallSpeed, grounded, jump_trigger, RotationSpeed, false, face_direction: look_at_ennemy); } else { MoveLogic(mvt, enemy_mvt_intensity > 0.2f * 0.2f ? Mathf.Clamp01(enemy_mvt_intensity) : 0f, grounded, 0f); } }
void MoveLogic(Vector3 mvt_dir, float strengh, bool grounded, float aim_rot) { if (CurrentState == CharacterState.normal) { float current_rot_speed = RotationSpeed; if (MoveState == MovingState.normal) { float a = 0f; } else if (MoveState == MovingState.turn) { current_horizontal_speed = Mathf.MoveTowards(current_horizontal_speed, 0f, 5f * Time.deltaTime); strengh = 1f; // current_rot_speed *= 0.1f; current_horizontal_speed = 0f; } else if (MoveState == MovingState.stop) { strengh = 0f; } else { // Debug.Break(); } CharacterMovement.MoveCharacter(controller, transform, mvt_dir, strengh, ref current_horizontal_speed, GroundSpeed, Acceleration, Decceleration, ref current_vertical_speed, JumpSpeed, GroundedGravity, AirborneGravity, MaxFallSpeed, grounded, jump_trigger, current_rot_speed, true, Vector3.zero); if (AllowTilt) { CharacterMovement.UpdateTilt(transform, mvt_dir, strengh, ref current_tilt_value, TiltMaxRotation, TiltLerpSpeed); CharacterMovement.TiltCharacter(TiltTarget, transform, current_tilt_value, initial_tilt_rotation, TiltMaxAngle, Vector3.forward); } } else if (CurrentState == CharacterState.dodge) { float dodge_accel, dodge_decel, dodge_strengh, dodge_intensity; if (UseImpulseForDodge) { dodge_intensity = CharacterImpulse.Step() ? 1f : 0f; dodge_accel = CharacterImpulse.Accel; dodge_decel = CharacterImpulse.Deccel; dodge_strengh = CharacterImpulse.Strengh; // Debug.Log("using impulse: " + dodge_intensity.ToString() + "," + dodge_accel.ToString() + "," + mvt_dir.ToString() + "," + dodge_strengh.ToString()); } else { dodge_accel = DodgeAcceleration; dodge_decel = Decceleration; dodge_strengh = DodgeStrengh; dodge_intensity = 1f; } CharacterMovement.MoveCharacter(controller, transform, mvt_dir, intensity: dodge_intensity, ref current_horizontal_speed, dodge_strengh, dodge_accel, dodge_decel, ref current_vertical_speed, JumpSpeed, GroundedGravity, AirborneGravity, MaxFallSpeed, true, false, rotation_speed: DodgeRotationSpeed, do_rotate: FaceDodgeDirection, Vector3.zero); // Debug.Log("DODGE FOR " + gameObject.name + " Vec " + mvt_dir.ToString()); // if(AllowTilt) // RESET TILT VALUE // CharacterMovement.TiltCharacter(transform, transform.forward, initial_tilt_rotation, // 60f, TiltMaxAngle, transform.forward, // TiltLerpSpeed * 2f, ref current_tilt_value, intensity, lerp:true); } else if (CurrentState == CharacterState.aim) { // Vector3 look_at_ennemy = Ennemy.position - transform.position; Vector3 look_at_ennemy = Quaternion.AngleAxis(aim_rot * AimRotationSpeed * Time.deltaTime, Vector3.up) * transform.forward; // Vector3 look_at_ennemy = Vector3.ProjectOnPlane(Camera.main.transform.forward, Vector3.up); //transform.forward; // float angle_lookat = Vector3.SignedAngle(look_at_ennemy, transform.forward, Vector3.up); // look_at_ennemy = Mathf.Abs(angle_lookat) < 10f ? transform.forward : look_at_ennemy; // TESTING TOLERANCE OF 5 DEGREES // Debug.DrawRay(transform.position, Vector3.ProjectOnPlane(transform.forward, Vector3.up), Color.blue, 1f); // Debug.DrawRay(transform.position, Vector3.ProjectOnPlane(Camera.main.transform.forward, Vector3.up), Color.red, 1f); CharacterMovement.MoveCharacter(controller, transform, mvt_dir, intensity: strengh, ref current_horizontal_speed, GroundSpeed, AimAcceleration, Decceleration, ref current_vertical_speed, JumpSpeed, GroundedGravity, AimAerialGravity, MaxFallSpeed, grounded, jump_trigger, RotationSpeed, false, face_direction: look_at_ennemy); } else if (CurrentState == CharacterState.hit) { mvt_dir = CharacterImpulse.Direction; strengh = CharacterImpulse.Step() ? 1f : 0f; CharacterMovement.MoveCharacter(controller, transform, mvt_dir, intensity: strengh, ref current_horizontal_speed, CharacterImpulse.Strengh, CharacterImpulse.Accel, CharacterImpulse.Deccel, ref current_vertical_speed, JumpSpeed, GroundedGravity, AirborneGravity, MaxFallSpeed, grounded, jump_trigger, 0f, true, Vector3.zero); } else if (CurrentState == CharacterState.cinematic) { // PLACEHOLDER. SHOULD BE SET WITHIN MOVECHARACTER CLASS transform.position = Vector3.MoveTowards(transform.position, CinematicTargetPosition, Time.deltaTime * CinematicMaxMoveSpeed); transform.LookAt(ExecTarget.gameObject.transform.position); } else if (CurrentState == CharacterState.executed) { // Debug.Log("Called in executed state" + ExecutionAcceleration.ToString() + "," + ExecutionDecceleration.ToString() + "," + // current_horizontal_speed.ToString() + "," + ExecutionProjectionForce.ToString() + "," + strengh.ToString()); CharacterMovement.MoveCharacter(controller, transform, transform.rotation * ExecutionProjectionDirection, intensity: strengh, ref current_horizontal_speed, ExecutionProjectionForce, accel: Decceleration, decel: ExecutionAcceleration, ref current_vertical_speed, 0f, GroundedGravity, AirborneGravity, MaxFallSpeed, grounded, false, rotation_speed: 0f, do_rotate: false, face_direction: Vector3.zero); } }