Beispiel #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);
            }
        }
Beispiel #2
0
        void PlayerMove(bool grounded, bool landed, bool fall)
        {
            // DEBUG
            if (Input.GetKey(KeyCode.Space))
            {
                LaunchCameraShake(0f, 0f, 0f);
            }

            Vector3 user_dir = new Vector3(Input.GetAxis("Horizontal"),
                                           0f,
                                           Input.GetAxis("Vertical"));

            bool  jump_input          = Input.GetButtonDown("AButton");
            bool  dodge_input         = Input.GetButtonDown("BButton");
            bool  aim                 = Input.GetAxis("L2") > 0.2f ? true : false;
            bool  hit                 = Input.GetButtonDown("XButton");
            bool  change_weapon_state = Input.GetButtonDown("YButton");
            bool  axe_action          = Input.GetButton("R1");
            bool  call_axe            = Input.GetButton("L1") && AxeState == AxeStates.AxeOut;
            float aim_inc             = Input.GetAxis("VerCam");
            float aim_rot             = Input.GetAxis("HorCam");

            intensity = Vector3.SqrMagnitude(user_dir);
            if (intensity < 0.2f * 0.2f)
            {
                user_dir = Vector3.zero;
            }

            movement_dir = CharacterMovement.ProjectInputOnPlane(user_dir, CurrentCamera);

            bool run_turn, run_stop;

            RunStopsLogic(out run_turn, out run_stop);

            SendTriggerToAnimator(jump_input, landed, fall, dodge_input, hit, run_turn, run_stop, change_weapon_state, call_axe);
            SendAnimatorBool(aim, axe_action);
            CharacterAimBehaviour(aim_inc);

            MoveLogic(movement_dir, intensity, grounded, aim_rot);
            ResetTriggers();
        }
Beispiel #3
0
        void Update()
        {
            bool grounded = CharacterMovement.CheckGrounded(AerialStateCheck, HeightCheck, ignore_layer: HitboxLayer);
            bool landed   = (!IsGrounded && grounded);
            bool fall     = (!grounded && IsGrounded);

            IsGrounded = grounded;

            if (Axe != null)
            {
                PlayerMove(grounded, landed, fall);
            }
            else
            {
                EnemyMove(grounded, landed, fall);
                if (CurrentState == CharacterState.executed)
                {
                    MoveLogic(Vector3.zero, 1f, false, 0f);
                }
            }
        }
Beispiel #4
0
 public void ExitDash()
 {
     CharacterMovement.RotateCharacter(transform, movement_dir, 1f, flat: true, instantaneous: true);
     // Debug.Break();
 }
Beispiel #5
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);
            }
        }