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 CPHSkeleton::SaveNetState(NET_Packet& P) { CPhysicsShellHolder* obj=PPhysicsShellHolder(); CPhysicsShell* pPhysicsShell=obj->PPhysicsShell(); IKinematics* K =smart_cast<IKinematics*>(obj->Visual()); if(pPhysicsShell&&pPhysicsShell->isActive()) m_flags.set(CSE_PHSkeleton::flActive,pPhysicsShell->isEnabled()); P.w_u8 (m_flags.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(F_MAX,F_MAX,F_MAX); max.set(-F_MAX,-F_MAX,-F_MAX); ///////////////////////////////////// u16 bones_number=obj->PHGetSyncItemsNumber(); for(u16 i=0;i<bones_number;i++) { SPHNetState state; obj->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); P.w_vec3(min); P.w_vec3(max); P.w_u16(bones_number); for(u16 i=0;i<bones_number;i++) { SPHNetState state; obj->PHGetSyncItem(i)->get_State(state); state.net_Save(P,min,max); } }
void game_sv_GameState::net_Export_GameTime (NET_Packet& P) { //#pragma todo("It should be done via single message, why always pass this data?") //#if 0 //Syncronize GameTime P.w_u64(GetGameTime()); P.w_float(GetGameTimeFactor()); //Syncronize EnvironmentGameTime P.w_u64(GetEnvironmentGameTime()); P.w_float(GetEnvironmentGameTimeFactor()); //#endif };
void CLevel::OnBuildVersionChallenge () { NET_Packet P; P.w_begin (M_CL_AUTH); u64 auth = FS.auth_get(); P.w_u64 (auth); Send (P, net_flags(TRUE, TRUE, TRUE, TRUE)); };
void CLevel::OnBuildVersionChallenge () { NET_Packet P; P.w_begin (M_CL_AUTH); #ifdef DEBUG u64 auth = MP_DEBUG_AUTH; #else u64 auth = FS.auth_get(); #endif //#ifdef DEBUG P.w_u64 (auth); SecureSend (P, net_flags(TRUE, TRUE, TRUE, TRUE)); };
void SPHBonesData::net_Save(NET_Packet &P) { P.w_u64 (bones_mask); P.w_u16 (root_bone); P.w_vec3 (get_min()); P.w_vec3 (get_max()); P.w_u16 ((u16)bones.size());//bones number; PHNETSTATE_I i=bones.begin(),e=bones.end(); for(;e!=i;i++) { (*i).net_Save(P,get_min(),get_max()); } // this comment is added by Dima (correct me if this is wrong) // if we call 2 times in a row StateWrite then we get different results // WHY??? // bones.clear (); }