Пример #1
0
static void set_local_raw_vec3d (entity *en, vec3d_types type, vec3d *v)
{
	weapon
		*raw;

	ASSERT (v);

	#if DEBUG_MODULE

	debug_log_entity_args (ENTITY_DEBUG_LOCAL, ENTITY_DEBUG_VEC3D, en, type, v);

	#endif

	raw = get_local_entity_data (en);

	switch (type)
	{
		////////////////////////////////////////
		case VEC3D_TYPE_POSITION:
		////////////////////////////////////////
		{
			raw->mob.position = *v;

			break;
		}
		////////////////////////////////////////
		default:
		////////////////////////////////////////
		{
			debug_fatal_invalid_vec3d_type (en, type);

			break;
		}
	}
}
Пример #2
0
static vec3d *get_local_vec3d_ptr (entity *en, vec3d_types type)
{
	object
		*raw;

	vec3d
		*v;

	raw = (object *) get_local_entity_data (en);

	switch (type)
	{
		////////////////////////////////////////
		case VEC3D_TYPE_OBJECT_SCALING:
		////////////////////////////////////////
		{
			v = &raw->object_scaling;

			break;
		}
		////////////////////////////////////////
		default:
		////////////////////////////////////////
		{
			debug_fatal_invalid_vec3d_type (en, type);

			break;
		}
	}

	return (v);
}
Пример #3
0
static void set_local_vec3d (entity *en, vec3d_types type, vec3d *v)
{
	group
		*raw;

	ASSERT (v);

	#if DEBUG_MODULE

	debug_log_entity_args (ENTITY_DEBUG_LOCAL, ENTITY_DEBUG_VEC3D, en, type, v);

	#endif

	raw = (group *) get_local_entity_data (en);

	switch (type)
	{
		////////////////////////////////////////
		case VEC3D_TYPE_LAST_KNOWN_POSITION:
		////////////////////////////////////////
		{
			raw->last_known_position = *v;

			break;
		}
		////////////////////////////////////////
		default:
		////////////////////////////////////////
		{
			debug_fatal_invalid_vec3d_type (en, type);

			break;
		}
	}
}
Пример #4
0
static void get_local_vec3d (entity *en, vec3d_types type, vec3d *v)
{
	object
		*raw;

	ASSERT (v);

	raw = (object *) get_local_entity_data (en);

	switch (type)
	{
		////////////////////////////////////////
		case VEC3D_TYPE_OBJECT_SCALING:
		////////////////////////////////////////
		{
			*v = raw->object_scaling;

			break;
		}
		////////////////////////////////////////
		default:
		////////////////////////////////////////
		{
			debug_fatal_invalid_vec3d_type (en, type);

			break;
		}
	}
}
Пример #5
0
static void set_local_vec3d (entity *en, vec3d_types type, vec3d *v)
{
	city
		*raw;

	ASSERT (v);

	#if DEBUG_MODULE

	debug_log_entity_args (ENTITY_DEBUG_LOCAL, ENTITY_DEBUG_VEC3D, en, type, v);

	#endif

	raw = get_local_entity_data (en);

	switch (type)
	{
		////////////////////////////////////////
		default:
		////////////////////////////////////////
		{
			debug_fatal_invalid_vec3d_type (en, type);

			break;
		}
	}
}
Пример #6
0
static vec3d *get_local_vec3d_ptr (entity *en, vec3d_types type)
{
	weapon
		*raw;

	vec3d
		*v;

	raw = get_local_entity_data (en);

	switch (type)
	{
		////////////////////////////////////////
		case VEC3D_TYPE_POSITION:
		////////////////////////////////////////
		{
			v = &raw->mob.position;

			break;
		}
		////////////////////////////////////////
		default:
		////////////////////////////////////////
		{
			debug_fatal_invalid_vec3d_type (en, type);

			break;
		}
	}

	return (v);
}
Пример #7
0
static void get_local_vec3d (entity *en, vec3d_types type, vec3d *v)
{
	weapon
		*raw;

	ASSERT (v);

	raw = get_local_entity_data (en);

	switch (type)
	{
		////////////////////////////////////////
		case VEC3D_TYPE_POSITION:
		////////////////////////////////////////
		{
			*v = raw->mob.position;

			break;
		}
		////////////////////////////////////////
		default:
		////////////////////////////////////////
		{
			debug_fatal_invalid_vec3d_type (en, type);

			break;
		}
	}
}
Пример #8
0
static void set_local_vec3d (entity *en, vec3d_types type, vec3d *v)
{

	task
		*raw;

	ASSERT (v);

	#if DEBUG_MODULE

	debug_log_entity_args (ENTITY_DEBUG_LOCAL, ENTITY_DEBUG_VEC3D, en, type, v);

	#endif

	raw = get_local_entity_data (en);

	switch (type)
	{
		////////////////////////////////////////
		case VEC3D_TYPE_POSITION:
		////////////////////////////////////////
		{

			// is this needed for mobile landing ?
			//
			// if parent == keysite then mobile landing entity
			//
/*
			entity
				*parent;

			parent = get_local_entity_parent (en, LIST_TYPE_GENERIC_TASK);

			if (parent)
			{

				if (parent->type == ENTITY_TYPE_KEYSITE)
				{

					notify_local_entity (ENTITY_MESSAGE_SET_ENTITY_POSITION, parent, en, v, 0.0, 0.0);
				}
			}
*/
			raw->position = *v;

			break;
		}
		////////////////////////////////////////
		default:
		////////////////////////////////////////
		{
			debug_fatal_invalid_vec3d_type (en, type);

			break;
		}
	}
}
Пример #9
0
static vec3d *get_local_vec3d_ptr (entity *en, vec3d_types type)
{
	aircraft
		*raw;

	vec3d
		*v;

	raw = (aircraft *) get_local_entity_data (en);

	switch (type)
	{
		////////////////////////////////////////
		case VEC3D_TYPE_MOTION_VECTOR:
		////////////////////////////////////////
		{
			v = &raw->mob.motion_vector;

			break;
		}
		////////////////////////////////////////
		case VEC3D_TYPE_POSITION:
		////////////////////////////////////////
		{
			v = &raw->mob.position;

			break;
		}
		////////////////////////////////////////
		case VEC3D_TYPE_WEAPON_TO_TARGET_VECTOR:
		////////////////////////////////////////
		{
			v = &raw->weapon_to_target_vector;

			break;
		}
		////////////////////////////////////////
		case VEC3D_TYPE_WEAPON_VECTOR:
		////////////////////////////////////////
		{
			v = &raw->weapon_vector;

			break;
		}
		////////////////////////////////////////
		default:
		////////////////////////////////////////
		{
			debug_fatal_invalid_vec3d_type (en, type);

			break;
		}
	}

	return (v);
}
Пример #10
0
static vec3d *get_local_vec3d_ptr (entity *en, vec3d_types type)
{
	group
		*raw;

	vec3d
		*v;

	raw = (group *) get_local_entity_data (en);

	switch (type)
	{
		////////////////////////////////////////
		case VEC3D_TYPE_POSITION:
		////////////////////////////////////////
		{
			entity
				*member;

			member = (entity *) get_local_entity_ptr_value (en, PTR_TYPE_GROUP_LEADER);

			if (member)
			{
				v = get_local_entity_vec3d_ptr (member, type);
			}
			else
			{
				v = NULL;
			}

			break;
		}
		////////////////////////////////////////
		case VEC3D_TYPE_LAST_KNOWN_POSITION:
		////////////////////////////////////////
		{
			v = &raw->last_known_position;

			break;
		}
		////////////////////////////////////////
		default:
		////////////////////////////////////////
		{
			debug_fatal_invalid_vec3d_type (en, type);

			break;
		}
	}

	return (v);
}
Пример #11
0
static vec3d *get_local_vec3d_ptr (entity *en, vec3d_types type)
{
	task
		*raw;

	vec3d
		*v;

	raw = get_local_entity_data (en);

	switch (type)
	{
		////////////////////////////////////////
		case VEC3D_TYPE_POSITION:
		////////////////////////////////////////
		{
			v = &raw->position;

			break;
		}
		////////////////////////////////////////
		case VEC3D_TYPE_START_POSITION:
		////////////////////////////////////////
		{
			v = &raw->route_nodes [0];

			break;
		}
		////////////////////////////////////////
		case VEC3D_TYPE_STOP_POSITION:
		////////////////////////////////////////
		{
			v = &raw->route_nodes [raw->route_length - 1];

			break;
		}
		////////////////////////////////////////
		default:
		////////////////////////////////////////
		{
			debug_fatal_invalid_vec3d_type (en, type);

			break;
		}
	}

	return (v);
}
Пример #12
0
static void get_local_vec3d (entity *en, vec3d_types type, vec3d *v)
{
	group
		*raw;

	ASSERT (v);

	raw = (group *) get_local_entity_data (en);

	switch (type)
	{
		////////////////////////////////////////
		case VEC3D_TYPE_POSITION:
		////////////////////////////////////////
		{
			#ifdef DEBUG
			
			debug_fatal ("Invalid call to get group position");

			#endif

			break;
		}
		////////////////////////////////////////
		case VEC3D_TYPE_LAST_KNOWN_POSITION:
		////////////////////////////////////////
		{
			#ifdef DEBUG
			
			debug_fatal ("Invalid call to get group last known position. Use ptr not vec3d copy");

			#endif

			break;
		}
		////////////////////////////////////////
		default:
		////////////////////////////////////////
		{
			debug_fatal_invalid_vec3d_type (en, type);

			break;
		}
	}
}
Пример #13
0
static void get_local_vec3d (entity *en, vec3d_types type, vec3d *v)
{
	task
		*raw;

	ASSERT (v);

	raw = get_local_entity_data (en);

	switch (type)
	{
		////////////////////////////////////////
		case VEC3D_TYPE_POSITION:
		////////////////////////////////////////
		{
			*v = raw->position;

			break;
		}
		////////////////////////////////////////
		case VEC3D_TYPE_START_POSITION:
		////////////////////////////////////////
		{
			*v = raw->route_nodes [0];

			break;
		}
		////////////////////////////////////////
		case VEC3D_TYPE_STOP_POSITION:
		////////////////////////////////////////
		{
			*v = raw->route_nodes [raw->route_length - 1];

			break;
		}
		////////////////////////////////////////
		default:
		////////////////////////////////////////
		{
			debug_fatal_invalid_vec3d_type (en, type);

			break;
		}
	}
}
Пример #14
0
static void get_local_vec3d (entity *en, vec3d_types type, vec3d *v)
{
	guide
		*raw;

	ASSERT (v);

	raw = get_local_entity_data (en);

	switch (type)
	{
		////////////////////////////////////////
		case VEC3D_TYPE_GUIDE_POSITION:
		////////////////////////////////////////
		{
			get_local_guide_position (en, v);

			break;
		}
		////////////////////////////////////////
		case VEC3D_TYPE_POSITION:
		////////////////////////////////////////
		{
			*v = raw->position;			

			break;
		}
		////////////////////////////////////////
		case VEC3D_TYPE_RELATIVE_POSITION:
		////////////////////////////////////////
		{
			*v = raw->position;			

			break;
		}
		////////////////////////////////////////
		default:
		////////////////////////////////////////
		{
			debug_fatal_invalid_vec3d_type (en, type);

			break;
		}
	}
}
Пример #15
0
static void set_local_vec3d (entity *en, vec3d_types type, vec3d *v)
{
	guide
		*raw;

	ASSERT (v);

	#if DEBUG_MODULE

	debug_log_entity_args (ENTITY_DEBUG_LOCAL, ENTITY_DEBUG_VEC3D, en, type, v);

	#endif

	raw = get_local_entity_data (en);

	switch (type)
	{
		////////////////////////////////////////
		case VEC3D_TYPE_POSITION:
		////////////////////////////////////////
		{
			raw->position = *v;

			break;
		}
		////////////////////////////////////////
		case VEC3D_TYPE_RELATIVE_POSITION:
		////////////////////////////////////////
		{
			raw->position = *v;			// No - this isn't a cut'n'paste error !!

			break;
		}
		////////////////////////////////////////
		default:
		////////////////////////////////////////
		{
			debug_fatal_invalid_vec3d_type (en, type);

			break;
		}
	}
}
Пример #16
0
static vec3d *get_local_vec3d_ptr (entity *en, vec3d_types type)
{
	guide
		*raw;

	vec3d
		*v;

	raw = get_local_entity_data (en);

	switch (type)
	{
		////////////////////////////////////////
		case VEC3D_TYPE_POSITION:
		////////////////////////////////////////
		{
			v = &raw->position;

		  	break;
		}
		////////////////////////////////////////
		case VEC3D_TYPE_RELATIVE_POSITION:
		////////////////////////////////////////
		{
			v = &raw->position;			// No - this isn't a cut'n'paste error !!

			break;
		}
		////////////////////////////////////////
		default:
		////////////////////////////////////////
		{
			debug_fatal_invalid_vec3d_type (en, type);

			break;
		}
	}

	return (v);
}
Пример #17
0
static vec3d *get_local_vec3d_ptr (entity *en, vec3d_types type)
{
	city
		*raw;

	vec3d
		*v;

	raw = (city *) get_local_entity_data (en);

	switch (type)
	{
		////////////////////////////////////////
		case VEC3D_TYPE_BOUNDING_BOX_MAX:
		////////////////////////////////////////
		{
			v = &raw->bounding_box_max;

			break;
		}
		////////////////////////////////////////
		case VEC3D_TYPE_BOUNDING_BOX_MIN:
		////////////////////////////////////////
		{
			v = &raw->bounding_box_min;

			break;
		}
		////////////////////////////////////////
		default:
		////////////////////////////////////////
		{
			debug_fatal_invalid_vec3d_type (en, type);

			break;
		}
	}

	return (v);
}
Пример #18
0
static void get_local_vec3d (entity *en, vec3d_types type, vec3d *v)
{
	city
		*raw;

	ASSERT (v);

	raw = (city *) get_local_entity_data (en);

	switch (type)
	{
		////////////////////////////////////////
		case VEC3D_TYPE_BOUNDING_BOX_MAX:
		////////////////////////////////////////
		{
			*v = raw->bounding_box_max;

			break;
		}
		////////////////////////////////////////
		case VEC3D_TYPE_BOUNDING_BOX_MIN:
		////////////////////////////////////////
		{
			*v = raw->bounding_box_min;

			break;
		}
		////////////////////////////////////////
		default:
		////////////////////////////////////////
		{
			debug_fatal_invalid_vec3d_type (en, type);

			break;
		}
	}
}
Пример #19
0
static void set_local_vec3d (entity *en, vec3d_types type, vec3d *v)
{
	object
		*raw;

	ASSERT (v);

	#if DEBUG_MODULE

	debug_log_entity_args (ENTITY_DEBUG_LOCAL, ENTITY_DEBUG_VEC3D, en, type, v);

	#endif

	raw = (object *) get_local_entity_data (en);

	switch (type)
	{
		////////////////////////////////////////
		case VEC3D_TYPE_OBJECT_SCALING:
		////////////////////////////////////////
		{

			raw->object_scaling = *v;

			break;
		}
		////////////////////////////////////////
		default:
		////////////////////////////////////////
		{
			debug_fatal_invalid_vec3d_type (en, type);

			break;
		}
	}
}
Пример #20
0
static void get_local_vec3d (entity *en, vec3d_types type, vec3d *v)
{
	waypoint
		*raw;

	ASSERT (v);

	raw = get_local_entity_data (en);

	switch (type)
	{
		////////////////////////////////////////
		case VEC3D_TYPE_POSITION:
		////////////////////////////////////////
		{

			switch (raw->position_type)
			{

				case POSITION_TYPE_VIRTUAL:
				{
					entity
						*position_entity;

					vec3d
						*pos;

					position_entity = get_local_entity_parent (en, LIST_TYPE_TASK_DEPENDENT);

					if (position_entity)
					{
						pos = get_local_entity_vec3d_ptr (position_entity, VEC3D_TYPE_POSITION);

						v->x = pos->x;
						v->y = pos->y;
						v->z = pos->z;
					}
					else
					{
						v->x = MID_MAP_X;
						v->y = MID_MAP_Y;
						v->z = MID_MAP_Z;
					}
					
				  	break;
				}
				default:
				{
			
					*v = raw->position;
					
				  	break;
				}
			}

			break;
		}
		////////////////////////////////////////
		default:
		////////////////////////////////////////
		{
			debug_fatal_invalid_vec3d_type (en, type);

			break;
		}
	}
}
Пример #21
0
static vec3d *get_local_vec3d_ptr (entity *en, vec3d_types type)
{
	waypoint
		*raw;

	vec3d
		*v;

	raw = get_local_entity_data (en);

	switch (type)
	{
		////////////////////////////////////////
		case VEC3D_TYPE_POSITION:
		////////////////////////////////////////
		{

			switch (raw->position_type)
			{

				case POSITION_TYPE_VIRTUAL:
				{

					entity
						*position_entity;

					position_entity = get_local_entity_parent (en, LIST_TYPE_TASK_DEPENDENT);

					if (position_entity)
					{
	
						v = get_local_entity_vec3d_ptr (position_entity, VEC3D_TYPE_POSITION);
					}
					else
					{

						v = NULL;
					}
					
				  	break;
				}
				default:
				{

					v = &raw->position;
					
				  	break;
				}
			}

			break;
		}
		////////////////////////////////////////
		default:
		////////////////////////////////////////
		{
			debug_fatal_invalid_vec3d_type (en, type);

			break;
		}
	}

	return (v);
}
Пример #22
0
static void set_local_vec3d (entity *en, vec3d_types type, vec3d *v)
{
	keysite
		*raw;

	ASSERT (v);

	#if DEBUG_MODULE

	debug_log_entity_args (ENTITY_DEBUG_LOCAL, ENTITY_DEBUG_VEC3D, en, type, v);

	#endif

	raw = (keysite *) get_local_entity_data (en);

	switch (type)
	{
		////////////////////////////////////////
		case VEC3D_TYPE_POSITION:
		////////////////////////////////////////
		{
			int
				old_x_sec,
				old_z_sec,
				new_x_sec,
				new_z_sec;

			entity
				*parent;

			get_x_sector (old_x_sec, raw->position.x);
			get_z_sector (old_z_sec, raw->position.z);

			get_x_sector (new_x_sec, v->x);
			get_z_sector (new_z_sec, v->z);

			if ((old_x_sec != new_x_sec) || (old_z_sec != new_z_sec))
			{
				delete_local_entity_from_parents_child_list (en, LIST_TYPE_SECTOR);

				raw->position = *v;

				parent = get_local_raw_sector_entity (new_x_sec, new_z_sec);

				insert_local_entity_into_parents_child_list (en, LIST_TYPE_SECTOR, parent, NULL);
			}
			else
			{
				raw->position = *v;
			}

			break;
		}
		////////////////////////////////////////
		default:
		////////////////////////////////////////
		{
			debug_fatal_invalid_vec3d_type (en, type);

			break;
		}
	}
}
Пример #23
0
static void set_local_vec3d (entity *en, vec3d_types type, vec3d *v)
{
   aircraft
      *raw;

   ASSERT (v);

   #if DEBUG_MODULE

   debug_log_entity_args (ENTITY_DEBUG_LOCAL, ENTITY_DEBUG_VEC3D, en, type, v);

   #endif

   raw = (aircraft *) get_local_entity_data (en);

   switch (type)
   {
      ////////////////////////////////////////
      case VEC3D_TYPE_MOTION_VECTOR:
      ////////////////////////////////////////
      {
         raw->mob.motion_vector = *v;

         break;
      }
      ////////////////////////////////////////
      case VEC3D_TYPE_POSITION:
      ////////////////////////////////////////
      {

         float
            heading;

         entity
				*dependent,
				*special_effect,
				*old_sector,
				*new_sector;

			//
			// notify dependents of move, must be done before set_vec3d so children can work out delta positions
			//

         heading = 0.0;

			//if (get_local_entity_type (en) == ENTITY_TYPE_HELICOPTER)
			{

				heading = get_heading_from_attitude_matrix (raw->mob.attitude);
	
				dependent = get_local_entity_first_child (en, LIST_TYPE_MOVEMENT_DEPENDENT);
	
				while (dependent)
				{
					#if DEBUG_MODULE_AIRCRAFT_POSITION_MESSAGE
	
					debug_log ("AIRCRAFT VEC3D: sending set entity position %f, %f, %f", raw->mob.position.x, raw->mob.position.y, raw->mob.position.z);
	
					#endif
	
					notify_local_entity (ENTITY_MESSAGE_SET_ENTITY_POSITION, dependent, en, v, (double) heading, (double) raw->mob.velocity);
	
					dependent = get_local_entity_child_succ (dependent, LIST_TYPE_MOVEMENT_DEPENDENT);
				}
			}

			//
			// Actual set_vec3d
			//

         raw->mob.position = *v;

			//
			// check if entered new sector
			//

			old_sector = get_local_entity_parent (en, LIST_TYPE_SECTOR);

			new_sector = get_local_sector_entity (v);

         if (old_sector != new_sector)
         {
            delete_local_entity_from_parents_child_list (en, LIST_TYPE_SECTOR);

            insert_local_entity_into_parents_child_list (en, LIST_TYPE_SECTOR, new_sector, NULL);

				//
				// play speech for flown across "front-line"
				//

				if (get_comms_model () == COMMS_MODEL_SERVER)
				{
					if (get_local_entity_int_value (new_sector, INT_TYPE_SIDE) != get_local_entity_int_value (old_sector, INT_TYPE_SIDE))
					{
						play_aircraft_flown_into_new_sector_speech (en, old_sector, new_sector);
					}
				}
         }

			//
			// notify special effects of move
			//

			special_effect = get_local_entity_first_child (en, LIST_TYPE_SPECIAL_EFFECT);

			while (special_effect)
			{
				#if DEBUG_MODULE_AIRCRAFT_POSITION_MESSAGE

				debug_log ("AIRCRAFT VEC3D: sending set entity position %f, %f, %f", raw->mob.position.x, raw->mob.position.y, raw->mob.position.z);

				#endif

				notify_local_entity (ENTITY_MESSAGE_SET_ENTITY_POSITION, special_effect, en, &raw->mob.position, (double) heading, (double) raw->mob.velocity);

				special_effect = get_local_entity_child_succ (special_effect, LIST_TYPE_SPECIAL_EFFECT);
			}

         break;
      }
      ////////////////////////////////////////
      case VEC3D_TYPE_WEAPON_TO_TARGET_VECTOR:
      ////////////////////////////////////////
      {
         raw->weapon_to_target_vector = *v;

         break;
      }
      ////////////////////////////////////////
      case VEC3D_TYPE_WEAPON_VECTOR:
      ////////////////////////////////////////
      {
         raw->weapon_vector = *v;

         break;
      }
      ////////////////////////////////////////
      default:
      ////////////////////////////////////////
      {
         debug_fatal_invalid_vec3d_type (en, type);

         break;
      }
   }
}
Пример #24
0
static void set_local_vec3d (entity *en, vec3d_types type, vec3d *v)
{
	weapon
		*raw;

	ASSERT (v);

	#if DEBUG_MODULE

	debug_log_entity_args (ENTITY_DEBUG_LOCAL, ENTITY_DEBUG_VEC3D, en, type, v);

	#endif

	raw = get_local_entity_data (en);

	switch (type)
	{
		////////////////////////////////////////
		case VEC3D_TYPE_POSITION:
		////////////////////////////////////////
		{
			entity
				*special_effect,
				*old_sector,
				*new_sector;

			raw->mob.position = *v;

			old_sector = get_local_entity_parent (en, LIST_TYPE_SECTOR);

			new_sector = get_local_sector_entity (v);

			if (old_sector != new_sector)
			{
				delete_local_entity_from_parents_child_list (en, LIST_TYPE_SECTOR);

				insert_local_entity_into_parents_child_list (en, LIST_TYPE_SECTOR, new_sector, NULL);
			}

			//
			// notify special effects of move
			//

			special_effect = get_local_entity_first_child (en, LIST_TYPE_SPECIAL_EFFECT);

			while (special_effect)
			{
				#if DEBUG_MODULE

				debug_log ("WEAPON VEC3D: sending set entity position %f, %f, %f", raw->mob.position.x, raw->mob.position.y, raw->mob.position.z);

				#endif

				notify_local_entity (ENTITY_MESSAGE_SET_ENTITY_POSITION, special_effect, en, &raw->mob.position, 0.0, 0.0);

				special_effect = get_local_entity_child_succ (special_effect, LIST_TYPE_SPECIAL_EFFECT);
			}

			break;
		}
		////////////////////////////////////////
		default:
		////////////////////////////////////////
		{
			debug_fatal_invalid_vec3d_type (en, type);

			break;
		}
	}
}