//Handle render and controls
        void Update()
        {
            if (is_dead)
            {
                return;
            }

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

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

            move_input = !disable_controls?controls.GetMove() : Vector2.zero;

            jump_press = !disable_controls?controls.GetJumpDown() : false;

            jump_hold = !disable_controls?controls.GetJumpHold() : false;

            if (jump_press || move_input.y > 0.5f)
            {
                Jump();
            }

            //Reset when fall
            if (transform.position.y < fall_pos_y - GetSize().y)
            {
                TakeDamage(max_hp * fall_damage_percent);
                if (reset_when_fall)
                {
                    Teleport(last_ground_pos);
                }
            }
        }
예제 #2
0
        private void UpdateJump()
        {
            PlayerControls controls = PlayerControls.Get(player_id);

            //Jump
            jump_timer += Time.fixedDeltaTime;

            //Jump end timer
            if (is_jumping && !controls.GetJumpHold() && jump_timer > jump_time_min)
            {
                is_jumping = false;
            }
            if (is_jumping && jump_timer > jump_time_max)
            {
                is_jumping = false;
            }

            //Jump hit ceil
            if (is_ceiled)
            {
                is_jumping = false;
                move.y     = Mathf.Min(move.y, 0f);
            }

            //Add jump velocity
            if (!is_grounded)
            {
                //Falling
                float gravity = !is_jumping ? jump_fall_gravity : jump_gravity; //Gravity increased when going down
                move.y = Mathf.MoveTowards(move.y, -move_max * 2f, gravity * Time.fixedDeltaTime);
            }
            else if (!is_jumping)
            {
                //Grounded
                move.y = 0f;
            }

            /*if (!is_grounded)
             *  grounded_timer = 0f;
             *
             * //Average grounded pos
             * if (!was_grounded && is_grounded)
             *  average_ground_pos = transform.position;
             * if (is_grounded)
             *  average_ground_pos = Vector3.Lerp(transform.position, average_ground_pos, 1f * Time.deltaTime);
             *
             * //Save last landed position
             * if (is_grounded && grounded_timer > 1f)
             *  last_ground_pos = average_ground_pos;*/

            if (!was_grounded && is_grounded)
            {
                if (onLand != null)
                {
                    onLand.Invoke();
                }
            }
        }
예제 #3
0
        //Handle render and controls
        void Update()
        {
            if (is_dead)
            {
                return;
            }

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

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

            move_input = !disable_controls?controls.GetMove() : Vector2.zero;

            jump_press = !disable_controls?controls.GetJumpDown() : false;

            jump_hold = !disable_controls?controls.GetJumpHold() : false;

            if (jump_press || move_input.y > 0.5f)
            {
                Jump();
            }

            //Reset when fall
            if (transform.position.y < fall_pos_y - GetSize().y)
            {
                TakeDamage(max_hp * fall_damage_percent);
                if (reset_when_fall)
                {
                    Teleport(last_ground_pos);
                }
            }

            if (grayness < 1 && (
                    (rigid.position.x >= 20 && rigid.position.x <= 24 && rigid.position.y > -1 && rigid.position.y < 0) ||
                    (rigid.position.x >= 39 && rigid.position.x <= 41 && rigid.position.y > 7 && rigid.position.y < 8) ||
                    (rigid.position.x >= 54 && rigid.position.x <= 56 && rigid.position.y > 22 && rigid.position.y < 23) ||
                    (rigid.position.x >= 80 && rigid.position.y > -3 && rigid.position.y < -2)
                    ))
            {
                grayness += 0.01f;
            }
            else if (grayness > 0)
            {
                grayness -= 0.001f;
            }

            character.GetComponent <SpriteRenderer>().color = new Color(grayness, grayness, grayness, 1);
        }