#include "networked_machine.h" #include #include #include using namespace godot; void NetworkedMachine::_register_methods() { register_method("_ready", &NetworkedMachine::_ready); register_method("_integrate_forces", &NetworkedMachine::_integrate_forces); register_method("relinquish_control", &NetworkedMachine::relinquish_control); register_method("on_new_control", &NetworkedMachine::on_new_control); register_method("on_no_control", &NetworkedMachine::on_no_control); register_method("attack1", &NetworkedMachine::attack1); register_method("attack2", &NetworkedMachine::attack2); register_method("direction_input", &NetworkedMachine::direction_input); register_method("update_phys_transform", &NetworkedMachine::update_phys_transform, GODOT_METHOD_RPC_MODE_SYNC); register_method("net_apply_impulse", &NetworkedMachine::net_apply_impulse, GODOT_METHOD_RPC_MODE_REMOTESYNC); register_method("set_net_owner", &NetworkedMachine::set_net_owner, GODOT_METHOD_RPC_MODE_REMOTESYNC); } NetworkedMachine::NetworkedMachine () { } NetworkedMachine::~NetworkedMachine () { } void NetworkedMachine::_init() { in_use = false; user = nullptr; world = nullptr; } void NetworkedMachine::_ready() { world = (Spatial *)get_tree()->get_root()->find_node("GAMEWORLD"); } void NetworkedMachine::update_phys_transform(Transform t, Vector3 lv, Vector3 av) { set_transform(t); set_linear_velocity(lv); set_angular_velocity(av); } void NetworkedMachine::net_apply_impulse(Vector3 impulse_v) { apply_central_impulse(impulse_v); } void NetworkedMachine::_integrate_forces(PhysicsDirectBodyState *_state) { if(is_network_master() && get_mode() == RigidBody::MODE_RIGID) { rpc("update_phys_transform", get_transform(), get_linear_velocity(), get_angular_velocity()); } } void NetworkedMachine::set_net_owner(int id, String char_name) { set_network_master(id); if (id == 1 && char_name == "NODE") { on_no_control(); if (user != nullptr) { user->call("lose_machine"); } user = nullptr; in_use = false; } else { in_use = true; String player_path_s = String("PLAYERS/") + char_name; NodePath player_path = NodePath(player_path_s); user = (RigidBody *)world->get_node(player_path); user->call("take_control_of_machine", (RigidBody *) this); if(is_network_master()) { on_new_control(); } } } void NetworkedMachine::relinquish_control() { rpc("set_net_owner", 1, "NONE"); } void NetworkedMachine::on_new_control() { } void NetworkedMachine::on_no_control() { } void NetworkedMachine::attack1() { } void NetworkedMachine::attack2() { } void NetworkedMachine::direction_input(float f, float b, float l, float r, float l2, float r2) { }