1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- extends Area2D
- const MOTION_SPEED = 150
- @export var left = false
- var _motion = 0
- var _you_hidden = false
- @onready var _screen_size_y = get_viewport_rect().size.y
- func _process(delta):
- # Is the master of the paddle.
- if is_multiplayer_authority():
- _motion = Input.get_axis(&"move_up", &"move_down")
- if not _you_hidden and _motion != 0:
- _hide_you_label()
- _motion *= MOTION_SPEED
- # Using unreliable to make sure position is updated as fast
- # as possible, even if one of the calls is dropped.
- set_pos_and_motion.rpc(position, _motion)
- else:
- if not _you_hidden:
- _hide_you_label()
- translate(Vector2(0, _motion * delta))
- # Set screen limits.
- position.y = clamp(position.y, 16, _screen_size_y - 16)
- # Synchronize position and speed to the other peers.
- @rpc("unreliable")
- func set_pos_and_motion(pos, motion):
- position = pos
- _motion = motion
- func _hide_you_label():
- _you_hidden = true
- get_node(^"You").hide()
- func _on_paddle_area_enter(area):
- if is_multiplayer_authority():
- # Random for new direction generated checked each peer.
- area.bounce.rpc(left, randf())
|