diff options
Diffstat (limited to 'godot/scripts')
| -rw-r--r-- | godot/scripts/GameBase.gd | 3 | ||||
| -rw-r--r-- | godot/scripts/ballistics/Cannonball.gd | 13 | ||||
| -rw-r--r-- | godot/scripts/cameras/PlayerCamGDS.gd | 20 | ||||
| -rw-r--r-- | godot/scripts/characters/player_controller_new.gd | 84 | ||||
| -rw-r--r-- | godot/scripts/machines/Cannon.gd | 6 | ||||
| -rw-r--r-- | godot/scripts/machines/NetworkedMachineGDS.gd | 1 | ||||
| -rw-r--r-- | godot/scripts/vehicles/Gunboat.gd | 24 |
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(): |
