Repository navigation
Expand file tree
/
Copy pathCharacter.gd
More file actions
93 lines (73 loc) · 1.96 KB
/
Copy pathCharacter.gd
File metadata and controls
93 lines (73 loc) · 1.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
extends CharacterBody2D
const SPEED = 300.0
const JUMP_VELOCITY = -600.0
var gravity = ProjectSettings.get_setting("physics/2d/default_gravity")
var pid: int
var nametag: String:
get:
return $Nametag.text
set(val):
$Nametag.text = val
var playtime_counter: float = 0.0
var playtime_interval: float = 1.0
var playtime: float = 0.0:
set(val):
playtime = val
$Playtime.text = "%.1f" % val
@rpc
func set_playtime(pt: float):
playtime = pt
var jump_requested: bool = false
var x_movement: float = 0.0
var last_x_input: float
func _ready():
if multiplayer.get_unique_id() == pid:
$Camera2D.make_current()
@rpc("any_peer")
func do_a_jump():
if multiplayer.get_remote_sender_id() != pid:
return
jump_requested = true
@rpc("any_peer")
func set_x_movement(amount: float):
if multiplayer.get_remote_sender_id() != pid:
return
x_movement = clampf(amount, -1.0, 1.0)
func _unhandled_input(event):
if multiplayer.get_unique_id() != pid:
return
if event.is_action_pressed(&"jump"):
if multiplayer.is_server():
jump_requested = true
else:
do_a_jump.rpc_id(1)
func _process(delta):
if multiplayer.is_server():
playtime += delta
$Playtime.rotation_degrees += 80 * delta
while $Playtime.rotation_degrees > 180:
$Playtime.rotation_degrees -= 360
if multiplayer.get_unique_id() != pid:
return
# local player controls
var x_input := Input.get_axis("ui_left", "ui_right")
if x_input != last_x_input:
if multiplayer.is_server():
x_movement = clampf(x_input, -1.0, 1.0)
else:
set_x_movement.rpc_id(1, x_input)
last_x_input = x_input
func _physics_process(delta):
if not multiplayer.is_server():
return
# Add the gravity.
if not is_on_floor():
velocity.y += gravity * delta
if jump_requested and is_on_floor():
velocity.y = JUMP_VELOCITY
jump_requested = false
if x_movement:
velocity.x = move_toward(velocity.x, x_movement * SPEED, SPEED * .8)
else:
velocity.x = move_toward(velocity.x, 0, SPEED * .8)
move_and_slide()