//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); } } }
private void UpdateCrouch() { if (!can_crouch) { return; } PlayerControls controls = PlayerControls.Get(player_id); //Crouch bool was_crouch = is_crouch; if (controls.GetMove().y < -0.1f && is_grounded) { is_crouch = true; move = Vector2.zero; capsule_coll.size = new Vector2(coll_start_h.x, coll_start_h.y * crouch_coll_percent); capsule_coll.offset = new Vector2(coll_start_off.x, coll_start_off.y - coll_start_h.y * (1f - crouch_coll_percent) / 2f); if (!was_crouch && is_crouch) { if (onCrouch != null) { onCrouch.Invoke(); } } } else { is_crouch = false; capsule_coll.size = coll_start_h; capsule_coll.offset = coll_start_off; } }
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(); } } }
void Update() { PlayerControls controls = PlayerControls.Get(character.player_id); take_item_timer += Time.deltaTime; if (held_item && controls.GetActionDown()) { held_item.UseItem(); } }
//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 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); }
//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; } }