diff options
Diffstat (limited to 'godot/scripts')
| -rw-r--r-- | godot/scripts/GameBase.gd | 9 | ||||
| -rw-r--r-- | godot/scripts/Server.gd | 2 | ||||
| -rw-r--r-- | godot/scripts/ballistics/Cannonball.gd | 2 | ||||
| -rw-r--r-- | godot/scripts/ballistics/NetworkedProjectile.gd | 6 | ||||
| -rw-r--r-- | godot/scripts/characters/player_controller_new.gd | 99 | ||||
| -rw-r--r-- | godot/scripts/machines/Cannon.gd | 19 | ||||
| -rw-r--r-- | godot/scripts/machines/NetworkedMachineGDS.gd | 1 | ||||
| -rw-r--r-- | godot/scripts/vehicles/Gunboat.gd | 7 |
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": |
