Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
        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);
            }
        }