Beispiel #1
0
        private void FixedUpdate()
        {
            if (TheGame.IsGamePaused())
            {
                return;
            }

            if (dead)
            {
                return;
            }

            Vector2 dist_vect = (current_target - rigid.position);

            move_vect = dist_vect.normalized * move_speed * current_mult * Mathf.Min(dist_vect.magnitude, 1f);

            bool grounded = DetectObstacle(Vector3.down);

            if (fall_speed > 0.1f && !flying)
            {
                if (grounded)
                {
                    fall_value = 0f;
                }
                else
                {
                    fall_value += fall_accel * Time.deltaTime;
                }
                fall_value  = Mathf.Clamp(fall_value, 0f, fall_speed);
                move_vect.y = -fall_value;
            }

            rigid.velocity = move_vect;
        }
Beispiel #2
0
        private void Update()
        {
            if (TheGame.IsGamePaused())
            {
                return;
            }

            if (dead)
            {
                return;
            }

            Vector3 dir = current_rot_target - transform.position;

            dir.z = 0f;
            Debug.DrawRay(transform.position, dir);

            //Side
            if (Mathf.Abs(dir.x) > 0.1f)
            {
                float side = (dir.x < 0f) ? -1f : 1f;
                transform.localScale = new Vector3(Mathf.Abs(start_scale.x) * side, start_scale.y, start_scale.z);
            }

            //Vision angle
            if (dir.magnitude > 0.1f)
            {
                float      angle  = Mathf.Atan2(dir.y, dir.x * GetSide()) * Mathf.Rad2Deg;
                Quaternion target = Quaternion.AngleAxis(angle, Vector3.forward);
                face_rot    = Quaternion.RotateTowards(face_rot, target, rotate_speed * current_rot_mult * Time.deltaTime);
                face_vect   = face_rot * Vector3.right;
                face_vect.x = face_vect.x * GetSide();
                face_vect.Normalize();
            }
        }
        //Handle render and controls
        void Update()
        {
            if (TheGame.IsGamePaused())
            {
                return;
            }

            hit_timer   += Time.deltaTime;
            state_timer += Time.deltaTime;
            //grounded_timer += Time.deltaTime;

            //Controls
            PlayerControls controls = PlayerControls.Get(player_id);

            if (state == PlayerCharacterState.Normal)
            {
                if (controls.GetJumpDown())
                {
                    Jump();
                }

                Ladder ladder = Ladder.GetOverlapLadder(gameObject);
                if (ladder && controls.GetMove().y > 0.1f && state_timer > 0.7f)
                {
                    Climb();
                }
            }

            if (state == PlayerCharacterState.Climb)
            {
                Ladder ladder = Ladder.GetOverlapLadder(gameObject);
                if (ladder == null)
                {
                    state       = PlayerCharacterState.Normal;
                    state_timer = 0f;
                }

                if (controls.GetJumpDown())
                {
                    Jump(true);
                }
            }

            //Reset when fall
            if (!IsDead() && transform.position.y < fall_pos_y - GetSize().y)
            {
                TakeDamage(fall_damage);
                if (reset_when_fall)
                {
                    Teleport(last_ground_pos);
                }
            }
        }
        //Handle physics
        void FixedUpdate()
        {
            if (TheGame.IsGamePaused())
            {
                return;
            }

            PlayerControls controls = PlayerControls.Get(player_id);

            //Movement velocity
            Vector3 move_input   = controls.GetMove();
            float   desiredSpeed = Mathf.Abs(move_input.x) > 0.1f ? move_input.x * move_max : 0f;
            float   acceleration = Mathf.Abs(move_input.x) > 0.1f ? move_accel : move_deccel;

            acceleration = !is_grounded ? jump_move_percent * acceleration : acceleration;
            move.x       = Mathf.MoveTowards(move.x, desiredSpeed, acceleration * Time.fixedDeltaTime);

            was_grounded = is_grounded;
            is_grounded  = DetectObstacle(Vector3.down);
            is_ceiled    = DetectObstacle(Vector3.up);
            is_fronted   = IsFronted();

            if (state == PlayerCharacterState.Normal)
            {
                UpdateFacing();
                UpdateJump();
                UpdateCrouch();

                //Move
                move.x         = is_fronted ? 0f : move.x;
                rigid.velocity = move;

                CheckForFloorTrigger();
            }

            if (state == PlayerCharacterState.Climb)
            {
                move           = controls.GetMove() * climb_speed;
                rigid.velocity = move;
            }

            if (state == PlayerCharacterState.Dead)
            {
                move.x = 0f;
                UpdateJump(); //Keep falling
                rigid.velocity = move;
            }
        }
Beispiel #5
0
        void Update()
        {
            if (TheGame.IsGamePaused())
            {
                return;
            }

            if (target == null)
            {
                return;
            }

            Vector3 targ     = target.transform.position;
            Vector3 dir_vect = targ - transform.position;

            if (dir_vect.magnitude < follow_range)
            {
                enemy.MoveTo(targ, speed_mult);
                enemy.FaceToward(enemy.GetMoveTarget(), 2f);
            }
        }
Beispiel #6
0
        void Update()
        {
            if (TheGame.IsGamePaused())
            {
                return;
            }

            wait_timer += Time.deltaTime;

            move_dir = Vector3.right * Mathf.Sign(transform.localScale.x);

            //If still in starting path
            if (!waiting && !HasFallen() && path_list.Count > 0)
            {
                //Move
                Vector3 targ = path_list[current_path];
                enemy.MoveTo(targ, speed_mult);
                enemy.FaceToward(targ);
                move_dir = Vector3.right * Mathf.Sign((targ - transform.position).x);

                //Check if reached target
                Vector3 dist_vect = (targ - transform.position);
                dist_vect.z = 0f;
                if (dist_vect.magnitude < 0.1f)
                {
                    waiting    = true;
                    wait_timer = 0f;
                }

                //Check if obstacle ahead
                bool fronted = enemy.CheckFronted(dist_vect.normalized);
                if (fronted && wait_timer > 2f)
                {
                    RewindPath();
                    wait_timer = 0f;
                }
            }

            //If can't reach starting path anymore
            if (!waiting && HasFallen())
            {
                //Move
                Vector3 mdir = Vector3.right * (path_rewind ? -2f : 2f);
                Vector3 targ = transform.position + mdir;
                enemy.MoveTo(targ, speed_mult);
                enemy.FaceToward(targ);
                move_dir = Vector3.right * Mathf.Sign((targ - transform.position).x);

                //Check if obstacle ahead
                Vector3 dist_vect = (targ - transform.position);
                bool    fronted   = enemy.CheckFronted(dist_vect.normalized);
                if (fronted && wait_timer > 2f)
                {
                    path_rewind = !path_rewind;
                    wait_timer  = 0f;
                }
            }

            if (waiting)
            {
                //Wait a bit
                if (wait_timer > wait_time)
                {
                    GoToNextPath();
                    waiting    = false;
                    wait_timer = 0f;
                }
            }
        }