summaryrefslogtreecommitdiff
path: root/godot/scripts
diff options
context:
space:
mode:
authorAnson Bridges <bridges.anson@gmail.com>2022-09-19 17:44:22 -0400
committerAnson Bridges <bridges.anson@gmail.com>2022-09-19 17:44:22 -0400
commit1d347e770fddcdd051890cdf070fd2779ab113bf (patch)
tree6501fb000509819b7ba58df15c9a831c8bdc44fb /godot/scripts
parent2fd755132f526c48fed2c1867530526971e1cf19 (diff)
problems: player controller perf, boat perf, NAVSERVER PERF
Diffstat (limited to 'godot/scripts')
-rw-r--r--godot/scripts/GameBase.gd3
-rw-r--r--godot/scripts/ballistics/Cannonball.gd13
-rw-r--r--godot/scripts/cameras/PlayerCamGDS.gd20
-rw-r--r--godot/scripts/characters/player_controller_new.gd84
-rw-r--r--godot/scripts/machines/Cannon.gd6
-rw-r--r--godot/scripts/machines/NetworkedMachineGDS.gd1
-rw-r--r--godot/scripts/vehicles/Gunboat.gd24
7 files changed, 81 insertions, 70 deletions
diff --git a/godot/scripts/GameBase.gd b/godot/scripts/GameBase.gd
index be430d4..e8f7ad0 100644
--- a/godot/scripts/GameBase.gd
+++ b/godot/scripts/GameBase.gd
@@ -29,7 +29,8 @@ 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")
+ cam.attach($DEFAULTCAM, "STATIC", NodePath("."))
+
rpc_id(1, "_call_on_server", "_client_connection_confirmed", {"id" : client_id, "username" : player_name})
diff --git a/godot/scripts/ballistics/Cannonball.gd b/godot/scripts/ballistics/Cannonball.gd
index d1937f4..7cf59e5 100644
--- a/godot/scripts/ballistics/Cannonball.gd
+++ b/godot/scripts/ballistics/Cannonball.gd
@@ -1,17 +1,20 @@
extends "res://scripts/ballistics/NetworkedProjectile.gd"
-export var drag_constant = 0.3
+export var drag_constant: float = 0.3
var damage_exceptions = []
-var oldvel
+var oldvel: Vector3
func _physics_process(_delta):
- oldvel = linear_velocity
- add_force(-1*linear_velocity*drag_constant, Vector3.ZERO)
+ if is_network_master():
+ oldvel = linear_velocity
+ add_force(-1*linear_velocity*drag_constant, Vector3.ZERO)
+ if global_transform.origin.y < -20:
+ rpc("net_remove")
func get_init_info():
return {"linear_velocity" : linear_velocity, "angular_velocity" : angular_velocity, "oldvel" : oldvel, "shooter" : shooter, "shooter_id" : shooter_id}
func _on_collision(body):
- if oldvel.length() > 20 and !damage_exceptions.has(body) and body.has_method("damage"):
+ if is_network_master() and oldvel.length() > 20 and !damage_exceptions.has(body) and body.has_method("damage"):
body.rpc("damage", oldvel.length(), "blunt", [shooter_id, shooter], "using 'cannon'")
damage_exceptions.append(body)
diff --git a/godot/scripts/cameras/PlayerCamGDS.gd b/godot/scripts/cameras/PlayerCamGDS.gd
index ec46cf8..382ec06 100644
--- a/godot/scripts/cameras/PlayerCamGDS.gd
+++ b/godot/scripts/cameras/PlayerCamGDS.gd
@@ -1,24 +1,24 @@
extends ClippedCamera
-var _modes = ["STATIC", "FIRSTPERSON", "THIRDPERSON", "ARM", "FREECAM"]
-var mode = "STATIC" #STATIC, FIRSTPERSON, THIRDPERSON, ARM, FREECAM
+var _modes: PoolStringArray = ["STATIC", "FIRSTPERSON", "THIRDPERSON", "ARM", "FREECAM"]
+var mode: String = "STATIC" #STATIC, FIRSTPERSON, THIRDPERSON, ARM, FREECAM
#first/third person variables
-var head : Spatial = null
-var neck : Spatial = null
-var player : RigidBody = null
+var head: Spatial = null
+var neck: Spatial = null
+var player: RigidBody = null
#third person/arm variables
-var arm : SpringArm = null
+var arm: SpringArm = null
-var mouse_axis := Vector2()
-var mouse_sensitivity = 12.0
+var mouse_axis: Vector2
+var mouse_sensitivity: float = 12.0
func _ready():
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
current = true
-func _input(event):
+func _input(event: InputEvent):
if event is InputEventMouseMotion and Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED:
mouse_axis = event.relative
match mode:
@@ -35,7 +35,7 @@ func _input(event):
_:
pass
-func attach(new_parent: Node, c_mode, extra_path = "."):
+func attach(new_parent: Node, c_mode: String, extra_path: String = "."):
if get_parent():
get_parent().remove_child(self)
if c_mode in _modes:
diff --git a/godot/scripts/characters/player_controller_new.gd b/godot/scripts/characters/player_controller_new.gd
index aa739a6..bc41842 100644
--- a/godot/scripts/characters/player_controller_new.gd
+++ b/godot/scripts/characters/player_controller_new.gd
@@ -1,15 +1,15 @@
extends RigidBody
# Game
-export var team = "RED"
-export (int) var health = 100
-var weapon = null
-var world
+export var team: String = "RED"
+export var health: int = 100
+var weapon: Node = null
+var world: Spatial = null
# Camera
-export(float) var mouse_sensitivity = 12.0
-export(float) var FOV = 90.0
-var mouse_axis := Vector2()
+export var mouse_sensitivity:float = 12.0
+export var FOV:float = 90.0
+var mouse_axis: Vector2 = Vector2.ZERO
onready var head: Spatial = $Neck/Head
onready var neck: Spatial = $Neck
@@ -18,31 +18,31 @@ var velocity := Vector3()
var direction := Vector3()
var move_axis := Vector2()
var floorspeed := Vector3()
-var jumping = false
-var can_jump = true
-onready var nav = $NavigationAgent
+var jumping:bool = false
+var can_jump:bool = true
+onready var nav: NavigationAgent = $NavigationAgent
# Walk
const FLOOR_MAX_ANGLE: float = deg2rad(46.0)
-export(float) var jump_height = 400.0
-var in_water : bool = false
-var swim_speed : float = 450.0
-var climb_speed : float = 5.0
+export var jump_height: float = 300.0
+var in_water: bool = false
+var swim_speed: float = 450.0
+var climb_speed: float = 5.0
# Control
-var controlling_machine = false #whether character is riding/controlling something
-var machine = null
-export var is_player = false #whether character is currently controlled by a player
-var ladder_m = null
+var controlling_machine: bool = false #whether character is riding/controlling something
+var machine: RigidBody = null
+export var is_player: bool = false #whether character is currently controlled by a player
+var ladder_m: Spatial = null
#physics
-var player_state : PhysicsDirectBodyState
-var is_on_floor:bool
-var floor_normal : Vector3 = Vector3.UP
-var acceleration = 80.0
-export(int) var walk_speed = 5
-var c_friction = 4.0
-var air_control = 0.3
+var player_state: PhysicsDirectBodyState = null
+var is_on_floor:bool = false
+var floor_normal: Vector3 = Vector3.UP
+var acceleration:float = 80.0
+export var walk_speed:float = 5.0
+var c_friction:float = 4.0
+var air_control:float = 0.3
# Called when the node enters the scene tree
func _ready() -> void:
@@ -55,15 +55,15 @@ func _ready() -> void:
$"%UseRay".add_exception($AreaDetect)
$"%MeleeRay".add_exception($AreaDetect)
-func get_init_info():
+func get_init_info() -> Dictionary:
return {"linear_velocity" : linear_velocity, "angular_velocity" : angular_velocity, "controlling_machine" : controlling_machine, "team" : team, "health" : health, "nametag" : $Nametag.text}
-func mp_init(init_info):
+func mp_init(init_info: Dictionary):
for variable in init_info.keys():
set(variable, init_info[variable])
$Nametag.text = init_info["nametag"]
-remote func set_phys_transform(trfrm, lvel):
+remote func set_phys_transform(trfrm: Transform, lvel: Vector3):
transform = trfrm
linear_velocity = lvel
@@ -110,7 +110,7 @@ func initiate_use():
_:
pass
-remotesync func set_net_owner(owner_id):
+remotesync func set_net_owner(owner_id: int):
$Nametag.text = ""
set_network_master(owner_id)
if owner_id != 1:
@@ -132,7 +132,7 @@ func deselect_character():
if world.client_id != 1: world.cam.attach(world, "STATIC", "./DEFAULTCAM")
rpc("set_net_owner", 1)
-func take_control_of_machine(slave_machine):
+func take_control_of_machine(slave_machine: RigidBody):
machine = slave_machine
controlling_machine = true
@@ -169,7 +169,9 @@ func on_floor_test() -> bool:
return false
#modify simulated physics results
-func _integrate_forces(state) -> void:
+func _integrate_forces(state: PhysicsDirectBodyState) -> void:
+ if !is_network_master():
+ return
player_state = state
velocity = state.get_linear_velocity()
$normal_vis.look_at($normal_vis.global_transform.origin + global_transform.basis.z, floor_normal)
@@ -180,12 +182,12 @@ func _integrate_forces(state) -> void:
break
if i == player_state.get_contact_count() - 1:
friction = 1
- if is_network_master():
- rpc("set_phys_transform", transform, linear_velocity)
- if global_transform.origin.y < -30:
- rpc("damage", 500000, "drown", [1, "Davy Jones"])
+
+ rpc("set_phys_transform", transform, linear_velocity)
+ if global_transform.origin.y < -30:
+ rpc("damage", 500000, "drown", [1, "Davy Jones"])
-func walk(_delta:float) -> void:
+func walk(_delta: float) -> void:
# Input
direction = Vector3()
var aim: Basis = head.get_global_transform().basis
@@ -224,7 +226,7 @@ func jump():
yield(get_tree().create_timer(0.05),"timeout")
can_jump = true
-func swim(_delta):
+func swim(_delta: float):
#drag and buoyancy
add_central_force(Vector3.UP*weight*1.0)
add_central_force(-1*linear_velocity*100)
@@ -242,7 +244,7 @@ func enter_water():
func exit_water():
in_water = false
-func mount_ladder(target_ladder):
+func mount_ladder(target_ladder: Spatial):
var ladder_tracker = Spatial.new()
ladder_tracker.name = name
target_ladder.add_child(ladder_tracker)
@@ -258,7 +260,7 @@ func mount_ladder(target_ladder):
set_gravity_scale(0.0)
#called each frame while climbing ladder
-func climb_ladder(delta):
+func climb_ladder(delta: float):
var new_ladder_pos = ladder_m.global_transform.origin + ladder_m.global_transform.basis.y.normalized() * move_axis.x * delta * climb_speed
var prog = ladder_m.get_parent().get_climb_scalar(new_ladder_pos)
if prog >= 0.0 and prog <= 1.0:
@@ -274,7 +276,7 @@ func leave_ladder():
ladder_m.queue_free()
ladder_m = null
-remotesync func damage(dmg_amt, _type, shooter, extra = ""):
+remotesync func damage(dmg_amt: int, _type: String, shooter: Array, extra: String):
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")
@@ -291,5 +293,5 @@ remotesync func remove_dead_character():
deselect_character()
queue_free()
-remotesync func net_apply_impulse(impulse_v):
+remotesync func net_apply_impulse(impulse_v: Vector3):
apply_central_impulse(impulse_v)
diff --git a/godot/scripts/machines/Cannon.gd b/godot/scripts/machines/Cannon.gd
index 80c32ef..b8d9f38 100644
--- a/godot/scripts/machines/Cannon.gd
+++ b/godot/scripts/machines/Cannon.gd
@@ -34,8 +34,8 @@ func mp_init(init_info):
# Called when the node enters the scene tree for the first time.
func _ready():
if get_parent().name != "MACHINES": #if cannon is aboard ship
- add_collision_exception_with(get_parent())
- mode = RigidBody.MODE_STATIC
+ add_collision_exception_with(get_parent().get_parent())
+ mode = RigidBody.MODE_KINEMATIC
world_ballistics = world.get_node("BALLISTICS")
func on_new_control():
@@ -75,7 +75,7 @@ remotesync func fire():
cball.shooter = user.name + " (" + world.players_info[user.get_network_master()][0] + ")"
cball.shooter_id = user.get_network_master()
cooldown = fire_rate
- if mode == RigidBody.MODE_STATIC:
+ if mode == RigidBody.MODE_KINEMATIC:
get_parent().apply_impulse($YawJoint/PitchJoint.global_transform.origin - get_parent().global_transform.origin, -1*cball.mass*ball_speed*muzzle.global_transform.basis.x)
else:
if is_network_master(): apply_impulse($YawJoint/PitchJoint.global_transform.origin - global_transform.origin, -1*cball.mass*ball_speed*muzzle.global_transform.basis.x)
diff --git a/godot/scripts/machines/NetworkedMachineGDS.gd b/godot/scripts/machines/NetworkedMachineGDS.gd
index c1d755d..eb675d0 100644
--- a/godot/scripts/machines/NetworkedMachineGDS.gd
+++ b/godot/scripts/machines/NetworkedMachineGDS.gd
@@ -5,7 +5,6 @@ var user: RigidBody = null
var world: Spatial = null
func _ready():
- print("net machine loads world")
world = get_tree().get_root().find_node("GAMEWORLD", true, false)
remote func update_phys_transform(t: Transform, lv: Vector3, av: Vector3):
diff --git a/godot/scripts/vehicles/Gunboat.gd b/godot/scripts/vehicles/Gunboat.gd
index 3137361..4c822ca 100644
--- a/godot/scripts/vehicles/Gunboat.gd
+++ b/godot/scripts/vehicles/Gunboat.gd
@@ -2,11 +2,11 @@ extends "res://scripts/machines/NetworkedMachineGDS.gd"
export var team = 0
-const accel = 50000
+const accel = 500000
const turn_accel = 50000
export(float, 0.0, 1.0) var sail_out = 0.0
-export var sail_speed : float = 0.5
+export var sail_speed : float = 0.2
var sail_turn = 0
export var sail_turn_speed = 30
const SAIL_MAX = 90
@@ -38,7 +38,11 @@ func mp_init(init_info):
# Called when the node enters the scene tree for the first time.
func _ready():
+ print("adding gunboat to scene",get_tree().get_network_unique_id())
world = get_tree().get_root().find_node("GAMEWORLD", true, false)
+ if get_tree().get_network_unique_id() == 0:
+ print("enabling navigation for server")
+ $NavigationMeshInstance.set_enabled(true)
func on_no_control():
rudder = 0.0
@@ -46,6 +50,7 @@ func on_no_control():
mainsheet = 0.0
func auto_sail(delta):
+ return
var in_range = global_transform.basis.x.dot(world.winddir) >= 0
if in_range:
if Vector2(world.winddir.x, world.winddir.z).angle_to(Vector2($Mast.global_transform.basis.x.x,$Mast.global_transform.basis.x.z)) < 0:
@@ -71,15 +76,16 @@ remotesync func damage(amount, _type, _shooter, _extra = ""):
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _physics_process(delta):
if is_network_master():
- $Mast/Sail.scale.y = sail_out
+ for sail in $SAILS.get_children():
+ sail.set_sheet(sail_out)
$Rudder.rotation_degrees.y = rudder_turn
- $Mast.rotation_degrees.y = sail_turn
- var push_force = accel*sail_out*world.winddir.dot($Mast.global_transform.basis.x)
- if world.winddir.angle_to($Mast.global_transform.basis.x) < PI/2:
- add_force(global_transform.basis.x*push_force, Vector3.ZERO)
+ #$Mast.rotation_degrees.y = sail_turn
+ #var push_force = accel*sail_out*world.winddir.dot($Mast.global_transform.basis.x)
+ #if world.winddir.angle_to($Mast.global_transform.basis.x) < PI/2:
+ # add_force(global_transform.basis.x*push_force, Vector3.ZERO)
add_torque(Vector3(0,-rudder_turn*rudder_constant*(0.5+linear_velocity.dot(global_transform.basis.x)),0))
- add_torque(Vector3(-10000000*angular_velocity.x,0,0))
- add_torque(Vector3(0,0,-10000000*angular_velocity.z))
+ add_torque(Vector3(-100000*angular_velocity.x,0,0))
+ add_torque(Vector3(0,0,-100000*angular_velocity.z))
rudder_turn += rudder_speed*delta*(-0.25 if rudder_turn > 0 else 0.25)
for point in $FloatPoints.get_children():
for area in point.get_overlapping_areas():