コード例 #1
0
/*
================
idScriptObject::CheckNetworkStateChanges
================
*/
bool idScriptObject::CheckNetworkStateChanges( networkStateMode_t mode, const sdEntityStateNetworkData& baseState ) const {
	NET_GET_BASE( sdScriptObjectNetworkData );

	if ( baseData.data.Num() != networkFields[ mode ].size ) {
		return true;
	}

	baseData.Reset();

	for ( int i = 0; i < networkFields[ mode ].fields.Num(); i++ ) {
		const networkFieldSync_t& value = networkFields[ mode ].fields[ i ];

		switch( value.type ) {
			case ev_object: {
				const int& intRef = baseData.GetInt();

				idScriptObject* object = gameLocal.program->GetScriptObject( *reinterpret_cast< int* >( value.data ) );
				int id = 0;
				if ( object ) {
					idEntity* ent = object->GetClass()->Cast< idEntity >();
					id = gameLocal.GetSpawnId( ent );
				}
				if ( intRef != id ) {
					return true;
				}
				break;
			}
			case ev_vector: {
				const idVec3& vec3Ref = baseData.GetVector();

				idVec3* temp = reinterpret_cast< idVec3* >( value.data );
				if ( vec3Ref != *temp ) {
					return true;
				}
				break;
			}
			default:
			case ev_float: {
				const float& floatRef = baseData.GetFloat();

				float* temp = reinterpret_cast< float* >( value.data );
				if ( floatRef != *temp ) {
					return true;
				}
				break;
			}
			case ev_boolean: {
				const int& intRef = baseData.GetInt();

				int* temp = reinterpret_cast< int* >( value.data );
				if ( intRef != *temp ) {
					return true;
				}
				break;
			}
		}
	}

	return false;
}
コード例 #2
0
/*
==============
sdDeliveryVehicle::CheckNetworkStateChanges
==============
*/
bool sdDeliveryVehicle::CheckNetworkStateChanges( networkStateMode_t mode, const sdEntityStateNetworkData& baseState ) const {
	if ( mode == NSM_BROADCAST ) {
		NET_GET_BASE( sdDeliveryVehicleBroadcastData );

		// note that lastRollAccel changing on its own will not make
		// this send a new packet, however it will be sent if any new packets are sent!
	}
	return sdScriptEntity::CheckNetworkStateChanges( mode, baseState );
}
コード例 #3
0
/*
================
sdPhysics_GeneralMover::CheckNetworkStateChanges
================
*/
bool sdPhysics_GeneralMover::CheckNetworkStateChanges( networkStateMode_t mode, const sdEntityStateNetworkData& baseState ) const {
	if ( mode == NSM_VISIBLE ) {
		NET_GET_BASE( sdGeneralMoverPhysicsNetworkData );

		NET_CHECK_FIELD( currentFraction, currentFraction );
	}

	return false;
}
コード例 #4
0
/*
================
sdPhysics_Linear::CheckNetworkStateChanges
================
*/
bool sdPhysics_Linear::CheckNetworkStateChanges( networkStateMode_t mode, const sdEntityStateNetworkData& baseState ) const {
	if ( mode == NSM_BROADCAST ) {
		NET_GET_BASE( sdPhysicsLinearBroadcastData );

		if ( baseData.atRest != current.atRest ) {
			return true;
		}

		if ( baseData.baseSpeed != current.linearExtrapolation.GetBaseSpeed() ) {
			return true;
		}

		if ( baseData.duration != SEC2MS( current.linearExtrapolation.GetDuration() ) ) {
			return true;
		}

		if ( baseData.extrapolationType != current.linearExtrapolation.GetExtrapolationType() ) {
			return true;
		}

		if ( baseData.localOrigin != current.localOrigin ) {
			return true;
		}

		if ( baseData.speed != current.linearExtrapolation.GetSpeed() ) {
			return true;
		}

		if ( baseData.startTime != SEC2MS( current.linearExtrapolation.GetStartTime() ) ) {
			return true;
		}

		if ( baseData.startValue != current.linearExtrapolation.GetStartValue() ) {
			return true;
		}

		return false;
	}

	return false;
}