Hello! I have a game with two players (heroes). I am using networking to move each hero from its own windows. However, Hero2 does not move. Here is the code that I am using :
globals.gd:
extends Node
var player2id = -1
var player1id = -1
Lobby.gd:
extends Node2D
func _ready():
get_tree().connect("network_peer_connected", self, "_player_connected")
func _on_ButtonHost_pressed():
var net = NetworkedMultiplayerENet.new()
net.create_server(6969, 2)
get_tree().set_network_peer(net)
Globals.player1id = get_tree().get_network_unique_id()
func _on_ButtonJoin_pressed():
var net = NetworkedMultiplayerENet.new()
net.create_client("127.0.0.1", 6969)
get_tree().set_network_peer(net)
func _player_connected(id):
Globals.player2id = id
var game = preload("res://World.tscn").instance()
get_tree().get_root().add_child(game)
hide()
Hero.gd:
extends KinematicBody2D
const PlayerHurtSound = preload("res://Player/PlayerHurtSound.tscn")
const ACCELERATION = 500
const MAX_SPEED = 80
const FRICTION = 500
const ROLL_SPEED = 125
enum {
MOVE,
ROLL,
ATTACK
}
var state = MOVE
var velocity = Vector2.ZERO
var roll_vector = Vector2.DOWN
var stats = PlayerStats
onready var animationPlayer = $AnimationPlayer
onready var animationTree = $AnimationTree
onready var animationState = animationTree.get("parameters/playback")
onready var swordHitbox = $HitboxPivot/SwordHitbox
onready var hurtbox = $Hurtbox
onready var blinkAnimationPlayer = $BlinkAnimationPlayer
func _init():
pass
func _ready():
randomize()
stats.connect("no_health", self, "queue_free")
animationTree.active = true
swordHitbox.knockback_vector = roll_vector
func _physics_process(delta):
match state:
MOVE:
move_state(delta)
ROLL:
roll_state(delta)
ATTACK:
attack_state(delta)
if velocity != Vector2():
pass
func move_state(delta):
var input_vector = Vector2.ZERO
input_vector.x = Input.get_action_strength("ui_right") - Input.get_action_strength("ui_left")
input_vector.y = Input.get_action_strength("ui_down") - Input.get_action_strength("ui_up")
input_vector = input_vector.normalized()
if input_vector != Vector2.ZERO:
roll_vector = input_vector
swordHitbox.knockback_vector = input_vector
animationTree.set("parameters/idle/blend_position", input_vector)
animationTree.set("parameters/Run/blend_position", input_vector)
animationTree.set("parameters/Attack/blend_position", input_vector)
animationTree.set("parameters/Roll/blend_position", input_vector)
animationState.travel("Run")
velocity = velocity.move_toward(input_vector * MAX_SPEED, ACCELERATION * delta)
else:
animationState.travel("idle")
velocity = velocity.move_toward(Vector2.ZERO, FRICTION * delta)
move()
if Input.is_action_just_pressed("roll"):
state = ROLL
if Input.is_action_just_pressed("attack"):
state = ATTACK
func roll_state(delta):
velocity = roll_vector * ROLL_SPEED
animationState.travel("Roll")
move()
func attack_state(delta):
velocity = Vector2.ZERO
animationState.travel("Attack")
func move():
if velocity != Vector2():
if is_network_master():
velocity = move_and_slide(velocity)
rpc_unreliable("_set_position", global_transform.origin)
func roll_animation_finished():
velocity = Vector2.ZERO
state = MOVE
func attack_animation_finished():
state = MOVE
func _on_Hurtbox_area_entered(area):
stats.health -= 1
hurtbox.start_invincibility(2)
hurtbox.create_hit_effect()
var playerHurtSound = PlayerHurtSound.instance()
get_tree().current_scene.add_child(playerHurtSound)
func _on_Hurtbox_invincibility_started():
blinkAnimationPlayer.play("Start") # Replace with function body.
func _on_Hurtbox_invincibility_ended():
blinkAnimationPlayer.play("Stop") # Replace with function body.
remote func _set_position(pos):
global_transform.origin = pos
World.gd -- (this is the main scene)
extends Node2D
func _ready():
var player1 = $YSort/Hero
player1.set_name(str("World/YSort/-1"))
player1.set_network_master(Globals.player1id, true)
print("1id:" + str(Globals.player1id))
print("1name:" + player1.name)
var player2 = $YSort2/Hero
player2.set_name(str("World/YSort2/1"))
player2.set_network_master(Globals.player2id, true)
print("2id:" + str(Globals.player2id))
print("2name:" + player2.name)