summaryrefslogtreecommitdiff
path: root/src/player_controller
diff options
context:
space:
mode:
Diffstat (limited to 'src/player_controller')
-rw-r--r--src/player_controller/.sconsign.dblitebin44397 -> 44397 bytes
-rwxr-xr-xsrc/player_controller/build2
-rw-r--r--src/player_controller/gdlibrary.osbin243200 -> 243344 bytes
-rw-r--r--src/player_controller/playercam.cpp12
-rw-r--r--src/player_controller/playercam.h2
-rw-r--r--src/player_controller/playercam.osbin248864 -> 256272 bytes
-rw-r--r--src/player_controller/playercontroller.cpp69
-rw-r--r--src/player_controller/playercontroller.h10
-rw-r--r--src/player_controller/playercontroller.osbin578072 -> 619136 bytes
9 files changed, 58 insertions, 37 deletions
diff --git a/src/player_controller/.sconsign.dblite b/src/player_controller/.sconsign.dblite
index fdbad93..fe01729 100644
--- a/src/player_controller/.sconsign.dblite
+++ b/src/player_controller/.sconsign.dblite
Binary files differ
diff --git a/src/player_controller/build b/src/player_controller/build
new file mode 100755
index 0000000..3122527
--- /dev/null
+++ b/src/player_controller/build
@@ -0,0 +1,2 @@
+#!/bin/sh
+scons target=release platform=linux
diff --git a/src/player_controller/gdlibrary.os b/src/player_controller/gdlibrary.os
index c357e6f..f20c11f 100644
--- a/src/player_controller/gdlibrary.os
+++ b/src/player_controller/gdlibrary.os
Binary files differ
diff --git a/src/player_controller/playercam.cpp b/src/player_controller/playercam.cpp
index f321c09..dd78834 100644
--- a/src/player_controller/playercam.cpp
+++ b/src/player_controller/playercam.cpp
@@ -47,12 +47,17 @@ void PlayerCam::_input(const Ref<InputEvent> event) {
}
void PlayerCam::attach(Node* new_parent, String c_mode, String extra_path) {
- if(get_parent() != nullptr)
- get_parent()->remove_child(this);
+ if(get_parent() != nullptr) {
+ get_parent()->call_deferred("remove_child",this);}
if(c_mode == "FIRSTPERSON") {
head = (Spatial*)new_parent->find_node("Head", true, false); neck = (Spatial*)new_parent->find_node("Neck", true, false);
arm = nullptr; mode = c_mode;
}
+ else if (c_mode == "STATIC") {
+ head = nullptr; neck = nullptr; arm = nullptr;
+ mode = c_mode;
+
+ }
else if (c_mode == "THIRDPERSON") {
head = (Spatial*)new_parent->find_node("Head", true, false); neck = (Spatial*)new_parent->find_node("Neck", true, false);
arm = (SpringArm*)new_parent->find_node("SpringArm", true, false); mode = c_mode;
@@ -64,7 +69,8 @@ void PlayerCam::attach(Node* new_parent, String c_mode, String extra_path) {
else {
head = nullptr; neck = nullptr; arm = nullptr;
}
- new_parent->get_node(NodePath(extra_path))->add_child(this);
+ add_exception(new_parent);
+ new_parent->get_node(NodePath(extra_path))->call_deferred("add_child",this);
set_transform(Transform::IDENTITY);
}
diff --git a/src/player_controller/playercam.h b/src/player_controller/playercam.h
index dd089de..ec3063e 100644
--- a/src/player_controller/playercam.h
+++ b/src/player_controller/playercam.h
@@ -20,7 +20,7 @@ private:
SpringArm* arm;
Vector2 mouse_axis;
float mouse_sensitivity;
-
+
public:
static void _register_methods();
diff --git a/src/player_controller/playercam.os b/src/player_controller/playercam.os
index 629e608..2687db6 100644
--- a/src/player_controller/playercam.os
+++ b/src/player_controller/playercam.os
Binary files differ
diff --git a/src/player_controller/playercontroller.cpp b/src/player_controller/playercontroller.cpp
index e14aa5e..71ccaa0 100644
--- a/src/player_controller/playercontroller.cpp
+++ b/src/player_controller/playercontroller.cpp
@@ -30,6 +30,8 @@ void PlayerController::_register_methods() {
register_method("mount_ladder", &PlayerController::mount_ladder);
register_method("climb_ladder", &PlayerController::climb_ladder);
register_method("leave_ladder", &PlayerController::leave_ladder);
+ register_method("get_head", &PlayerController::get_head);
+ register_method("get_neck", &PlayerController::get_neck);
register_method("damage", &PlayerController::damage, GODOT_METHOD_RPC_MODE_REMOTESYNC);
register_method("remove_dead_character", &PlayerController::remove_dead_character, GODOT_METHOD_RPC_MODE_REMOTESYNC);
register_method("net_apply_impulse", &PlayerController::net_apply_impulse, GODOT_METHOD_RPC_MODE_REMOTESYNC);
@@ -78,7 +80,7 @@ void PlayerController::_ready() {
weapon = (Node *)p->instance();
add_child(weapon);
world = get_tree()->get_root()->get_node<Spatial>("GAMEWORLD");
- cam = (PlayerCam *)world->call("get_cam");
+ cam = (Camera *)world->call("get_cam");
}
Dictionary PlayerController::get_init_info() {
@@ -105,6 +107,13 @@ void PlayerController::_process(float _delta) {
if(input_singleton->is_action_just_pressed("fire"))machine->call("attack1");
if(input_singleton->is_action_just_pressed("fire2"))machine->call("attack2");
}
+ else {
+ jumping = input_singleton->get_action_strength("move_jump");
+ //if(input_singleton->is_action_just_pressed("fire"))
+ // weapon->call("attack1");
+ move_axis.x = input_singleton->get_action_strength("move_forward") - input_singleton->get_action_strength("move_backward");
+ move_axis.y = input_singleton->get_action_strength("move_right") - input_singleton->get_action_strength("move_left");
+ }
}
}
@@ -122,29 +131,29 @@ void PlayerController::initiate_use() {
}
}
-void PlayerController::set_net_owner(int owner_id) {
+void PlayerController::set_net_owner(Variant owner_id) {
nametag->set_text("");
set_network_master(owner_id);
- if(owner_id != 1)
+ if(owner_id != Variant(1))
nametag->set_text(String(world->call("get_players_info", owner_id, 0)));
if(get_tree()->get_network_unique_id() != 1){
- if(owner_id == (int)world->call("get_client_id")){
+ if(owner_id == world->call("get_client_id")){
nametag->set_visible(false);
world->call("set_player_char", this);
is_player = true;
- cam->attach(this, "FIRSTPERSON", "./Neck/Head");
+ cam->call("attach", (RigidBody*)this, String("FIRSTPERSON"), String("./Neck/Head"));
}else{
nametag->set_visible(true);
is_player = false;
}
- world->get_node("HUD")->call("update_characters");
+ world->get_node(NodePath("./HUD"))->call("update_characters");
}
}
void PlayerController::deselect_character() {
if(is_network_master()){
world->call("set_player_char", "NULL");
- if((int)world->call("get_client_id") != 1)cam->attach(world, "STATIC", "./DEFAULTCAM");
+ if((int)world->call("get_client_id") != 1)cam->call("attach",world, "STATIC", "./DEFAULTCAM");
rpc("set_net_owner", 1);
}
}
@@ -155,7 +164,7 @@ void PlayerController::take_control_of_machine(RigidBody *slave_machine) {
}
void PlayerController::lose_machine() {
- if(is_network_master())cam->attach(this, "FIRSTPERSON", "./Neck/Head");
+ if(is_network_master())cam->call("attach", this, "FIRSTPERSON", "./Neck/Head");
controlling_machine = false;
machine = nullptr;
}
@@ -212,26 +221,27 @@ void PlayerController::_integrate_forces(PhysicsDirectBodyState *state) {
}
void PlayerController::walk(float _delta) {
-// # Input
-// direction = Vector3()
-// var aim: Basis = head.get_global_transform().basis
-// direction += -move_axis.x * aim.z + move_axis.y * aim.x
-// direction.y = 0
-// direction = direction.normalized()
-//
-// if floor_normal != Vector3.UP: direction = direction.rotated(floor_normal.cross(Vector3.UP).normalized(), Vector3.UP.angle_to(floor_normal))
-//
-// # Jump
-// if is_player and jumping and is_on_floor and can_jump:
-// jump()
-//
-// #max walk speed
-// var _speed = walk_speed
-// var _temp_accel: float = acceleration
-// var _cspeed = sqrt(pow(velocity.x-floorspeed.x,2)+pow(velocity.z-floorspeed.z,2))
-//
-// if not is_on_floor:
-// _temp_accel *= air_control
+ Basis aim = head->get_global_transform().basis;
+ direction = -move_axis.x * aim.z + move_axis.y * aim.x;
+ direction.y = 0;
+ direction = direction.normalized();
+
+ //if(floor_normal != Vector3::UP) direction = direction.rotated(floor_normal.cross(Vector3::UP).normalized(), Vector3::UP.angle_to(floor_normal)).normalized();
+ if(is_player && jumping && is_on_floor && can_jump){Godot::print("jump"); jump();}
+ float temp_accel = is_on_floor ? acceleration : acceleration * air_control;
+ float cspeed = sqrt(pow(velocity.x-floorspeed.x,2)+pow(velocity.z-floorspeed.z,2));
+
+ float proj_vel = Vector2(velocity.x-floorspeed.x,velocity.z-floorspeed.z).dot(Vector2(direction.x,direction.z));
+ if(is_on_floor) {
+ if(get_network_master() != 1)Godot::print(direction);
+ add_central_force(-get_mass()*cspeed*get_linear_velocity().normalized()*c_friction);
+ if(walk_speed - cspeed > 0)
+ add_central_force (get_mass()*Vector3(direction.x*temp_accel, 0, direction.z*temp_accel));
+ else
+ add_central_force(get_mass()*Vector3(direction.x*(walk_speed-proj_vel), 0, direction.z*(walk_speed-proj_vel)));
+ }
+ else if (1.0 - proj_vel > 0.0)
+ add_central_force(get_mass()*Vector3(direction.x*temp_accel, 0, direction.z*temp_accel));
}
void PlayerController::jump() {
@@ -322,4 +332,5 @@ void PlayerController::net_apply_impulse(Vector3 impulse_v) {
apply_central_impulse(impulse_v);
}
-
+Spatial* PlayerController::get_head() { return head; }
+Spatial* PlayerController::get_neck() { return neck; }
diff --git a/src/player_controller/playercontroller.h b/src/player_controller/playercontroller.h
index 402f7d3..c1aee94 100644
--- a/src/player_controller/playercontroller.h
+++ b/src/player_controller/playercontroller.h
@@ -17,12 +17,12 @@ namespace godot {
class PlayerController : public RigidBody {
GODOT_CLASS(PlayerController, RigidBody)
-private:
+public:
String team;
int health;
Node *weapon;
Spatial *world;
- PlayerCam *cam;
+ Camera *cam;
float mouse_sensitivity;
float FOV;
Vector2 mouse_axis;
@@ -55,7 +55,7 @@ private:
float air_control;
-public:
+//public:
static void _register_methods();
PlayerController();
@@ -69,7 +69,7 @@ public:
void set_phys_transform(Transform trfrm, Vector3 lvel);
void _process(float _delta);
void initiate_use();
- void set_net_owner(int owner_id);
+ void set_net_owner(Variant owner_id);
void deselect_character();
void take_control_of_machine(RigidBody *slave_machine);
void lose_machine();
@@ -87,6 +87,8 @@ public:
void damage(int dmg_amt, String _type, Array shooter, String extra);
void remove_dead_character();
void net_apply_impulse(Vector3 impulse_v);
+ Spatial* get_neck();
+ Spatial* get_head();
};
}
diff --git a/src/player_controller/playercontroller.os b/src/player_controller/playercontroller.os
index 9630000..135130b 100644
--- a/src/player_controller/playercontroller.os
+++ b/src/player_controller/playercontroller.os
Binary files differ