Ejemplo n.º 1
0
static void pack_local_data (entity *en, pack_modes mode)
{
   ASSERT ((mode >= 0) && (mode < NUM_PACK_MODES));

   switch (mode)
   {
      ////////////////////////////////////////
      case PACK_MODE_SERVER_SESSION:
      case PACK_MODE_CLIENT_SESSION:
      case PACK_MODE_BROWSE_SESSION:
      ////////////////////////////////////////
		{

			break;
		}

      ////////////////////////////////////////
      case PACK_MODE_UPDATE_ENTITY:
      ////////////////////////////////////////
      {
         session
            *raw;

         raw = (session *) get_local_entity_data (en);

         pack_float_value (en, FLOAT_TYPE_ELAPSED_TIME, raw->elapsed_time);

         pack_float_value (en, FLOAT_TYPE_LIGHTNING_TIMER, raw->lightning_timer);

			//
			// rain effect
			//

         pack_float_value (en, FLOAT_TYPE_WEATHER_RADIUS, raw->weather_radius);

			pack_vec3d (en, VEC3D_TYPE_WEATHER_POSITION, &raw->weather_position);
			pack_vec3d (en, VEC3D_TYPE_WEATHER_VELOCITY, &raw->weather_velocity);

			//
			// wind effect
			//

         pack_float_value (en, FLOAT_TYPE_WIND_EFFECT_RADIUS, raw->wind_effect_radius);
         pack_float_value (en, FLOAT_TYPE_WIND_GUSTING_VALUE, raw->wind_gusting_value);

			pack_vec3d (en, VEC3D_TYPE_WIND_DIRECTION_VECTOR, &raw->wind_direction_vector);
			pack_vec3d (en, VEC3D_TYPE_WIND_EFFECT_POSITION, &raw->wind_effect_position);
			pack_vec3d (en, VEC3D_TYPE_WIND_EFFECT_VELOCITY, &raw->wind_effect_velocity);

			//

         pack_int_value (en, INT_TYPE_WEATHER_INCREASING, raw->weather_increasing);

         pack_int_value (en, INT_TYPE_WIND_INCREASING, raw->wind_increasing);

         break;
      }
   }
}
Ejemplo n.º 2
0
void pack_effect_data (entity *en, effect *raw, pack_modes mode)
{
	ASSERT ((mode >= 0) && (mode < NUM_PACK_MODES));

	switch (mode)
	{
		////////////////////////////////////////
		case PACK_MODE_SERVER_SESSION:
		case PACK_MODE_CLIENT_SESSION:
		////////////////////////////////////////
		{
			//
			// some effects should never be packed up ( should be re-constructed when the vehicle is unpacked )
			//

			ASSERT (!effect_database [raw->sub_type].constructed_locally);

			pack_int_value (en, INT_TYPE_ENTITY_SUB_TYPE, raw->sub_type);

			pack_vec3d (en, VEC3D_TYPE_POSITION, &raw->position);

			/////////////////////////////////////////////////////////////////
			//
			// Special effect packing, manually packing link data
			//
			if (raw->special_effect_link.parent)
			{
				list_link
					link;

				entity
					*spec;

				pack_int_value (en, INT_TYPE_VALID, TRUE);

				//
				// parent
				//

				link.parent = raw->special_effect_link.parent;

				//
				// succ : search forwards through special effect list for valid child succ
				//

				spec = get_local_entity_child_succ (en, LIST_TYPE_SPECIAL_EFFECT);

				while (TRUE)
				{
					if ((spec == NULL) ||
							(effect_database [get_local_entity_int_value (spec, INT_TYPE_ENTITY_SUB_TYPE)].constructed_locally == FALSE))
					{
						link.child_succ = spec;

						break;
					}

					spec = get_local_entity_child_succ (spec, LIST_TYPE_SPECIAL_EFFECT);
				}

				//
				// pred : search backwards through special effect list for valid child pred
				//

				spec = get_local_entity_child_pred (en, LIST_TYPE_SPECIAL_EFFECT);

				while (TRUE)
				{
					if ((spec == NULL) ||
							(effect_database [get_local_entity_int_value (spec, INT_TYPE_ENTITY_SUB_TYPE)].constructed_locally == FALSE))
					{
						link.child_pred = spec;

						break;
					}

					spec = get_local_entity_child_pred (spec, LIST_TYPE_SPECIAL_EFFECT);
				}

				pack_list_link (en, LIST_TYPE_SPECIAL_EFFECT, &link);
			}
			else
			{

				pack_int_value (en, INT_TYPE_VALID, FALSE);
			}
			/////////////////////////////////////////////////////////////////

			// update_link

			break;
		}
		////////////////////////////////////////
		case PACK_MODE_BROWSE_SESSION:
		////////////////////////////////////////
		{
			break;
		}
		////////////////////////////////////////
		case PACK_MODE_UPDATE_ENTITY:
		////////////////////////////////////////
		{
			//
			// cannot update entity at this level as the update may not apply to all entity types below
			//

			break;
		}
	}
}
Ejemplo n.º 3
0
static void pack_local_data (entity *en, pack_modes mode)
{
	ASSERT ((mode >= 0) && (mode < NUM_PACK_MODES));

	switch (mode)
	{
		////////////////////////////////////////
		case PACK_MODE_SERVER_SESSION:
		case PACK_MODE_CLIENT_SESSION:
		////////////////////////////////////////
		{
			routed_vehicle
				*raw;

			raw = (routed_vehicle *) get_local_entity_data (en);

			pack_entity_type (get_local_entity_type (en));

			pack_entity_safe_ptr (en);

			//
			// pack vehicle data
			//

			pack_vehicle_data (en, &raw->vh, mode);

			/////////////////////////////////////////////////////////////////

			if ((raw->vh.mob.velocity == 0.0) && (raw->desired_velocity == 0.0))
			{

				pack_int_value (en, INT_TYPE_VALID, TRUE);
			}
			else
			{
				
				pack_int_value (en, INT_TYPE_VALID, FALSE);

				pack_float_value (en, FLOAT_TYPE_LOW_VELOCITY, raw->vh.mob.velocity);

				pack_float_value (en, FLOAT_TYPE_DESIRED_VELOCITY, raw->desired_velocity);
			}

			/////////////////////////////////////////////////////////////////

			//
			// pack routed data
			//

			/////////////////////////////////////////////////////////////////
			if ((raw->sub_waypoint_count == 0) && (raw->waypoint_next_index == 0) && (raw->waypoint_this_index == 0))
			{

				pack_int_value (en, INT_TYPE_VALID, FALSE);
			}
			else
			{

				pack_int_value (en, INT_TYPE_VALID, TRUE);
	
				pack_int_value (en, INT_TYPE_SUB_WAYPOINT_COUNT, raw->sub_waypoint_count);
	
				pack_int_value (en, INT_TYPE_WAYPOINT_NEXT_INDEX, raw->waypoint_next_index);
	
				pack_int_value (en, INT_TYPE_WAYPOINT_THIS_INDEX, raw->waypoint_this_index);
			}
			/////////////////////////////////////////////////////////////////

			// sub_waypoint_list reconstructed locally

			//
			// spin through special effects link and pack up local only smoke trails
			//

			pack_routed_vehicle_meta_smoke_lists (en, mode);

			pack_mobile_local_sound_effects (en, mode);

			break;
		}
		////////////////////////////////////////
		case PACK_MODE_BROWSE_SESSION:
		////////////////////////////////////////
		{

			break;
		}
		////////////////////////////////////////
		case PACK_MODE_UPDATE_ENTITY:
		////////////////////////////////////////
		{

			routed_vehicle
				*raw;

			raw = (routed_vehicle *) get_local_entity_data (en);

			pack_vec3d (en, VEC3D_TYPE_POSITION, &raw->vh.mob.position);

			pack_attitude_matrix (en, raw->vh.mob.attitude);

			pack_int_value (en, INT_TYPE_SUB_WAYPOINT_COUNT, raw->sub_waypoint_count);

			break;
		}
	}
}
Ejemplo n.º 4
0
void pack_fixed_data (entity *en, fixed *raw, pack_modes mode)
{
	ASSERT ((mode >= 0) && (mode < NUM_PACK_MODES));

	switch (mode)
	{
		////////////////////////////////////////
		case PACK_MODE_SERVER_SESSION:
		case PACK_MODE_CLIENT_SESSION:
		////////////////////////////////////////
		{
			pack_vec3d (en, VEC3D_TYPE_POSITION, &raw->position);

			/////////////////////////////////////////////////////////////////
			if (mode == PACK_MODE_SERVER_SESSION)
			{

				if (raw->task_dependent_root.first_child)
				{

					pack_int_value (en, INT_TYPE_VALID, TRUE);

					pack_list_root (en, LIST_TYPE_TASK_DEPENDENT, &raw->task_dependent_root);
				}
				else
				{

					pack_int_value (en, INT_TYPE_VALID, FALSE);
				}
			}
			/////////////////////////////////////////////////////////////////

			/////////////////////////////////////////////////////////////////
			if (raw->target_root.first_child)
			{

				pack_int_value (en, INT_TYPE_VALID, TRUE);

				pack_list_root (en, LIST_TYPE_TARGET, &raw->target_root);
			}
			else
			{

				pack_int_value (en, INT_TYPE_VALID, FALSE);
			}
			/////////////////////////////////////////////////////////////////

			// gunship_target_link

			// sector_link

			pack_int_value (en, INT_TYPE_ENTITY_SUB_TYPE, raw->sub_type);

			pack_int_value (en, INT_TYPE_OBJECT_3D_SHAPE, raw->object_3d_shape);

			pack_int_value (en, INT_TYPE_ALIVE, raw->alive);

			pack_int_value (en, INT_TYPE_SIDE, raw->side);

			// gunship_radar_los_clear

			// object_drawn_once_this_frame

			pack_float_value (en, FLOAT_TYPE_HEADING, raw->heading);

			if (raw->heading == 0.0)
			{

				debug_log ("FX_PACK: heading = zero");
			}

			break;
		}
		////////////////////////////////////////
		case PACK_MODE_BROWSE_SESSION:
		////////////////////////////////////////
		{
			break;
		}
		////////////////////////////////////////
		case PACK_MODE_UPDATE_ENTITY:
		////////////////////////////////////////
		{
			//
			// cannot update entity at this level as the update may not apply to all entity types below
			//

			break;
		}
	}
}
Ejemplo n.º 5
0
void pack_local_session_data (pack_modes mode)
{
	session
		*raw;

	entity
		*en;

   ASSERT ((mode >= 0) && (mode < NUM_PACK_MODES));

	en = get_session_entity ();

	ASSERT (en);

	raw = (session *) get_local_entity_data (en);

   switch (mode)
   {
      ////////////////////////////////////////
      case PACK_MODE_SERVER_SESSION:
      ////////////////////////////////////////
		{
			ASSERT (!raw->session_complete);
		
			pack_int_value (en, INT_TYPE_VERSION_NUMBER, raw->version_number);
		
			pack_list_root (en, LIST_TYPE_FORCE, &raw->force_root);
		
			// special_effect_root
		
			// update_link
		
			pack_float_value (en, FLOAT_TYPE_ELAPSED_TIME, raw->elapsed_time);
		
			pack_float_value (en, FLOAT_TYPE_LIGHTNING_TIMER, raw->lightning_timer);
		
			pack_float_value (en, FLOAT_TYPE_START_TIME, raw->start_time);
		
			// time_of_day_resync
		
			pack_float_value (en, FLOAT_TYPE_TIME_OF_DAY_ACCELERATION, raw->time_of_day_acceleration);
		
			pack_float_value (en, FLOAT_TYPE_FOG_OF_WAR_MAXIMUM_VALUE, raw->fog_of_war_maximum_value);
		
			//
			// rain effect
			//
		
			pack_float_value (en, FLOAT_TYPE_WEATHER_RADIUS, raw->weather_radius);
			pack_float_value (en, FLOAT_TYPE_WEATHER_MODE_TRANSITIONAL_PERIOD, raw->weather_mode_transitional_period);
			pack_float_value (en, FLOAT_TYPE_WEATHER_MODE_TRANSITIONAL_STATUS, raw->weather_mode_transitional_status);
		
			pack_int_value (en, INT_TYPE_WEATHER_MODE, raw->weather_mode);
			pack_int_value (en, INT_TYPE_TARGET_WEATHER_MODE, raw->target_weather_mode);
		
			pack_vec3d (en, VEC3D_TYPE_WEATHER_POSITION, &raw->weather_position);
			pack_vec3d (en, VEC3D_TYPE_WEATHER_VELOCITY, &raw->weather_velocity);
		
			//
			// wind effect
			//
		
			pack_float_value (en, FLOAT_TYPE_WIND_EFFECT_RADIUS, raw->wind_effect_radius);
			pack_float_value (en, FLOAT_TYPE_WIND_GUSTING_VALUE, raw->wind_gusting_value);
			pack_float_value (en, FLOAT_TYPE_WIND_MINIMUM_SPEED, raw->wind_minimum_speed);
			pack_float_value (en, FLOAT_TYPE_WIND_MAXIMUM_SPEED, raw->wind_maximum_speed);
		
			pack_vec3d (en, VEC3D_TYPE_WIND_DIRECTION_VECTOR, &raw->wind_direction_vector);
			pack_vec3d (en, VEC3D_TYPE_WIND_EFFECT_POSITION, &raw->wind_effect_position);
			pack_vec3d (en, VEC3D_TYPE_WIND_EFFECT_VELOCITY, &raw->wind_effect_velocity);
		
			//
		
			pack_int_value (en, INT_TYPE_DAY_SEGMENT_TYPE, raw->day_segment_type);

			pack_float_value (en, FLOAT_TYPE_POPULATION_X_MIN, raw->population_x_min);
			pack_float_value (en, FLOAT_TYPE_POPULATION_X_MAX, raw->population_x_max);
			pack_float_value (en, FLOAT_TYPE_POPULATION_Z_MIN, raw->population_z_min);
			pack_float_value (en, FLOAT_TYPE_POPULATION_Z_MAX, raw->population_z_max);
		
			pack_int_value (en, INT_TYPE_CAMPAIGN_MEDAL, raw->campaign_medal);

			pack_int_value (en, INT_TYPE_CAMPAIGN_REQUIRES_APACHE_HAVOC, raw->campaign_requires_apache_havoc);
		
			pack_int_value (en, INT_TYPE_AUTO_ASSIGN_GUNSHIP, raw->auto_assign_gunship);
		
			pack_int_value (en, INT_TYPE_INFINITE_FUEL, raw->infinite_fuel);
		
			pack_int_value (en, INT_TYPE_INFINITE_WEAPONS, raw->infinite_weapons);
		
			pack_int_value (en, INT_TYPE_SUPPRESS_AI_FIRE, raw->suppress_ai_fire);
		
			pack_int_value (en, INT_TYPE_INVULNERABLE_FROM_COLLISIONS, raw->invulnerable_from_collisions);

			pack_int_value (en, INT_TYPE_INVULNERABLE_FROM_WEAPONS, raw->invulnerable_from_weapons);
		
			pack_int_value (en, INT_TYPE_CHEATS_ENABLED, raw->cheats_enabled);
		
			pack_int_value (en, INT_TYPE_SKIP_NIGHT_TIME, raw->skip_night_time);
		
			pack_int_value (en, INT_TYPE_WEATHER_INCREASING, raw->weather_increasing);
		
			pack_int_value (en, INT_TYPE_WIND_INCREASING, raw->wind_increasing);
		
			pack_int_value (en, INT_TYPE_LOCAL_WEATHER_MODEL, raw->local_weather_model);

			break;
		}

      ////////////////////////////////////////
      case PACK_MODE_CLIENT_SESSION:
      ////////////////////////////////////////
      {
         pack_entity_safe_ptr (en);

         pack_int_value (en, INT_TYPE_VERSION_NUMBER, raw->version_number);

			pack_int_value (en, INT_TYPE_SESSION_COMPLETE, raw->session_complete);
		
         pack_list_root (en, LIST_TYPE_FORCE, &raw->force_root);

			pack_list_root (en, LIST_TYPE_SPECIAL_EFFECT, &raw->special_effect_root);

			// update_link

         pack_float_value (en, FLOAT_TYPE_ELAPSED_TIME, raw->elapsed_time);

         pack_float_value (en, FLOAT_TYPE_LIGHTNING_TIMER, raw->lightning_timer);

         pack_float_value (en, FLOAT_TYPE_START_TIME, raw->start_time);

			// time_of_day_resync

         pack_float_value (en, FLOAT_TYPE_TIME_OF_DAY_ACCELERATION, raw->time_of_day_acceleration);

			pack_float_value (en, FLOAT_TYPE_FOG_OF_WAR_MAXIMUM_VALUE, raw->fog_of_war_maximum_value);
		
			//
			// rain effect
			//

         pack_float_value (en, FLOAT_TYPE_WEATHER_RADIUS, raw->weather_radius);
         pack_float_value (en, FLOAT_TYPE_WEATHER_MODE_TRANSITIONAL_PERIOD, raw->weather_mode_transitional_period);
         pack_float_value (en, FLOAT_TYPE_WEATHER_MODE_TRANSITIONAL_STATUS, raw->weather_mode_transitional_status);

         pack_int_value (en, INT_TYPE_WEATHER_MODE, raw->weather_mode);
         pack_int_value (en, INT_TYPE_TARGET_WEATHER_MODE, raw->target_weather_mode);

			pack_vec3d (en, VEC3D_TYPE_WEATHER_POSITION, &raw->weather_position);
			pack_vec3d (en, VEC3D_TYPE_WEATHER_VELOCITY, &raw->weather_velocity);

			//
			// wind effect
			//

         pack_float_value (en, FLOAT_TYPE_WIND_EFFECT_RADIUS, raw->wind_effect_radius);
         pack_float_value (en, FLOAT_TYPE_WIND_GUSTING_VALUE, raw->wind_gusting_value);
         pack_float_value (en, FLOAT_TYPE_WIND_MINIMUM_SPEED, raw->wind_minimum_speed);
         pack_float_value (en, FLOAT_TYPE_WIND_MAXIMUM_SPEED, raw->wind_maximum_speed);

			pack_vec3d (en, VEC3D_TYPE_WIND_DIRECTION_VECTOR, &raw->wind_direction_vector);
			pack_vec3d (en, VEC3D_TYPE_WIND_EFFECT_POSITION, &raw->wind_effect_position);
			pack_vec3d (en, VEC3D_TYPE_WIND_EFFECT_VELOCITY, &raw->wind_effect_velocity);

			//

         pack_int_value (en, INT_TYPE_DAY_SEGMENT_TYPE, raw->day_segment_type);

			pack_float_value (en, FLOAT_TYPE_POPULATION_X_MIN, raw->population_x_min);
			pack_float_value (en, FLOAT_TYPE_POPULATION_X_MAX, raw->population_x_max);
			pack_float_value (en, FLOAT_TYPE_POPULATION_Z_MIN, raw->population_z_min);
			pack_float_value (en, FLOAT_TYPE_POPULATION_Z_MAX, raw->population_z_max);
		
			pack_int_value (en, INT_TYPE_CAMPAIGN_MEDAL, raw->campaign_medal);
		
			pack_int_value (en, INT_TYPE_CAMPAIGN_REQUIRES_APACHE_HAVOC, raw->campaign_requires_apache_havoc);

         pack_int_value (en, INT_TYPE_AUTO_ASSIGN_GUNSHIP, raw->auto_assign_gunship);

         pack_int_value (en, INT_TYPE_INFINITE_FUEL, raw->infinite_fuel);

         pack_int_value (en, INT_TYPE_INFINITE_WEAPONS, raw->infinite_weapons);

         pack_int_value (en, INT_TYPE_SUPPRESS_AI_FIRE, raw->suppress_ai_fire);

         pack_int_value (en, INT_TYPE_INVULNERABLE_FROM_COLLISIONS, raw->invulnerable_from_collisions);

         pack_int_value (en, INT_TYPE_INVULNERABLE_FROM_WEAPONS, raw->invulnerable_from_weapons);

			pack_int_value (en, INT_TYPE_CHEATS_ENABLED, raw->cheats_enabled);
		
         pack_int_value (en, INT_TYPE_SKIP_NIGHT_TIME, raw->skip_night_time);

         pack_int_value (en, INT_TYPE_WEATHER_INCREASING, raw->weather_increasing);

         pack_int_value (en, INT_TYPE_WIND_INCREASING, raw->wind_increasing);

         pack_int_value (en, INT_TYPE_LOCAL_WEATHER_MODEL, raw->local_weather_model);

         break;
      }

      ////////////////////////////////////////
      case PACK_MODE_BROWSE_SESSION:
      ////////////////////////////////////////
      {
         pack_entity_safe_ptr (en);

			pack_int_value (en, INT_TYPE_VERSION_NUMBER, raw->version_number);

         pack_list_root (en, LIST_TYPE_FORCE, &raw->force_root);

			// update_link

			// tour of duty time

         pack_float_value (en, FLOAT_TYPE_ELAPSED_TIME, raw->elapsed_time);

			// lightning_timer

         pack_float_value (en, FLOAT_TYPE_START_TIME, raw->start_time);

			// time_of_day_resync

			// time_of_day_acceleration

			// weather radius

			// weather_mode_transitional_period

			// weather_mode_transitional_status

         pack_int_value (en, INT_TYPE_WEATHER_MODE, raw->weather_mode);

			// target_weather_mode

			// weather position

			// weather velocity

         pack_int_value (en, INT_TYPE_DAY_SEGMENT_TYPE, raw->day_segment_type);

			pack_float_value (en, FLOAT_TYPE_POPULATION_X_MIN, raw->population_x_min);
			pack_float_value (en, FLOAT_TYPE_POPULATION_X_MAX, raw->population_x_max);
			pack_float_value (en, FLOAT_TYPE_POPULATION_Z_MIN, raw->population_z_min);
			pack_float_value (en, FLOAT_TYPE_POPULATION_Z_MAX, raw->population_z_max);
		
			pack_int_value (en, INT_TYPE_CAMPAIGN_REQUIRES_APACHE_HAVOC, raw->campaign_requires_apache_havoc);

			// infinite_weapons

			// skip_night_time

			// weather increasing

         break;
      }
	}
}