summaryrefslogtreecommitdiff
path: root/godot/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'godot/scripts')
-rw-r--r--godot/scripts/GameBase.gd9
-rw-r--r--godot/scripts/Server.gd2
-rw-r--r--godot/scripts/ballistics/Cannonball.gd2
-rw-r--r--godot/scripts/ballistics/NetworkedProjectile.gd6
-rw-r--r--godot/scripts/characters/player_controller_new.gd99
-rw-r--r--godot/scripts/machines/Cannon.gd19
-rw-r--r--godot/scripts/machines/NetworkedMachineGDS.gd1
-rw-r--r--godot/scripts/vehicles/Gunboat.gd7
8 files changed, 119 insertions, 26 deletions
diff --git a/godot/scripts/GameBase.gd b/godot/scripts/GameBase.gd
index cff8bf4..85af89a 100644
--- a/godot/scripts/GameBase.gd
+++ b/godot/scripts/GameBase.gd
@@ -19,11 +19,11 @@ var winddir = Vector3(1,0,0)
func _process(delta):
$HUD/Health.text = str(player_char.health) if player_char != null else ""
if is_local:
- local_server_tree.idle(delta)
+ local_server_tree.call("idle",delta)
func _physics_process(delta):
if is_local:
- local_server_tree.iteration(delta)
+ local_server_tree.call("iteration", delta)
remote func set_up_server_info(info):
$HUD/ServerJoinMenu/MOTD.text = info["MOTD"]
@@ -118,5 +118,8 @@ func is_chatting_f() -> bool:
func get_players_info(id: int, index: int) -> String:
return players_info[id][index]
-func set_player_char(character: RigidBody) -> void:
+func set_player_char(character) -> void:
player_char = character
+
+func get_cam():
+ return cam
diff --git a/godot/scripts/Server.gd b/godot/scripts/Server.gd
index d26af94..b4b0a28 100644
--- a/godot/scripts/Server.gd
+++ b/godot/scripts/Server.gd
@@ -104,7 +104,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", 1)
+ old.rpc("set_net_owner", int(1))
func _client_request_control_vehicle(arguments):
var dest_machine = world.get_node(arguments["machine_path"])
diff --git a/godot/scripts/ballistics/Cannonball.gd b/godot/scripts/ballistics/Cannonball.gd
index 7cf59e5..241fc7d 100644
--- a/godot/scripts/ballistics/Cannonball.gd
+++ b/godot/scripts/ballistics/Cannonball.gd
@@ -16,5 +16,5 @@ func get_init_info():
func _on_collision(body):
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'")
+ body.rpc("damage", oldvel.length(), "BLUNT", [shooter_id, shooter], "using 'cannon'")
damage_exceptions.append(body)
diff --git a/godot/scripts/ballistics/NetworkedProjectile.gd b/godot/scripts/ballistics/NetworkedProjectile.gd
index 9703fa5..a7de71a 100644
--- a/godot/scripts/ballistics/NetworkedProjectile.gd
+++ b/godot/scripts/ballistics/NetworkedProjectile.gd
@@ -8,6 +8,9 @@ var shooter_id = 1
func _ready():
pass # Replace with function body.
+remotesync func set_nm(id):
+ set_network_master(id)
+
func mp_init(init_info):
for variable in init_info.keys():
set(variable, init_info[variable])
@@ -27,3 +30,6 @@ remotesync func net_remove():
func net_master_remove():
if is_network_master():
rpc("net_remove")
+
+remotesync func net_apply_impulse(impulse_v: Vector3):
+ apply_central_impulse(impulse_v)
diff --git a/godot/scripts/characters/player_controller_new.gd b/godot/scripts/characters/player_controller_new.gd
index a6a0827..a61ef1d 100644
--- a/godot/scripts/characters/player_controller_new.gd
+++ b/godot/scripts/characters/player_controller_new.gd
@@ -3,8 +3,16 @@ extends RigidBody
# Game
export var team: String = "RED"
export var health: int = 100
-var weapon: Node = null
+export var weapon_slot1: Resource = null
+export var weapon_slot2: Resource = null
+export var weapon_slot3: Resource = null
+export var weapon_slot4: Resource = null
+export var weapon_slot5: Resource = null
+var weapons = [null,null,null,null,null]
+var weapon: Resource = null
var world: Spatial = null
+var carrying: bool = false
+var carrying_object: RigidBody = null
# Camera
export var mouse_sensitivity:float = 12.0
@@ -12,6 +20,10 @@ export var FOV:float = 90.0
var mouse_axis: Vector2 = Vector2.ZERO
onready var head: Spatial = $Neck/Head
onready var neck: Spatial = $Neck
+onready var melee_ray: RayCast = $"%MeleeRay"
+onready var gun_ray: RayCast = $Neck/Head/GunRay
+onready var carry_point: Position3D = $Neck/Head/CarryPoint
+onready var viewmodel: Spatial = $Neck/Head/VIEWMODEL_ARMS
# Move
var velocity := Vector3()
@@ -46,8 +58,13 @@ var air_control:float = 0.3
# Called when the node enters the scene tree
func _ready() -> void:
- weapon = preload("res://scenes/weapons/w_Rockets.tscn").instance()
- add_child(weapon)
+ if weapon_slot1 == null:
+ weapon_slot1 = preload("res://scenes/weapons/hands.res")
+ weapons = [weapon_slot1,weapon_slot2,weapon_slot3,weapon_slot4,weapon_slot5]
+ for w in weapons:
+ if w!= null:
+ w.init(self)
+ weapon = weapons[0]
world = get_tree().get_root().get_node("GAMEWORLD")
$"%UseRay".add_exception(self)
@@ -55,6 +72,10 @@ func _ready() -> void:
$"%UseRay".add_exception($AreaDetect)
$"%MeleeRay".add_exception($AreaDetect)
+func add_weapon_vm(weapon_vm: Spatial, trfrm: Transform):
+ viewmodel.get_node("Skeleton/GunBone").add_child(weapon_vm)
+ weapon_vm.transform = trfrm
+
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}
@@ -82,12 +103,30 @@ func _process(_delta: float) -> void:
machine.misc_input(Input.get_action_strength("move_duck"),Input.get_action_strength("move_jump"),Input.get_action_strength("move_walk"))
machine.mouse_input(Input.get_action_strength("fire"), Input.get_action_strength("fire3"),Input.get_action_strength("fire2"))
else:
+ weapon.mouse_input(Input.get_action_strength("fire"), Input.get_action_strength("fire3"),Input.get_action_strength("fire2"))
jumping = Input.get_action_strength("move_jump")
if Input.is_action_just_pressed("fire"):
weapon.attack1()
+ if Input.is_action_just_pressed("reload") and weapon.has_method("reload"):
+ weapon.reload()
move_axis.x = Input.get_action_strength("move_forward") - Input.get_action_strength("move_backward")
move_axis.y = Input.get_action_strength("move_right") - Input.get_action_strength("move_left")
-
+
+ if Input.is_action_just_pressed("slot1") and weapons[0] != null and weapon.deselect() :
+ weapon = weapons[0]
+ weapon.select()
+ elif Input.is_action_just_pressed("slot2")and weapons[1] != null and weapon.deselect():
+ weapon = weapons[1]
+ weapon.select()
+ elif Input.is_action_just_pressed("slot3") and weapons[2] != null and weapon.deselect() :
+ weapon = weapons[2]
+ weapon.select()
+ elif Input.is_action_just_pressed("slot4") and weapons[3] != null and weapon.deselect() :
+ weapon = weapons[3]
+ weapon.select()
+ elif Input.is_action_just_pressed("slot5") and weapons[4] != null and weapon.deselect() :
+ weapon = weapons[4]
+ weapon.select()
func initiate_use():
if controlling_machine:
@@ -96,17 +135,26 @@ func initiate_use():
if ladder_m != null:
leave_ladder()
return
+ if carrying:
+ carrying = false
+ carrying_object.rpc("set_nm",1)
+ carrying_object = null
+ return
if $"%UseRay".is_colliding():
var area_c = $"%UseRay".get_collider()
match area_c.name:
- "SteerArea":
- world.rpc_id(1, "_call_on_server", "_client_request_control_vehicle", {"id" : world.client_id, "machine_path" : area_c.get_parent().get_path(), "char_name" : name})
+ "SteerArea": #must be a networkedmachine
+ if area_c.get_parent().controllable: world.rpc_id(1, "_call_on_server", "_client_request_control_vehicle", {"id" : world.client_id, "machine_path" : area_c.get_parent().get_path(), "char_name" : name})
"LadderArea":
mount_ladder(area_c.get_parent())
"TugArea":
pass
- "PickupArea":
- pass
+ "CarryArea":
+ if weapon.name == "HANDS" and weapon.can_pickup():
+ carrying = true
+ carrying_object = area_c.get_parent()
+ carrying_object.rpc("set_nm",get_network_master())
+ carry_point.global_transform.origin = carrying_object.global_transform.origin
_:
pass
@@ -141,9 +189,22 @@ func lose_machine():
controlling_machine = false
machine = null
+func carry_process() -> void:
+ var vec = (carry_point.global_transform.origin - carrying_object.global_transform.origin)
+ var length = vec.length()
+ if length > 1:
+ carrying = false
+ carrying_object.rpc("set_nm",1)
+ carrying_object = null
+ return
+ var dir = vec.normalized()
+ carrying_object.add_central_force(carrying_object.mass*120*dir*length - 90*carrying_object.linear_velocity)
+
# Called every physics tick. 'delta' is constant
func _physics_process(delta: float) -> void:
if is_network_master():
+ if carrying:
+ carry_process()
if ladder_m != null:
climb_ladder(delta)
elif !on_floor_test() and in_water:
@@ -174,7 +235,6 @@ func _integrate_forces(state: PhysicsDirectBodyState) -> void:
return
player_state = state
velocity = state.get_linear_velocity()
- $normal_vis.look_at($normal_vis.global_transform.origin + global_transform.basis.z, floor_normal)
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:
@@ -188,7 +248,6 @@ func _integrate_forces(state: PhysicsDirectBodyState) -> void:
rpc("damage", 500000, "drown", [1, "Davy Jones"])
func walk(_delta: float) -> void:
- return
# Input
direction = Vector3()
var aim: Basis = head.get_global_transform().basis
@@ -246,6 +305,7 @@ func exit_water():
in_water = false
func mount_ladder(target_ladder: Spatial):
+ var old_neck_rot = neck.get_global_rotation()
var ladder_tracker = Spatial.new()
ladder_tracker.name = name
target_ladder.add_child(ladder_tracker)
@@ -257,6 +317,7 @@ func mount_ladder(target_ladder: Spatial):
ladder_m = ladder_tracker
global_transform.origin = ladder_m.global_transform.origin
global_transform.basis = ladder_m.global_transform.basis.orthonormalized()
+ neck.set_global_rotation(old_neck_rot)
linear_velocity = Vector3.ZERO
set_gravity_scale(0.0)
@@ -270,9 +331,11 @@ func climb_ladder(delta: float):
global_transform.basis = ladder_m.global_transform.basis.orthonormalized()
func leave_ladder():
+ var old_neck_rot = neck.get_global_rotation()
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)
set_gravity_scale(1.0)
ladder_m.queue_free()
ladder_m = null
@@ -296,3 +359,19 @@ remotesync func remove_dead_character():
remotesync func net_apply_impulse(impulse_v: Vector3):
apply_central_impulse(impulse_v)
+
+remotesync func anim_event(event: Dictionary):
+ $"%VIEWMODEL_ARMS".get_node("AnimationPlayer").play(event["VMANIMPLAY"])
+
+remotesync func play_weapon_sound(filepath) -> void:
+ $WeaponSound.stream = load(filepath)
+ $WeaponSound.play()
+
+remotesync func add_rocket_to_scene(pos, dir, id):
+ var rocket = preload("res://scenes/ballistics/Rocket.tscn").instance()
+ world.get_node("BALLISTICS").add_child(rocket, true)
+ rocket.shooter = name + " (" + world.players_info[get_network_master()][0] + ")"
+ rocket.shooter_id = id
+ rocket.global_transform.origin = pos
+ rocket.global_transform.basis = Basis(-1*dir.z, dir.y, dir.x)
+ rocket.add_collision_exception_with(self)
diff --git a/godot/scripts/machines/Cannon.gd b/godot/scripts/machines/Cannon.gd
index b8d9f38..80b9edf 100644
--- a/godot/scripts/machines/Cannon.gd
+++ b/godot/scripts/machines/Cannon.gd
@@ -6,8 +6,10 @@ var cooldown = 0
export var fire_rate = 1 #shot/s
export var ball_speed = 400 #m/s
-var pitch :float = 0.0
-var turn :float = 0.0
+var pitch: float = 0.0
+var turn: float = 0.0
+
+remotesync var loaded: bool = false
export var turn_speed = 7.5 #deg/s
export var pitch_speed = 10
@@ -17,19 +19,21 @@ export var min_pitch = -10
export var min_yaw = -15
export var max_yaw = 15
-onready var muzzle = get_node("YawJoint/PitchJoint/Muzzle")
+onready var muzzle: Spatial = get_node("YawJoint/PitchJoint/Muzzle")
+onready var status: Label3D = get_node("StatusNotifier")
remote func update_aim(pitch_z, yaw_y):
$YawJoint/PitchJoint.rotation_degrees.z = pitch_z
$YawJoint.rotation_degrees.y = yaw_y
func get_init_info():
- return {"pitch_rot" : $YawJoint/PitchJoint.rotation_degrees.z, "turn_rot" : $YawJoint.rotation_degrees.y, "in_use" : in_use}
+ return {"pitch_rot" : $YawJoint/PitchJoint.rotation_degrees.z, "turn_rot" : $YawJoint.rotation_degrees.y, "in_use" : in_use, "loaded" : loaded}
func mp_init(init_info):
$YawJoint/PitchJoint.rotation_degrees.z = init_info["pitch_rot"]
$YawJoint.rotation_degrees.y = init_info["turn_rot"]
in_use = init_info["in_use"]
+ loaded = init_info["loaded"]
# Called when the node enters the scene tree for the first time.
func _ready():
@@ -42,8 +46,6 @@ func on_new_control():
if is_network_master(): world.cam.attach(self, "STATIC", "./YawJoint/PitchJoint/CameraPoint")
func _physics_process(delta):
- if cooldown > 0:
- cooldown -= delta
if in_use and is_network_master(): #aim
$YawJoint/PitchJoint.rotation_degrees.z += pitch*pitch_speed*delta
$YawJoint.rotation_degrees.y += turn*turn_speed*delta
@@ -57,11 +59,13 @@ func direction_input(fwd,bwd,left,right,_left,_right):
turn = right - left
func attack1():
- if cooldown > 0:
+ if !loaded:
return
rpc("fire")
remotesync func fire():
+ loaded = false
+ status.set_visible(true)
$YawJoint/PitchJoint/Muzzle/explosion_sound.play()
var expl = preload("res://particles/p_Explosion.tscn").instance()
var cball = preload("res://scenes/ballistics/Cannonball.tscn").instance()
@@ -74,7 +78,6 @@ remotesync func fire():
cball.linear_velocity = muzzle.global_transform.basis.x*ball_speed
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_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:
diff --git a/godot/scripts/machines/NetworkedMachineGDS.gd b/godot/scripts/machines/NetworkedMachineGDS.gd
index eb675d0..a8ee1da 100644
--- a/godot/scripts/machines/NetworkedMachineGDS.gd
+++ b/godot/scripts/machines/NetworkedMachineGDS.gd
@@ -1,6 +1,7 @@
extends RigidBody
var in_use: bool = false
+var controllable: bool = false
var user: RigidBody = null
var world: Spatial = null
diff --git a/godot/scripts/vehicles/Gunboat.gd b/godot/scripts/vehicles/Gunboat.gd
index 4c822ca..c00479e 100644
--- a/godot/scripts/vehicles/Gunboat.gd
+++ b/godot/scripts/vehicles/Gunboat.gd
@@ -76,8 +76,9 @@ 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():
- for sail in $SAILS.get_children():
- sail.set_sheet(sail_out)
+ if mainsheet != 0:
+ 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)
@@ -86,7 +87,7 @@ func _physics_process(delta):
add_torque(Vector3(0,-rudder_turn*rudder_constant*(0.5+linear_velocity.dot(global_transform.basis.x)),0))
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)
+ #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():
if area.name == "WaterArea":