summaryrefslogtreecommitdiff
path: root/godot/scripts/characters/player_controller_new.gd
diff options
context:
space:
mode:
Diffstat (limited to 'godot/scripts/characters/player_controller_new.gd')
-rw-r--r--godot/scripts/characters/player_controller_new.gd99
1 files changed, 89 insertions, 10 deletions
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)