From 586817664cebbe670081eea0cb0a0fe2f33adfce Mon Sep 17 00:00:00 2001 From: Anson Bridges Date: Tue, 20 Sep 2022 08:42:11 -0400 Subject: player controller progress --- src/playercontroller.cpp | 118 ++++++++++++++++++++++++----------------------- src/playercontroller.h | 4 +- 2 files changed, 63 insertions(+), 59 deletions(-) (limited to 'src') diff --git a/src/playercontroller.cpp b/src/playercontroller.cpp index edf85be..af8aa5a 100644 --- a/src/playercontroller.cpp +++ b/src/playercontroller.cpp @@ -68,6 +68,8 @@ void PlayerController::_init() { void PlayerController::_ready() { head = get_node(NodePath("Neck/Head")); neck = get_node(NodePath("Neck")); + useray = get_node(NodePath("Neck/Head/UseRay")); + nametag = get_node(NodePath("Nametag")); nav = get_node(NodePath("NavigationAgent")); weapon = (Node *)ResourceLoader::get_singleton()->load("res://scenes/weapons/w_Rockets.tscn")->instance() add_child(weapon) @@ -81,7 +83,7 @@ Dictionary PlayerController::get_init_info() { void PlayerController::mp_init(Dictionary init_info) { for(int i = 0; i < init_info.keys().size(); i++) set(init_info.keys()[i], init_info[init_info.keys()[i]]); - get_node("Nametag")->set_text(init_info["nametag"]); + nametag->set_text(init_info["nametag"]); } void PlayerController::set_phys_transform(Transform trfrm, Vector3 lvel) { @@ -89,56 +91,55 @@ void PlayerController::set_phys_transform(Transform trfrm, Vector3 lvel) { set_linear_velocity(lvel); } -PlayerController::_process(float _delta) { -// if is_player and !world.is_chatting: -// if Input.is_action_just_pressed("use"): -// initiate_use() +void PlayerController::_process(float _delta) { + const Input *input_singleton = Input::get_singleton(); + if(is_player && !world->call("is_chatting_f")){ + if(input_singleton->is_action_just_pressed("use")) + initiate_use(); + if(controlling_machine) { + if(input_singleton->is_action_just_pressed("fire"))machine->call("attack1"); + if(input_singleton->is_action_just_pressed("fire2"))machine->call("attack2"); + } } void PlayerController::initiate_use() { -// if controlling_machine: -// machine.relinquish_control() -// return -// if ladder_m != null: -// leave_ladder() -// 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}) -// "LadderArea": -// mount_ladder(area_c.get_parent()) -// "TugArea": -// pass -// "PickupArea": -// pass -// _: -// pass + if(controlling_machine){machine->call("relinquish_control"); return; } + if(ladder_m != nullptr) { leave_ladder(); return; } + if(useray->is_colliding()){ + const Node *area_c = useray->get_collider(); + if(area_c->get_name() == "SteerArea") + world.rpc_id(1, "_call_on_server", "_client_request_control_vehicle", {"id" : world->call("get_client_id"), "machine_path" : area_c->get_parent()->get_path(), "char_name" : get_name()}); + else if(area_c->get_name() == "LadderArea") + mount_ladder(area_c->get_parent()); + else if(area_c->get_name() == "TugArea")return; + else if(area_c->get_name() == "PickupArea")return; + } } void PlayerController::set_net_owner(int owner_id) { -// $Nametag.text = "" -// set_network_master(owner_id) -// if owner_id != 1: -// $Nametag.text = world.players_info[owner_id][0] -// if get_tree().get_network_unique_id() != 1: -// if owner_id == world.client_id: -// $Nametag.visible = false -// world.player_char = self -// is_player = true -// world.cam.attach(self, "FIRSTPERSON", "./Neck/Head") -// else: -// $Nametag.visible = true -// is_player = false -// world.get_node("HUD").update_characters() + nametag->set_text(""); + set_network_master(owner_id); + if(owner_id != 1) + nametag->set_text(String(world->get_players_info()[owner_id][0])); + if(get_tree()->get_network_unique_id() != 1){ + if(owner_id == world->get_client_id()){ + nametag->set_visible(false); + world.player_char = self; + is_player = true; + world.cam.attach(this, "FIRSTPERSON", "./Neck/Head"); + }else{ + nametag->set_visible(true); + is_player = false; + } + world->get_node("HUD")->call("update_characters"); + } } void PlayerController::deselect_character() { -// if is_network_master(): -// world.player_char = null -// if world.client_id != 1: world.cam.attach(world, "STATIC", "./DEFAULTCAM") -// rpc("set_net_owner", 1) + if is_network_master(): + world.player_char = null + if(world->get_client_id() != 1) world.cam.attach(world, "STATIC", "./DEFAULTCAM") + rpc("set_net_owner", 1) } void PlayerController::take_control_of_machine(RigidBody *slave_machine) { @@ -152,7 +153,7 @@ void PlayerController::lose_machine() { machine = nullptr; } -PlayerController::_physics_process(float delta) { +void PlayerController::_physics_process(float delta) { if(is_network_master()) { if (ladder_m != nullptr) climb_ladder(delta); @@ -200,7 +201,7 @@ void PlayerController::_integrate_forces(PhysicsDirectBodyState *state) { } rpc("set_phys_transform", get_transform(), get_linear_velocity()); if(get_global_transform().origin.y < -30) - rpc("damage", 500000, "drown", Array::make(1, "Davy Jones"]); + rpc("damage", 500000, "drown", Array::make(1, String("Davy Jones")); } void PlayerController::walk(float _delta) { @@ -279,24 +280,25 @@ void PlayerController::climb_ladder(float delta) { } void PlayerController::leave_ladder() { -// 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 -// set_gravity_scale(1.0) -// ladder_m.queue_free() -// ladder_m = null + if((ladder_m->get_parent()->get_node("TOP")->global_transform.origin - get_global_transform().origin).length_squared() < 0.01) + apply_central_impulse(-400*ladder_m->get_global_transform().basis.z); + global_transform.basis = world.global_transform.basis + set_gravity_scale(1.0); + ladder_m->queue_free(); + ladder_m = nullptr; } void PlayerController::damage(int dmg_amt, String _type, Array shooter, String extra = ".") { 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") -// if get_network_master() == 1: -// world._call_on_server("_character_death", {"killer_id" : shooter[0], "killer" : shooter[1], "victim_mp_id" : get_network_master(), "victim" : name, "extra" : extra}) -// else: -// world.rpc_id(1, "_call_on_server", "_character_death", {"killer_id" : shooter[0], "killer" : shooter[1], "victim_mp_id" : get_network_master(), "victim" : name, "extra" : extra}) -// elif is_network_master(): -// if shooter[0] != get_network_master() and shooter[0] != 1: world.rpc_id(shooter[0], "game_hitsound") + if(health <= 0 && is_network_master()){ + if(shooter[0] != get_network_master() and shooter[0] != 1) world.rpc_id(shooter[0], "game_killsound"); + if(get_network_master() == 1) + world._call_on_server("_character_death", {"killer_id" : shooter[0], "killer" : shooter[1], "victim_mp_id" : get_network_master(), "victim" : name, "extra" : extra}); + else + world.rpc_id(1, "_call_on_server", "_character_death", {"killer_id" : shooter[0], "killer" : shooter[1], "victim_mp_id" : get_network_master(), "victim" : name, "extra" : extra}); + } else if( is_network_master()) + if(shooter[0] != get_network_master() and shooter[0] != 1) world.rpc_id(shooter[0], "game_hitsound"); + } } void PlayerController::remove_dead_character() { diff --git a/src/playercontroller.h b/src/playercontroller.h index 388de3f..b373db8 100644 --- a/src/playercontroller.h +++ b/src/playercontroller.h @@ -19,6 +19,8 @@ private: Vector2 mouse_axis; Spatial *head; Spatial *neck; + RayCast *useray; + Label3D *nametag; Vector3 velocity; Vector3 direction; Vector3 move_axis; @@ -70,7 +72,7 @@ public: void swim(float _delta); void enter_water(); void exit_water(); - void mount_ladder(Spatial target_ladder); + void mount_ladder(Spatial *target_ladder); void climb_ladder(float delta); void leave_ladder(); void damage(int dmg_amt, String _type, Array shooter, String extra); -- cgit v1.2.3