Server side bullet registration
This commit is contained in:
parent
b317693619
commit
26e5fa71e2
5 changed files with 47 additions and 1 deletions
|
|
@ -6,6 +6,10 @@ enum TEAMS {
|
|||
SPECTATE,
|
||||
UNASSIGNED
|
||||
}
|
||||
const ATTACK_LAYER: int = 0b10000
|
||||
const DEFENCE_LAYER: int = 0b100000
|
||||
|
||||
var player_nodes: Dictionary[int,Player] = {}
|
||||
|
||||
var dynamic_objects_spawner: MultiplayerSpawner
|
||||
|
||||
|
|
@ -33,3 +37,35 @@ func despawn_internal(path: NodePath) -> void:
|
|||
return
|
||||
|
||||
get_node(path).queue_free()
|
||||
|
||||
func shoot(damage: int) -> void:
|
||||
if multiplayer.get_unique_id() == 1:
|
||||
shoot_internal(1,damage)
|
||||
else:
|
||||
shoot_internal.rpc_id(1,multiplayer.get_unique_id(),damage)
|
||||
|
||||
@rpc("any_peer","call_local","reliable")
|
||||
func shoot_internal(id:int , damage: int) -> void:
|
||||
if multiplayer.is_server() == false:
|
||||
return
|
||||
|
||||
var player: Player = player_nodes[id]
|
||||
var player_camera: Camera3D = player.get_node("Camera3D")
|
||||
var space: PhysicsDirectSpaceState3D = player.get_world_3d().direct_space_state
|
||||
var endpoint: Vector3 = player_camera.global_position - player_camera.global_basis.z * 100
|
||||
|
||||
var ray = PhysicsRayQueryParameters3D.create(player_camera.global_position,endpoint,1)
|
||||
ray.exclude = [player.get_rid()]
|
||||
ray.collide_with_areas = false
|
||||
match player.team:
|
||||
TEAMS.DEFENCE:
|
||||
ray.collision_mask |= ATTACK_LAYER
|
||||
TEAMS.ATTACK:
|
||||
ray.collision_mask |= DEFENCE_LAYER
|
||||
_:
|
||||
ray.collision_mask |= ATTACK_LAYER | DEFENCE_LAYER
|
||||
|
||||
var collision = space.intersect_ray(ray)
|
||||
if collision != {} and collision["collider"] is Player:
|
||||
collision["collider"].take_damage.rpc_id(int(collision["collider"].name),damage)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue