aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--client/game.gd4
-rw-r--r--client/multiplayer.gd10
-rw-r--r--client/player/controllable_player.gd25
-rw-r--r--client/player/player.gd13
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()