summaryrefslogtreecommitdiff
path: root/godot/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'godot/scripts')
-rw-r--r--godot/scripts/GameBase.gd58
-rw-r--r--godot/scripts/Server.gd17
-rw-r--r--godot/scripts/World.gd39
-rw-r--r--godot/scripts/ballistics/NetworkedProjectile.gd2
-rw-r--r--godot/scripts/characters/NetworkedCharacter.gd17
-rw-r--r--godot/scripts/characters/player_controller_new.gd17
-rw-r--r--godot/scripts/machines/NetworkedMachineGDS.gd2
-rw-r--r--godot/scripts/vehicles/Airplane.gd2
-rw-r--r--godot/scripts/vehicles/Gunboat.gd11
9 files changed, 82 insertions, 83 deletions
diff --git a/godot/scripts/GameBase.gd b/godot/scripts/GameBase.gd
index e77d070..477e44e 100644
--- a/godot/scripts/GameBase.gd
+++ b/godot/scripts/GameBase.gd
@@ -2,16 +2,18 @@ extends Spatial
var client
var client_id: int
-var is_local = false
+var is_local: bool = false
+var is_host: bool = false
var local_server_tree = null
-var player_name : String
-var player_team : String
+var player_name : String = "Player"
+var player_team : int = -1 #-1 = spec
var player_char = null
onready var cam: ClippedCamera = $PLAYERCAM
onready var hud = $HUD
var players_info = {} #dictionary of id : name, team, ping, etc.
+var teams_info = {-1: "SPEC"} #dictionary of teams for given server
var is_chatting: bool = false
@@ -21,6 +23,14 @@ signal screen_shake(location, strength, time)
func _ready():
connect("screen_shake", self, "shake_cam")
+ if !is_local and !is_host: #if connecting to external server
+ NavigationServer.set_active(false)
+ elif !is_local and is_host: #dedicated server
+ remove_child($HUD)
+ remove_child($PLAYERCAM)
+ else: #local server
+ players_info[1] = ["Player", "SPEC"]
+ cam.attach($DEFAULTCAM, "STATIC", NodePath("."))
func shake_cam(loc, strength, time):
var dist: float = (cam.global_transform.origin - loc).length()
@@ -29,20 +39,17 @@ func shake_cam(loc, strength, time):
cam.shake(strength, time)
func _process(delta):
- $HUD/Health.text = str(player_char.health) if player_char != null else ""
- if is_local:
- local_server_tree.call("idle",delta)
+ if is_local or !is_host:
+ $HUD/Health.text = str(player_char.health) if player_char != null else ""
func _physics_process(delta):
- if is_local:
- local_server_tree.call("iteration", delta)
+ pass
remote func set_up_server_info(info):
$HUD/ServerJoinMenu/MOTD.text = info["MOTD"]
$HUD/ServerJoinMenu/ServerName.text = info["server_name"]
$DEFAULTCAM.transform = info["cam_pos"]
cam.attach($DEFAULTCAM, "STATIC", NodePath("."))
-
rpc_id(1, "_call_on_server", "_client_connection_confirmed", {"id" : client_id, "username" : player_name})
@@ -62,31 +69,41 @@ remote func load_entities(entity_info): #machines, players, and projectiles
ent.transform = entity["transform"]
ent.mp_init(entity["init_info"])
-remote func update_players_info(info):
+remotesync func _call_on_server(function, arguments):
+ if get_network_master() != 1: return
+ print('Remote server call: ' + function)
+ $Server.call(function, arguments)
+
+remotesync func update_players_info(info):
+ players_info = info
+ if is_host and !is_local: return
$HUD/ServerJoinMenu/Team1Players.text = ""
$HUD/ServerJoinMenu/Team2Players.text = ""
$HUD/ServerJoinMenu/Spectators.text = ""
- players_info = info
for player in players_info.keys():
var p_team = players_info[player][1]
var p_name = players_info[player][0]
- if p_team == "RED":
+ if p_team == 0:
$HUD/ServerJoinMenu/Team1Players.text += p_name + ", "
- elif p_team == "BLUE":
+ elif p_team == 1:
$HUD/ServerJoinMenu/Team2Players.text += p_name + ", "
- elif p_team == "SPEC":
+ elif p_team == -1:
$HUD/ServerJoinMenu/Spectators.text += p_name + ", "
-remote func game_update_chars():
+remotesync func game_update_chars():
+ if is_host and !is_local: return
$HUD.update_characters()
-remote func game_chat_msg(msg):
+remotesync func game_chat_msg(msg):
+ if is_host and !is_local: return
$HUD.ui_chat_msg(msg)
remotesync func game_hitsound():
+ if is_host and !is_local: return
$HUD.ui_play_hitsound()
remotesync func game_killsound():
+ if is_host and !is_local: return
$HUD.ui_play_killsound()
func request_select_character(dest):
@@ -96,12 +113,13 @@ func request_select_character(dest):
rpc_id(1, "_call_on_server", "_client_request_change_character", {"id" : client_id, "current_char_name" : player_char.name, "char_name" : dest})
func client_disconnect():
- if player_char != null:
+ if player_char != null:
player_char.deselect_character()
- client.close_connection()
if is_local:
- local_server_tree.get_root().get_node("GAMEWORLD/Server").stop_server()
- local_server_tree.free()
+ $Server.stop_server()
+ else:
+ client.close_connection()
+
back_to_main()
func _connection_lost():
diff --git a/godot/scripts/Server.gd b/godot/scripts/Server.gd
index b4ab995..498c5d8 100644
--- a/godot/scripts/Server.gd
+++ b/godot/scripts/Server.gd
@@ -25,7 +25,7 @@ func _ready():
if sig != OK:
print("SERVER: Error connecting one or more signals. Error code: " + str(sig))
-func start_server(_server_name: String, _motd: String, max_players: int, map_path: String, _ip: String, port: int, tree, output_obj, output_f):
+func start_server(_server_name: String, _motd: String, max_players: int, map_path: String, is_local: bool, port: int, tree, output_obj, output_f):
output = output_obj
output_func = output_f
server_name = _server_name
@@ -48,6 +48,11 @@ func start_server(_server_name: String, _motd: String, max_players: int, map_pat
return
world.add_child(self)
+ world.client_id = 1
+ world.is_host = true
+ world.is_local = is_local
+ if is_local:
+ connected_players[1] = ["Player", -1]
tree.get_root().add_child(world)
world.client_id = 1
@@ -73,9 +78,9 @@ func _client_disconnect(id):
func _client_connect(id):
print_line("Client (ID: "+str(id)+") connecting...")
connected_player_count += 1
- connected_players[id] = ["", "SPEC"] #Placeholder for name
+ connected_players[id] = ["", -1] #Placeholder for name
- var server_info = {"player_count" : connected_player_count, "server_name" : server_name, "MOTD" : motd, "cam_pos" : world.get_node("DEFAULTCAM").transform}
+ var server_info = {"player_count" : connected_player_count, "server_name" : server_name, "MOTD" : motd, "cam_pos" : world.get_node("DEFAULTCAM").transform, "teams" : {0 : "RED", 1 : "BLUE"}}
world.rpc_id(id, "set_up_server_info", server_info)
var geo_info = []
@@ -91,11 +96,11 @@ func _client_connect(id):
func _client_connection_confirmed(arguments):
print_line("Client (ID: "+str(arguments["id"])+") connected as " +arguments["username"] +".")
- connected_players[arguments["id"]] = [arguments["username"], "SPEC"]
+ connected_players[arguments["id"]] = [arguments["username"], -1]
world.rpc("update_players_info", connected_players)
func _client_change_teams(arguments):
- print_line(connected_players[arguments["id"]][PLAYER_NAME] + " ("+ str(arguments["id"]) +") changed to team " + arguments["team"])
+ print_line(connected_players[arguments["id"]][PLAYER_NAME] + " ("+ str(arguments["id"]) +") changed to team " + str(arguments["team"]))
connected_players[arguments["id"]][PLAYER_TEAM] = arguments["team"]
world.rpc("update_players_info", connected_players)
@@ -106,7 +111,7 @@ func _client_request_change_character(arguments):
dest.rpc("set_net_owner", arguments["id"])
if arguments["current_char_name"] != "NULL":
var old = world.get_node("PLAYERS/"+arguments["current_char_name"])
- old.rpc("set_net_owner", int(1))
+ old.rpc("set_net_owner", int(1), true)
func _client_request_control_vehicle(arguments):
var dest_machine = world.get_node(arguments["machine_path"])
diff --git a/godot/scripts/World.gd b/godot/scripts/World.gd
index 90b3cf7..c560f45 100644
--- a/godot/scripts/World.gd
+++ b/godot/scripts/World.gd
@@ -1,10 +1,6 @@
extends Spatial
-
-var m = SpatialMaterial.new()
var winddir = Vector3(1,0,0)
-onready var pathfinder = get_node("PLAYERS/Player2")
-var path = []
var map_rids
var client_id
var player_char: NetChar
@@ -16,9 +12,6 @@ func _ready():
map_rids = NavigationServer.get_maps()
for rid in map_rids:
NavigationServer.map_set_edge_connection_margin(rid,1.5)
- m.flags_unshaded = true
- m.flags_use_point_size = true
- m.albedo_color = Color.white
#merge all nav meshes onto the main map
yield(get_tree().create_timer(1.0), "timeout")
@@ -33,37 +26,5 @@ remotesync func _call_on_server(function, arguments):
print('Remote server call: ' + function)
$Server.call(function, arguments)
-func find_path():
- var start_pos = $START.global_transform.origin
- var end_pos = $END.global_transform.origin
- var t_path = NavigationServer.map_get_path(WORLD_MAP_RID, start_pos, end_pos, true)
- var path_end = t_path[len(t_path)-1]
- #is path end near desired end
- #if not, is the end point in an unreachable region?
- for rid in map_rids:
- print("map " + str(rid.get_id()))
- for region_rid in NavigationServer.map_get_regions(rid):
- print("region " + str(region_rid.get_id()))
- if NavigationServer.region_owns_point(region_rid, end_pos):
- print("owns target point")
- if NavigationServer.region_owns_point(region_rid, path_end):
- print("owns end point")
- print( (end_pos - t_path[len(t_path)-1]).length() )
- draw_path(t_path)
- pass
-
-func draw_path(path_array):
- var im = get_node("Draw")
- im.set_material_override(m)
- im.clear()
- im.begin(Mesh.PRIMITIVE_POINTS, null)
- im.add_vertex(path_array[0])
- im.add_vertex(path_array[path_array.size() - 1])
- im.end()
- im.begin(Mesh.PRIMITIVE_LINE_STRIP, null)
- for x in path_array:
- im.add_vertex(x)
- im.end()
-
func get_client_id() -> int:
return client_id
diff --git a/godot/scripts/ballistics/NetworkedProjectile.gd b/godot/scripts/ballistics/NetworkedProjectile.gd
index a1d73ac..4f08d77 100644
--- a/godot/scripts/ballistics/NetworkedProjectile.gd
+++ b/godot/scripts/ballistics/NetworkedProjectile.gd
@@ -22,7 +22,7 @@ remote func update_phys_transform(t, lv, av):
func _integrate_forces(_state):
if is_network_master():
- rpc("update_phys_transform", transform, linear_velocity, angular_velocity)
+ rpc_unreliable("update_phys_transform", transform, linear_velocity, angular_velocity)
remotesync func net_remove():
queue_free()
diff --git a/godot/scripts/characters/NetworkedCharacter.gd b/godot/scripts/characters/NetworkedCharacter.gd
index 8a0282d..d904593 100644
--- a/godot/scripts/characters/NetworkedCharacter.gd
+++ b/godot/scripts/characters/NetworkedCharacter.gd
@@ -2,7 +2,7 @@ extends RigidBody
class_name NetChar
# Game
-export var team: String = "RED"
+export var team = 0
export var health: int = 100
export var weapon_slot1: Resource = null
export var weapon_slot2: Resource = null
@@ -40,7 +40,7 @@ remote func set_phys_transform(trfrm: Transform, lvel: Vector3):
transform = trfrm
linear_velocity = lvel
-remotesync func set_net_owner(owner_id: int):
+remotesync func set_net_owner(owner_id: int, singleplayer_reset: bool = false):
$Nametag.text = ""
set_network_master(owner_id)
if owner_id != 1:
@@ -55,12 +55,19 @@ remotesync func set_net_owner(owner_id: int):
$Nametag.visible = true
is_player = false
world.get_node("HUD").update_characters()
+ elif world.is_local:
+ if singleplayer_reset:
+ is_player = false
+ else:
+ world.player_char = self
+ is_player = true
+ world.cam.attach(self, "FIRSTPERSON", "./Neck/Head")
func deselect_character():
- if is_network_master():
+ if is_network_master() and world.player_char == self:
world.player_char = null
- if world.client_id != 1: world.cam.attach(world, "STATIC", "./DEFAULTCAM")
- rpc("set_net_owner", 1)
+ world.cam.attach(world, "STATIC", "./DEFAULTCAM")
+ rpc("set_net_owner", 1, true)
func take_control_of_machine(slave_machine: RigidBody):
machine = slave_machine
diff --git a/godot/scripts/characters/player_controller_new.gd b/godot/scripts/characters/player_controller_new.gd
index 62f5ef6..232e5e0 100644
--- a/godot/scripts/characters/player_controller_new.gd
+++ b/godot/scripts/characters/player_controller_new.gd
@@ -63,6 +63,9 @@ const DROWN_DICT: Dictionary = {"type" : "DROWN", "attacker_net_id" : 1, "attack
# Called when the node enters the scene tree
func _ready() -> void:
+ if get_parent().name == "CREW":
+ team = owner.team
+
if weapon_slot1 == null:
weapon_slot1 = preload("res://scenes/weapons/hands.res")
weapons = [weapon_slot1,weapon_slot2,weapon_slot3,weapon_slot4,weapon_slot5]
@@ -74,8 +77,6 @@ func _ready() -> void:
$"%UseRay".add_exception(self)
$"%MeleeRay".add_exception(self)
- $"%UseRay".add_exception($AreaDetect)
- $"%MeleeRay".add_exception($AreaDetect)
if ai_target_machine_path:
ai_target_machine = get_node(ai_target_machine_path)
@@ -181,15 +182,15 @@ func load_process(delta) -> void:
if use_ray.is_colliding() and use_ray.get_collider().get_parent() == load_target and use_held:
var progress: float =load_target.increase_load(delta)
if progress < 0:
- if get_network_master() != 1: world.hud.hide_progress()
+ if is_player: world.hud.hide_progress()
load_target.reset_load()
loading = false
load_target = null
inventory[load_ammo] -= 1
else:
- if get_network_master() != 1: world.hud.set_progress(progress)
+ if is_player: world.hud.set_progress(progress)
else:
- if get_network_master() != 1: world.hud.hide_progress()
+ if is_player: world.hud.hide_progress()
load_target.reset_load()
loading = false
load_target = null
@@ -263,7 +264,7 @@ func _integrate_forces(state: PhysicsDirectBodyState) -> void:
return
player_state = state
velocity = state.get_linear_velocity()
- for i in range(player_state.get_contact_count()):
+ if is_player: for i in range(player_state.get_contact_count()):
var contact_angle_from_up : float = Vector3.UP.angle_to(player_state.get_contact_local_normal(i))
if contact_angle_from_up > FLOOR_MAX_ANGLE and !is_on_floor:
physics_material_override.friction = 0
@@ -271,11 +272,11 @@ func _integrate_forces(state: PhysicsDirectBodyState) -> void:
if i == player_state.get_contact_count() - 1:
physics_material_override.friction = 1
- rpc("set_phys_transform", transform, linear_velocity)
+ rpc_unreliable("set_phys_transform", transform, linear_velocity)
if global_transform.origin.y < -30:
rpc("damage", 500000, DROWN_DICT)
- nav.set_velocity(velocity)
+ #nav.set_velocity(velocity)
func walk(_delta: float) -> void:
if floor_normal != Vector3.UP: direction = direction.rotated(floor_normal.cross(Vector3.UP).normalized(), Vector3.UP.angle_to(floor_normal))
diff --git a/godot/scripts/machines/NetworkedMachineGDS.gd b/godot/scripts/machines/NetworkedMachineGDS.gd
index 91dbeb4..19ff29a 100644
--- a/godot/scripts/machines/NetworkedMachineGDS.gd
+++ b/godot/scripts/machines/NetworkedMachineGDS.gd
@@ -19,7 +19,7 @@ remotesync func net_apply_impulse(impulse_v: Vector3):
func _integrate_forces(_state: PhysicsDirectBodyState):
if is_network_master() and mode == MODE_RIGID:
- rpc("update_phys_transform", transform, linear_velocity, angular_velocity)
+ rpc_unreliable("update_phys_transform", transform, linear_velocity, angular_velocity)
remotesync func set_net_owner(id: int, char_name: String):
set_network_master(id)
diff --git a/godot/scripts/vehicles/Airplane.gd b/godot/scripts/vehicles/Airplane.gd
index 2de4792..aa084a8 100644
--- a/godot/scripts/vehicles/Airplane.gd
+++ b/godot/scripts/vehicles/Airplane.gd
@@ -154,7 +154,7 @@ func _integrate_forces(state):
ang_vel_target += roll_constant*(roll_dir*roll_curve.curve.interpolate(roll_angle_max-abs(roll_angle)))*global_transform.basis.x
else:
roll_dir = 1 if roll_angle > 0 else -1
- 3*roll_constant*(roll_dir*roll_curve.curve.interpolate(roll_angle_max-abs(roll_angle)))*global_transform.basis.x
+ ang_vel_target += 3*roll_constant*(roll_dir*roll_curve.curve.interpolate(roll_angle_max-abs(roll_angle)))*global_transform.basis.x
#turn (based on how much the plane is rolled (need to add
ang_vel_target += turn_constant*Vector3.UP*roll_angle
diff --git a/godot/scripts/vehicles/Gunboat.gd b/godot/scripts/vehicles/Gunboat.gd
index 1defce2..1403a50 100644
--- a/godot/scripts/vehicles/Gunboat.gd
+++ b/godot/scripts/vehicles/Gunboat.gd
@@ -22,7 +22,7 @@ const damage_threshold = 20
const max_depth = 2
#boat ids
-onready var nav_rid = $NavigationMeshInstance.get_region_rid()
+onready var nav_rid = 0#$NavigationMeshInstance.get_region_rid()
#controls
var throttle: float = 0.0
@@ -43,8 +43,15 @@ func _ready():
for sail in $SAILS.get_children():
sail.set_sheet(sail_out)
world = get_tree().get_root().find_node("GAMEWORLD", true, false)
+ var plr = get_tree().get_root().find_node("PLAYERS", true, false)
+ for player in get_node("CREW").get_children():
+ var t: Transform = player.global_transform
+ get_node("CREW").remove_child(player)
+ plr.add_child(player, true)
+ player.global_transform = t
+ #call_deferred("remove_child", get_node("CREW"))
if get_tree().get_network_unique_id() == 1:
- print("enabling navigation for server")
+ pass#print("enabling navigation for server")
#$NavigationMeshInstance.set_enabled(true)
func on_no_control():