diff options
author | metamuffin <metamuffin@disroot.org> | 2024-07-07 15:46:05 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-07-07 15:46:05 +0200 |
commit | 9d5f101ae04e629e542084397d016f74c8fe9763 (patch) | |
tree | 6721c1f9c137b86bfeb0995fc1f2396c9db72e7f | |
parent | 84100fac9f1ba4c283b58c429821f7daae38d151 (diff) | |
download | hurrycurry-9d5f101ae04e629e542084397d016f74c8fe9763.tar hurrycurry-9d5f101ae04e629e542084397d016f74c8fe9763.tar.bz2 hurrycurry-9d5f101ae04e629e542084397d016f74c8fe9763.tar.zst |
send boosting state in client
-rw-r--r-- | client/game.gd | 4 | ||||
-rw-r--r-- | client/multiplayer.gd | 10 | ||||
-rw-r--r-- | client/player/controllable_player.gd | 25 | ||||
-rw-r--r-- | client/player/player.gd | 13 |
4 files changed, 27 insertions, 25 deletions
diff --git a/client/game.gd b/client/game.gd index 27a5715b..1e7a378d 100644 --- a/client/game.gd +++ b/client/game.gd @@ -83,9 +83,9 @@ func _ready(): mp.set_tile.connect(set_tile) mp.remove_tile.connect(func (pos): map.clear_tile(pos)) - mp.position.connect(func(player: int, pos: Vector2, rot: float): + mp.position.connect(func(player: int, pos: Vector2, rot: float, boosting: bool): var player_instance: Player = players[player] - player_instance.update_position(pos, rot) + player_instance.update_position(pos, rot, boosting) ) mp.remove_player.connect(func(id: int): diff --git a/client/multiplayer.gd b/client/multiplayer.gd index e28b6d2a..30346263 100644 --- a/client/multiplayer.gd +++ b/client/multiplayer.gd @@ -33,7 +33,7 @@ signal item_message(player: int, item: int, persist: bool) signal effect_message(player: int, effect: String, persist: bool) signal add_player(player: int, name: String, pos: Vector2, character: int) signal remove_player(player: int) -signal position(player: int, position: Vector2, rotation: float) +signal position(player: int, position: Vector2, rotation: float, boosting: bool) signal take_item(tile: Vector2i, player: int) signal put_item(player: int, tile: Vector2i, ) signal pass_item_player(from: int, to: int) @@ -112,7 +112,8 @@ func handle_packet(bytes: PackedByteArray): var player = decoded["player"] var pos = decoded["pos"] var rot = decoded["rot"] - position.emit(player, pos_to_vec2(pos), rot) + var boosting = decoded["boosting"] + position.emit(player, pos_to_vec2(pos), rot, boosting) "take_item": push_warning("take_item is deprecated") var tile = pos_to_vec2i(decoded["tile"]) @@ -248,11 +249,12 @@ func send_join(player_name: String, character: int): "character": character }) -func send_position(pos: Vector2, rotation: float): +func send_position(pos: Vector2, rotation: float, boosting: bool): send_packet({ "type": "position", "pos": [pos.x, pos.y], - "rot": rotation + "rot": rotation, + "boosting": boosting }) func send_tile_interact(pos: Vector2i, edge: bool): diff --git a/client/player/controllable_player.gd b/client/player/controllable_player.gd index da2cffcd..f83a08f6 100644 --- a/client/player/controllable_player.gd +++ b/client/player/controllable_player.gd @@ -28,7 +28,6 @@ var onscreen_controls = preload("res://player/onscreen_controls/controls.tscn"). var facing = Vector2(1, 0) var velocity_ = Vector2(0, 0) var stamina = 0 -var boosting := false var was_boosting := false var chat_open := false @@ -41,7 +40,7 @@ func _ready(): add_child(timer) timer.start() timer.connect("timeout", func(): - game.mp.send_position(position_, rotation_) + game.mp.send_position(position_, rotation_, boosting) ) add_child(onscreen_controls) super() @@ -67,8 +66,6 @@ func _process_movement(delta): var input = Input.get_vector("left", "right", "forward", "backwards") var boost = Input.is_action_pressed("boost") or (Global.get_setting("latch_boost") and boosting) input = input.rotated( - game.camera.angle_target) - position_anim = position_ - rotation_anim = rotation_ if Input.is_action_pressed("interact") or Input.is_action_just_released("interact"): input *= 0 else: @@ -77,9 +74,13 @@ func _process_movement(delta): int(floor(position.z + cos(rotation.y))) ) interact() + var was_boosting = boosting update(delta, input, boost) - character.walking = input.length_squared() > 0.1 - character.boosting = boosting + if boosting and not was_boosting: + Input.start_joy_vibration(0, 0, 1, 0.15) + walking = input.length_squared() > 0.1 + position_anim = position_ + rotation_anim = rotation_ func update(dt: float, input: Vector2, boost: bool): input = input.limit_length(1.); @@ -88,14 +89,8 @@ func update(dt: float, input: Vector2, boost: bool): rotation_ = atan2(self.facing.x, self.facing.y); boost = boost and input.length() > 0.1 boosting = boost and (boosting or stamina >= 1.0) and stamina > 0 - if boosting: - stamina -= dt / BOOST_DURATION - if not was_boosting: - Input.start_joy_vibration(0, 0, 1, 0.15) - was_boosting = true - else: - stamina += dt / BOOST_RESTORE - was_boosting = false + if boosting: stamina -= dt / BOOST_DURATION + else: stamina += dt / BOOST_RESTORE stamina = max(min(stamina, 1.0), 0.0) var speed = PLAYER_SPEED * (BOOST_FACTOR if boosting else 1.) self.velocity_ += input * dt * speed; @@ -132,7 +127,7 @@ func collide(dt: float): func aabb_point_distance(mi: Vector2, ma: Vector2, p: Vector2) -> float: return (p - p.clamp(mi, ma)).length() -func update_position(_new_position: Vector2, _new_rotation: float): +func update_position(_new_position: Vector2, _new_rotation: float, _new_boosting: bool): pass func submit_message(text: String): diff --git a/client/player/player.gd b/client/player/player.gd index 1b82b90e..569c1b88 100644 --- a/client/player/player.gd +++ b/client/player/player.gd @@ -26,6 +26,8 @@ var rotation_ = 0. var rotation_anim = 0. var position_ = Vector2(0, 0) var position_anim = Vector2(0, 0) +var boosting := false +var walking := false var username: String var character: Character = preload("res://player/character/character.tscn").instantiate() @@ -67,13 +69,14 @@ func _init(_id: int, new_name: String, pos: Vector2, new_character_idx: int, new func _ready(): character.select_hairstyle(character_idx) clear_timer.timeout.connect(clear_message) - + update_username_tag() Global.settings_changed.connect(update_username_tag) -func update_position(new_position: Vector2, new_rotation: float): +func update_position(new_position: Vector2, new_rotation: float, new_boosting: bool): position_ = new_position rotation_ = new_rotation + boosting = new_boosting func update_username_tag(): var tag: Label3D = character.username_tag @@ -131,8 +134,10 @@ func _process(delta): position.x = position_anim.x position.z = position_anim.y rotation.y = rotation_anim - character.walking = position_.distance_squared_to(position_anim) > 0.001 - + walking = walking or position_.distance_squared_to(position_anim) > 0.001 + character.walking = walking + character.boosting = boosting + walking = false func clear_message(): item_bubble.remove_item() |