First Map Tests, Player + Movement and Spawning.
This commit is contained in:
parent
1351ce3178
commit
c483a438c7
7 changed files with 145 additions and 8 deletions
55
scripts/entities/player.gd
Normal file
55
scripts/entities/player.gd
Normal file
|
@ -0,0 +1,55 @@
|
|||
extends CharacterBody3D
|
||||
|
||||
|
||||
const SPEED: float = 5.0
|
||||
const JUMP_VELOCITY: float = 4.5
|
||||
|
||||
var activated: bool = false
|
||||
|
||||
@onready
|
||||
var camera: Camera3D = $Camera3D
|
||||
var camera_rotation: Vector2 = Vector2(0,0)
|
||||
|
||||
func _ready() -> void:
|
||||
if name == Game.username:
|
||||
activated = true
|
||||
camera.current = true
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
||||
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
if activated:
|
||||
if not is_on_floor():
|
||||
velocity += get_gravity() * delta
|
||||
|
||||
if Input.is_action_just_pressed("ui_accept") and is_on_floor():
|
||||
velocity.y = JUMP_VELOCITY
|
||||
|
||||
var input_dir: Vector2 = Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down")
|
||||
var direction: Vector3 = (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized()
|
||||
|
||||
if direction:
|
||||
velocity.x = direction.x * SPEED
|
||||
velocity.z = direction.z * SPEED
|
||||
else:
|
||||
velocity.x = move_toward(velocity.x, 0, SPEED)
|
||||
velocity.z = move_toward(velocity.z, 0, SPEED)
|
||||
|
||||
if move_and_slide():
|
||||
pass
|
||||
|
||||
Networking.player_sync_call(position, rotation)
|
||||
|
||||
func _input(event: InputEvent) -> void:
|
||||
if event is InputEventMouseMotion and activated:
|
||||
var mouse_event: InputEventMouseMotion = event
|
||||
camera_rotation = mouse_event.relative * 0.01 * 0.5
|
||||
if camera.rotation.x <= 1.6 && camera_rotation.y <= 0:
|
||||
camera.rotate(Vector3.RIGHT, -camera_rotation.y)
|
||||
elif camera.rotation.x >= -1.6 && camera_rotation.y >= 0:
|
||||
camera.rotate(Vector3.RIGHT, -camera_rotation.y)
|
||||
if camera.rotation.x >= 1.6:
|
||||
camera.rotation.x = 1.6
|
||||
elif camera.rotation.x <= -1.6:
|
||||
camera.rotation.x = -1.6
|
||||
rotate(Vector3.DOWN, camera_rotation.x)
|
13
scripts/maps/map.gd
Normal file
13
scripts/maps/map.gd
Normal file
|
@ -0,0 +1,13 @@
|
|||
extends Node3D
|
||||
|
||||
var player: PackedScene = preload("res://scenes/entities/player.tscn")
|
||||
|
||||
func _ready() -> void:
|
||||
var spawns: Array = $PlayerSpawn.get_children()
|
||||
var i: int = 0
|
||||
for peer: String in Networking.peers:
|
||||
var instance: CharacterBody3D = player.instantiate()
|
||||
instance.position = spawns[i].position
|
||||
instance.name = peer
|
||||
add_child(instance)
|
||||
i += 1
|
|
@ -24,4 +24,4 @@ func _on_playerlist_changed() -> void:
|
|||
|
||||
|
||||
func _on_start_button_pressed() -> void:
|
||||
Networking.send_rpcs("start_game", ["hello", " world"])
|
||||
Networking.start_game_call()
|
||||
|
|
|
@ -14,6 +14,7 @@ var max_clients: int = 1024
|
|||
|
||||
var roomname: String = "sample"
|
||||
var username: String = "sample"
|
||||
var mapname: String = "Testmap"
|
||||
|
||||
func _ready() -> void:
|
||||
var args: PackedStringArray = OS.get_cmdline_args()
|
||||
|
|
|
@ -240,15 +240,40 @@ func send_playerlist(status: int, newPeers: Dictionary) -> void:
|
|||
## General Game RPCs
|
||||
|
||||
# Does RPCs to all clients.
|
||||
func send_rpcs(method: String, args: Array) -> void:
|
||||
func get_ids() -> Array:
|
||||
var ret: Array = []
|
||||
for peer: String in peers:
|
||||
var id: int = peers[peer]
|
||||
if rpc_id(id, method, args) != OK:
|
||||
Log.warning("Failed to send the rpc %s to %d." % [method, id])
|
||||
ret.append(peers[peer])
|
||||
return ret
|
||||
|
||||
func verify_id(id: int) -> bool:
|
||||
if id in get_ids():
|
||||
return true
|
||||
return false
|
||||
|
||||
func start_game_call() -> void:
|
||||
for peer: int in Networking.get_ids():
|
||||
if rpc_id(peer, "start_game") != OK:
|
||||
Log.warning("Couldn't send RPC to %d!" % peer)
|
||||
|
||||
# Starts the game.
|
||||
@rpc("any_peer", "call_remote", "reliable")
|
||||
@rpc("any_peer", "call_local", "reliable")
|
||||
func start_game() -> void:
|
||||
if multiplayer.get_remote_sender_id() == managerID:
|
||||
if !get_tree().change_scene_to_file("res://scenes/maps/testmap.tscn"):
|
||||
if get_tree().change_scene_to_file("res://scenes/maps/testmap.tscn") != OK:
|
||||
Log.warning("Couldn't load the map!")
|
||||
|
||||
func player_sync_call(position: Vector3, rotation: Vector3) -> void:
|
||||
for peer: int in Networking.get_ids():
|
||||
if rpc_id(peer, "player_sync", position, rotation) != OK:
|
||||
Log.warning("Couldn't send RPC to %d!" % peer)
|
||||
|
||||
# Starts the game.
|
||||
@rpc("any_peer", "call_local", "reliable")
|
||||
func player_sync(position: Vector3, rotation: Vector3) -> void:
|
||||
if verify_id(multiplayer.get_remote_sender_id()):
|
||||
for peer: String in peers:
|
||||
if peers[peer] == multiplayer.get_remote_sender_id() and has_node("/root/"+Game.mapname+"/"+peer):
|
||||
var player: CharacterBody3D = get_node("/root/"+Game.mapname+"/"+peer)
|
||||
player.position = position
|
||||
player.rotation = rotation
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue