void CPhysicsShellHolder::PHSaveState(NET_Packet &P) { //CPhysicsShell* pPhysicsShell=PPhysicsShell(); CKinematics* K =smart_cast<CKinematics*>(Visual()); //Flags8 lflags; //if(pPhysicsShell&&pPhysicsShell->isActive()) lflags.set(CSE_PHSkeleton::flActive,pPhysicsShell->isEnabled()); // P.w_u8 (lflags.get()); if(K) { P.w_u64(K->LL_GetBonesVisible()); P.w_u16(K->LL_GetBoneRoot()); } else { P.w_u64(u64(-1)); P.w_u16(0); } ///////////////////////////// Fvector min,max; min.set(flt_max,flt_max,flt_max); max.set(-flt_max,-flt_max,-flt_max); ///////////////////////////////////// u16 bones_number=PHGetSyncItemsNumber(); for(u16 i=0;i<bones_number;i++) { SPHNetState state; PHGetSyncItem(i)->get_State(state); Fvector& p=state.position; if(p.x<min.x)min.x=p.x; if(p.y<min.y)min.y=p.y; if(p.z<min.z)min.z=p.z; if(p.x>max.x)max.x=p.x; if(p.y>max.y)max.y=p.y; if(p.z>max.z)max.z=p.z; } min.sub(2.f*EPS_L); max.add(2.f*EPS_L); VERIFY(!min.similar(max)); P.w_vec3(min); P.w_vec3(max); P.w_u16(bones_number); for(u16 i=0;i<bones_number;i++) { SPHNetState state; PHGetSyncItem(i)->get_State(state); state.net_Save(P,min,max); } }
void CPhysicsShellHolder::PHLoadState(IReader &P) { // Flags8 lflags; CKinematics* K=smart_cast<CKinematics*>(Visual()); // P.r_u8 (lflags.flags); if(K) { K->LL_SetBonesVisible(P.r_u64()); K->LL_SetBoneRoot(P.r_u16()); } Fvector min=P.r_vec3(); Fvector max=P.r_vec3(); VERIFY(!min.similar(max)); u16 bones_number=P.r_u16(); R_ASSERT3(bones_number <= 64, "CPhysicsShellHolder::PHLoadState", cNameVisual().c_str()); for(u16 i=0;i<bones_number;i++) { SPHNetState state; state.net_Load(P,min,max); PHGetSyncItem(i)->set_State(state); } }
void CActorMP::fill_state (actor_mp_state &state) { if (OnClient()) { //R_ASSERT (g_Alive()); //R_ASSERT2 (PHGetSyncItemsNumber() == 1,make_string("PHGetSyncItemsNumber() returned %d, health = %.2f",PHGetSyncItemsNumber(),GetfHealth())); } SPHNetState State; PHGetSyncItem(0)->get_State (State); // static test = false; // if (test) { #if 0 Msg ("Frame [%d], object [%d]",Device.dwFrame,ID()); // Msg ("quaternion : [%f][%f][%f][%f]",State.quaternion.x,State.quaternion.y,State.quaternion.z,State.quaternion.w); // Msg ("angular : [%f][%f][%f]",State.angular_vel.x,State.angular_vel.y,State.angular_vel.z); Msg ("linear : [%f][%f][%f]",State.linear_vel.x,State.linear_vel.y,State.linear_vel.z); // Msg ("force : [%f][%f][%f]",State.force.x,State.force.y,State.force.z); // Msg ("torque : [%f][%f][%f]",State.torque.x,State.torque.y,State.torque.z); // Msg ("acceleration : [%f][%f][%f]",NET_SavedAccel.x,NET_SavedAccel.y,NET_SavedAccel.z); Msg ("model_yaw : [%f]",angle_normalize(r_model_yaw)); Msg ("camera_yaw : [%f]",angle_normalize(unaffected_r_torso.yaw)); // Msg ("camera_pitch : [%f]",angle_normalize(unaffected_r_torso.pitch)); // Msg ("camera_roll : [%f]",angle_normalize(unaffected_r_torso.roll)); // } #endif // 0 state.physics_quaternion = State.quaternion; state.physics_angular_velocity = State.angular_vel; state.physics_linear_velocity = State.linear_vel; state.physics_force = State.force; state.physics_torque = State.torque; state.physics_position = State.position; state.position = Position(); state.logic_acceleration = NET_SavedAccel; state.model_yaw = angle_normalize(r_model_yaw); state.camera_yaw = angle_normalize(unaffected_r_torso.yaw); state.camera_pitch = angle_normalize(unaffected_r_torso.pitch); state.camera_roll = angle_normalize(unaffected_r_torso.roll); state.time = Level().timeServer(); state.inventory_active_slot = inventory().GetActiveSlot(); state.body_state_flags = mstate_real & 0x0000ffff; state.health = GetfHealth(); //because after packing to 1 byte, this value can be positive... if (state.health < EPS) state.health = 0; state.radiation = g_Radiation()/100.0f; state.physics_state_enabled = State.enabled ? 1 : 0; }