summaryrefslogtreecommitdiff
path: root/godot/scripts
diff options
context:
space:
mode:
authorAnson Bridges <bridges.anson@gmail.com>2022-10-19 14:13:47 -0400
committerAnson Bridges <bridges.anson@gmail.com>2022-10-19 14:13:47 -0400
commit5100ec45264ff36a2558757e76198b8b25866992 (patch)
treecd1fd239fe0380028c1d77e456a49ecf186830d6 /godot/scripts
parente826b74a104e72ec398aa55bd5dceb13b5a0dae1 (diff)
server work
Diffstat (limited to 'godot/scripts')
-rw-r--r--godot/scripts/Server.gd23
-rw-r--r--godot/scripts/characters/NetworkedCharacter.gd15
-rw-r--r--godot/scripts/characters/player_controller_new.gd8
-rw-r--r--godot/scripts/vehicles/Airplane.gd24
-rw-r--r--godot/scripts/vehicles/Gunboat.gd4
5 files changed, 48 insertions, 26 deletions
diff --git a/godot/scripts/Server.gd b/godot/scripts/Server.gd
index e360703..b4ab995 100644
--- a/godot/scripts/Server.gd
+++ b/godot/scripts/Server.gd
@@ -6,6 +6,7 @@ var server_name : String
var player_limit : int
var connected_player_count : int = 0
var connected_players = {}
+enum {PLAYER_NAME, PLAYER_TEAM}
var server_enet : NetworkedMultiplayerENet
var output
@@ -52,6 +53,7 @@ func start_server(_server_name: String, _motd: String, max_players: int, map_pat
world.client_id = 1
print_line("Server started successfully.")
+ NavigationServer.set_active(false)
func stop_server():
print_line("Shutting down server...")
@@ -93,14 +95,14 @@ func _client_connection_confirmed(arguments):
world.rpc("update_players_info", connected_players)
func _client_change_teams(arguments):
- print_line(connected_players[arguments["id"]][0] + " ("+ str(arguments["id"]) +") changed to team " + arguments["team"])
- connected_players[arguments["id"]][1] = arguments["team"]
+ print_line(connected_players[arguments["id"]][PLAYER_NAME] + " ("+ str(arguments["id"]) +") changed to team " + arguments["team"])
+ connected_players[arguments["id"]][PLAYER_TEAM] = arguments["team"]
world.rpc("update_players_info", connected_players)
func _client_request_change_character(arguments):
var dest = world.get_node("PLAYERS/"+arguments["char_name"])
if dest != null and dest.get_network_master() == 1:
- print_line(connected_players[arguments["id"]][0] + " selected character " + arguments["char_name"])
+ print_line(connected_players[arguments["id"]][PLAYER_NAME] + " selected character " + arguments["char_name"])
dest.rpc("set_net_owner", arguments["id"])
if arguments["current_char_name"] != "NULL":
var old = world.get_node("PLAYERS/"+arguments["current_char_name"])
@@ -108,21 +110,24 @@ func _client_request_change_character(arguments):
func _client_request_control_vehicle(arguments):
var dest_machine = world.get_node(arguments["machine_path"])
- var name = "BOT" if arguments["id"] == 1 else connected_players[arguments["id"]][0]
+ var name = "BOT" if arguments["id"] == 1 else connected_players[arguments["id"]][PLAYER_NAME]
if dest_machine != null and dest_machine.get_network_master() == 1 and !dest_machine.in_use:
print_line(arguments["char_name"] + "(" + name + ") is controlling " + dest_machine.name)
dest_machine.rpc("set_net_owner", arguments["id"], arguments["char_name"])
func _character_death(arguments):
- var victim_player = connected_players[arguments["victim_mp_id"]][0] if arguments["victim_mp_id"] != 1 else ""
- print_line(arguments["victim"] + " ("+victim_player+") killed by " + arguments["killer"] + " " + arguments["extra"] + ".")
- world.rpc("game_chat_msg", arguments["victim"] + " ("+victim_player+") killed by " + arguments["killer"] + " " + arguments["extra"] + ".")
- world.get_node("PLAYERS/"+arguments["victim"]).rpc("remove_dead_character")
+ if world.get_node("PLAYERS/"+arguments["victim_name"]) == null:
+ return
+ var victim_player: String = connected_players[arguments["victim_mp_id"]][PLAYER_NAME] if arguments["victim_mp_id"] != 1 else arguments["victim_name"]
+ var killer_player: String = connected_players[arguments["killer_id"]][PLAYER_NAME] if arguments["killer_id"] != 1 else arguments["killer_name"]
+ print_line(victim_player+" killed by " +killer_player+ " using " + arguments["extra"] + ".")
+ world.rpc("game_chat_msg", victim_player+" killed by " +killer_player+ " using " + arguments["extra"] + ".")
+ world.get_node("PLAYERS/"+arguments["victim_name"]).rpc("remove_dead_character")
world.rpc("game_update_chars")
func _send_chat(arguments):
if !("name" in arguments):
- arguments["name"]=connected_players[arguments["id"]][0]
+ arguments["name"]=connected_players[arguments["id"]][PLAYER_NAME]
print_line(arguments["name"]+ ": " + arguments["msg"])
world.rpc("game_chat_msg", arguments["name"]+ ": " + arguments["msg"])
diff --git a/godot/scripts/characters/NetworkedCharacter.gd b/godot/scripts/characters/NetworkedCharacter.gd
index c14d46f..8a0282d 100644
--- a/godot/scripts/characters/NetworkedCharacter.gd
+++ b/godot/scripts/characters/NetworkedCharacter.gd
@@ -71,17 +71,22 @@ func lose_machine():
controlling_machine = false
machine = null
-remotesync func damage(dmg_amt: int, _type: String, shooter: Array, extra: String):
+#args format
+#attacker_net_id
+#attacker_name
+#damage_type
+#weapon_name
+remotesync func damage(dmg_amt: int, args: Dictionary):
print(dmg_amt)
health -= dmg_amt
if health <= 0 and is_network_master():
- if shooter[0] != get_network_master() and shooter[0] != 1: world.rpc_id(shooter[0], "game_killsound")
+ if args["attacker_net_id"] != get_network_master() and args["attacker_net_id"] != 1: world.rpc_id(args["attacker_net_id"], "game_killsound")
if get_network_master() == 1:
- world._call_on_server("_character_death", {"killer_id" : shooter[0], "killer" : shooter[1], "victim_mp_id" : get_network_master(), "victim" : name, "extra" : extra})
+ world._call_on_server("_character_death", {"killer_id" : args["attacker_net_id"], "killer_name" : args["attacker_name"], "victim_mp_id" : get_network_master(), "victim_name" : name, "extra" : args["weapon_name"]})
else:
- world.rpc_id(1, "_call_on_server", "_character_death", {"killer_id" : shooter[0], "killer" : shooter[1], "victim_mp_id" : get_network_master(), "victim" : name, "extra" : extra})
+ world.rpc_id(1, "_call_on_server", "_character_death", {"killer_id" : args["attacker_net_id"], "killer_name" : args["attacker_name"], "victim_mp_id" : get_network_master(), "victim_name" : name, "extra" : args["weapon_name"]})
elif is_network_master():
- if shooter[0] != get_network_master() and shooter[0] != 1: world.rpc_id(shooter[0], "game_hitsound")
+ if args["attacker_net_id"] != get_network_master() and args["attacker_net_id"] != 1: world.rpc_id(args["attacker_net_id"], "game_hitsound")
remotesync func remove_dead_character():
if is_network_master() and machine != null:
diff --git a/godot/scripts/characters/player_controller_new.gd b/godot/scripts/characters/player_controller_new.gd
index 6d45415..d78b6e3 100644
--- a/godot/scripts/characters/player_controller_new.gd
+++ b/godot/scripts/characters/player_controller_new.gd
@@ -38,6 +38,8 @@ export var walk_speed:float = 5.0
var c_friction:float = 4.0
var air_control:float = 0.3
+var idle_t: bool = true
+
#ai
onready var ai_state_machine:StateMachine = get_node("AIStateMachine")
enum AIStates { IDLE, MAN_CANNON }
@@ -57,6 +59,8 @@ var ai_should_track: bool = false
var ai_track_object: Spatial = null
const AI_LOOK_SPEED: float = 4.0
+const DROWN_DICT: Dictionary = {"type" : "DROWN", "attacker_net_id" : 1, "attacker_name" : "Davy Jones", "weapon_name" : "his locker"}
+
# Called when the node enters the scene tree
func _ready() -> void:
if weapon_slot1 == null:
@@ -269,7 +273,7 @@ func _integrate_forces(state: PhysicsDirectBodyState) -> void:
rpc("set_phys_transform", transform, linear_velocity)
if global_transform.origin.y < -30:
- rpc("damage", 500000, "drown", [1, "Davy Jones"], "")
+ rpc("damage", 500000, DROWN_DICT)
nav.set_velocity(velocity)
@@ -354,7 +358,7 @@ func leave_ladder():
if (ladder_m.get_parent().top.global_transform.origin - global_transform.origin).length_squared() < 0.01:
apply_central_impulse(-400*ladder_m.global_transform.basis.z)
global_transform.basis = world.global_transform.basis
- neck.set_global_rotation(old_neck_rot)
+ neck.set_global_rotation(Vector3(0,old_neck_rot.y,0))
set_gravity_scale(1.0)
ladder_m.queue_free()
ladder_m = null
diff --git a/godot/scripts/vehicles/Airplane.gd b/godot/scripts/vehicles/Airplane.gd
index 8ac755b..705820d 100644
--- a/godot/scripts/vehicles/Airplane.gd
+++ b/godot/scripts/vehicles/Airplane.gd
@@ -9,7 +9,7 @@ var brake_control : float = 0.0
const boost_length = 8
const turn_constant = 0.45
const roll_constant = 0.5
-const pitch_constant = 0.9
+const pitch_constant = 0.3
const drag_constant = 0.4
const v_angle_max = 1.0472 #60 deg, also top and bottom of regular steering
const v_angle_min = -1.45626 #-85 deg
@@ -46,7 +46,7 @@ remotesync func set_net_owner(id, char_name):
set_network_master(id)
if id == 1 and char_name == "NONE": #not under control
on_no_control()
- if user != null:
+ if user != null and is_instance_valid(user):
user.lose_machine()
user = null
in_use = false
@@ -66,8 +66,12 @@ func on_new_control():
user.global_transform.origin = $Cockpit.global_transform.origin
func on_no_control():
+ if !is_instance_valid(user): return
user.remove_collision_exception_with(self)
user.global_transform.origin = $PilotExit.global_transform.origin
+ var old_neck_rot = user.neck.get_global_rotation()
+ user.global_transform.basis = world.global_transform.basis
+ user.neck.set_global_rotation(Vector3(0,old_neck_rot.y,0))
func attack1():
pass
@@ -111,7 +115,7 @@ func _physics_process(delta):
if boosting:
add_force(global_transform.basis.x*booster_force,Vector3.ZERO)
countdown -= delta
- if in_use and user.get_network_master() == world.client_id:
+ if in_use and is_network_master():
user.global_transform.origin = $Cockpit.global_transform.origin
user.global_transform.basis = $Cockpit.global_transform.basis.orthonormalized()
user.set_linear_velocity(get_linear_velocity())
@@ -128,13 +132,14 @@ func _physics_process(delta):
if linear_velocity.length() > 16 and linear_velocity.angle_to(global_transform.basis.x) < 0.25:
var v_dir = 1 if linear_velocity.y > 0 else -1
vel_slow = v_dir*sqrt(abs(2*9.8*linear_velocity.y*delta)) + drag_constant + brake_control*5
- add_force(-1*linear_velocity.normalized()*vel_slow*mass,Vector3.ZERO)
+ #add_force(-1*linear_velocity.normalized()*vel_slow*mass,Vector3.ZERO)
func _integrate_forces(state):
if is_network_master():
if linear_velocity.angle_to(global_transform.basis.x) < 0.25:
set_linear_velocity(get_linear_velocity().slerp(transform.basis.x*linear_velocity.length(),0.1))
if linear_velocity.length() > 25:
+ gravity_scale = 0
#linear_velocity = linear_velocity.normalized()*(linear_velocity.length()-vel_slow)
var ang_vel_target = Vector3.ZERO
#pitch plane
@@ -145,15 +150,18 @@ func _integrate_forces(state):
#roll (rotate around lengthwise axis)
var is_returning = 3 if roll_dir == 0 else 1 #return to flat quicker
- print(roll_constant*is_returning*(roll_dir*roll_curve.curve.interpolate((roll_angle_max-roll_angle)/roll_angle_max))*global_transform.basis.x)
- ang_vel_target += roll_constant*is_returning*(roll_dir*roll_curve.curve.interpolate(roll_angle_max-roll_angle))*global_transform.basis.x
-
+ #print(linear_velocity, roll_angle)
+ if roll_dir != 0:
+ 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
#turn (based on how much the plane is rolled (need to add
ang_vel_target += turn_constant*Vector3.UP*roll_angle
#apply angular velocity
angular_velocity = ang_vel_target#lerp(angular_velocity,ang_vel_target,0.1)
-
+ gravity_scale = 1
#linear_velocity += parentvel[0]; angular_velocity += parentvel[1]
rpc("update_phys_transform", transform, linear_velocity, angular_velocity)
diff --git a/godot/scripts/vehicles/Gunboat.gd b/godot/scripts/vehicles/Gunboat.gd
index fe5473a..1defce2 100644
--- a/godot/scripts/vehicles/Gunboat.gd
+++ b/godot/scripts/vehicles/Gunboat.gd
@@ -43,9 +43,9 @@ func _ready():
for sail in $SAILS.get_children():
sail.set_sheet(sail_out)
world = get_tree().get_root().find_node("GAMEWORLD", true, false)
- if get_tree().get_network_unique_id() == 0:
+ if get_tree().get_network_unique_id() == 1:
print("enabling navigation for server")
- $NavigationMeshInstance.set_enabled(true)
+ #$NavigationMeshInstance.set_enabled(true)
func on_no_control():
rpc("reset_controls")