Files
GTASource/game/physics/gtaArchetype.h
expvintl 419f2e4752 init
2025-02-23 17:40:52 +08:00

171 lines
10 KiB
C++

//
// gtaArchetype.h
//
#ifndef GTA_PHYSICS_ARCHETYPE_H
#define GTA_PHYSICS_ARCHETYPE_H
#include "physics/archetype.h"
#include "fragment/type.h"
#include "scene/2deffect.h"
#include "entity/archetypeManager.h"
namespace rage
{
class fwVehicleGlassWindowData;
}
namespace ArchetypeProperties
{
enum
{
IS_ALREADY_PROCESSED = phArchetype::PROPERTY_USER_0
};
}
// namespace for all type and include flags
// Please keep this in sync with the debug names near the bottom of gtaArchetype.cpp and with
// the ragebuilder copy in src/dev/rage/framework/tools/src/cli/ragebuilder/gta_res.h
namespace ArchetypeFlags
{
// The default type is on by default for all archetypes so that any two objects will be collidable by default.
// It can be used as some other type by projects that set type flags and include flags for all objects.
enum
{
//GTA_TYPE = DEFAULT_TYPE,
GTA_MAP_TYPE_WEAPON = BIT(1),
GTA_MAP_TYPE_MOVER = BIT(2),
GTA_MAP_TYPE_HORSE = BIT(3),
GTA_MAP_TYPE_COVER = BIT(4),
GTA_MAP_TYPE_VEHICLE = BIT(5),
GTA_VEHICLE_NON_BVH_TYPE = BIT(6),
GTA_VEHICLE_BVH_TYPE = BIT(7),
GTA_BOX_VEHICLE_TYPE = BIT(8),
GTA_PED_TYPE = BIT(9),
GTA_RAGDOLL_TYPE = BIT(10),
GTA_HORSE_TYPE = BIT(11),
GTA_HORSE_RAGDOLL_TYPE = BIT(12),
GTA_OBJECT_TYPE = BIT(13),
GTA_ENVCLOTH_OBJECT_TYPE = BIT(14),
GTA_PLANT_TYPE = BIT(15),
GTA_PROJECTILE_TYPE = BIT(16),
GTA_EXPLOSION_TYPE = BIT(17),
GTA_PICKUP_TYPE = BIT(18),
GTA_FOLIAGE_TYPE = BIT(19),
GTA_FORKLIFT_FORKS_TYPE = BIT(20),
GTA_WEAPON_TEST = BIT(21),
GTA_CAMERA_TEST = BIT(22),
GTA_AI_TEST = BIT(23),
GTA_SCRIPT_TEST = BIT(24),
GTA_WHEEL_TEST = BIT(25),
GTA_GLASS_TYPE = BIT(26),
GTA_RIVER_TYPE = BIT(27),
GTA_SMOKE_TYPE = BIT(28),
GTA_UNSMASHED_TYPE = BIT(29),
GTA_STAIR_SLOPE_TYPE = BIT(30),
GTA_DEEP_SURFACE_TYPE = BIT(31)
};
// compilations of the above type flags into include type sets
enum
{
// useful base combinations
GTA_VEHICLE_TYPE = GTA_VEHICLE_NON_BVH_TYPE | GTA_VEHICLE_BVH_TYPE | GTA_WHEEL_TEST,
GTA_ALL_MAP_TYPES = GTA_MAP_TYPE_MOVER,
GTA_ALL_TYPES_MOVER = GTA_MAP_TYPE_MOVER | GTA_VEHICLE_TYPE | GTA_PED_TYPE | GTA_OBJECT_TYPE | GTA_PICKUP_TYPE | GTA_GLASS_TYPE | GTA_RIVER_TYPE,
GTA_ALL_TYPES_WEAPON = GTA_MAP_TYPE_WEAPON | GTA_VEHICLE_NON_BVH_TYPE | GTA_VEHICLE_BVH_TYPE | GTA_PED_TYPE | GTA_OBJECT_TYPE | GTA_PICKUP_TYPE | GTA_GLASS_TYPE | GTA_RIVER_TYPE,
GTA_ALL_SHAPETEST_TYPES = GTA_WEAPON_TEST | GTA_CAMERA_TEST | GTA_AI_TEST | GTA_SCRIPT_TEST | GTA_WHEEL_TEST,
GTA_CORE_SHAPETEST_TYPES = GTA_WEAPON_TEST | GTA_AI_TEST | GTA_SCRIPT_TEST | GTA_WHEEL_TEST,
// include flag sets for basic game object types
GTA_BUILDING_INCLUDE_TYPES = GTA_VEHICLE_NON_BVH_TYPE | GTA_FORKLIFT_FORKS_TYPE | GTA_PED_TYPE | GTA_RAGDOLL_TYPE | GTA_OBJECT_TYPE | GTA_PLANT_TYPE | GTA_EXPLOSION_TYPE | GTA_PROJECTILE_TYPE | GTA_ALL_SHAPETEST_TYPES | GTA_GLASS_TYPE | GTA_HORSE_TYPE | GTA_HORSE_RAGDOLL_TYPE,
GTA_VEHICLE_INCLUDE_TYPES = GTA_MAP_TYPE_VEHICLE | GTA_VEHICLE_TYPE | GTA_FORKLIFT_FORKS_TYPE | GTA_BOX_VEHICLE_TYPE | GTA_PED_TYPE | GTA_RAGDOLL_TYPE | GTA_OBJECT_TYPE | GTA_ENVCLOTH_OBJECT_TYPE | GTA_PLANT_TYPE | GTA_EXPLOSION_TYPE | GTA_PROJECTILE_TYPE | GTA_PICKUP_TYPE | GTA_ALL_SHAPETEST_TYPES | GTA_GLASS_TYPE | GTA_FOLIAGE_TYPE | GTA_HORSE_TYPE | GTA_HORSE_RAGDOLL_TYPE | GTA_SMOKE_TYPE,
GTA_BOX_VEHICLE_INCLUDE_TYPES = GTA_VEHICLE_NON_BVH_TYPE | GTA_FORKLIFT_FORKS_TYPE | GTA_BOX_VEHICLE_TYPE | GTA_PED_TYPE | GTA_RAGDOLL_TYPE | GTA_OBJECT_TYPE | GTA_EXPLOSION_TYPE | GTA_PROJECTILE_TYPE | GTA_WEAPON_TEST | GTA_AI_TEST | GTA_SCRIPT_TEST | GTA_GLASS_TYPE | GTA_HORSE_TYPE | GTA_HORSE_RAGDOLL_TYPE,
GTA_PED_INCLUDE_TYPES = GTA_ALL_MAP_TYPES | GTA_VEHICLE_TYPE | GTA_FORKLIFT_FORKS_TYPE | GTA_BOX_VEHICLE_TYPE | GTA_PED_TYPE | GTA_RAGDOLL_TYPE | GTA_OBJECT_TYPE | GTA_ENVCLOTH_OBJECT_TYPE | GTA_PLANT_TYPE | GTA_PROJECTILE_TYPE | GTA_PICKUP_TYPE | GTA_ALL_SHAPETEST_TYPES | GTA_GLASS_TYPE | GTA_FOLIAGE_TYPE | GTA_HORSE_TYPE | GTA_HORSE_RAGDOLL_TYPE,
GTA_RAGDOLL_INCLUDE_TYPES = GTA_ALL_MAP_TYPES | GTA_VEHICLE_TYPE | GTA_FORKLIFT_FORKS_TYPE | GTA_BOX_VEHICLE_TYPE | GTA_PED_TYPE | GTA_RAGDOLL_TYPE | GTA_OBJECT_TYPE | GTA_ENVCLOTH_OBJECT_TYPE | GTA_PLANT_TYPE | GTA_EXPLOSION_TYPE | GTA_PROJECTILE_TYPE | GTA_ALL_SHAPETEST_TYPES | GTA_GLASS_TYPE | GTA_FOLIAGE_TYPE | GTA_HORSE_TYPE | GTA_HORSE_RAGDOLL_TYPE | GTA_SMOKE_TYPE | GTA_DEEP_SURFACE_TYPE,
GTA_ENVCLOTH_OBJECT_INCLUDE_TYPES = GTA_ALL_MAP_TYPES | GTA_VEHICLE_TYPE | GTA_FORKLIFT_FORKS_TYPE | GTA_PED_TYPE | GTA_RAGDOLL_TYPE | GTA_OBJECT_TYPE | GTA_GLASS_TYPE | GTA_WEAPON_TEST | GTA_HORSE_RAGDOLL_TYPE,
GTA_PARACHUTING_PED_INCLUDE_TYPES = GTA_ALL_MAP_TYPES | GTA_VEHICLE_TYPE | GTA_BOX_VEHICLE_TYPE | GTA_OBJECT_TYPE | GTA_GLASS_TYPE,
GTA_OBJECT_INCLUDE_TYPES = GTA_ALL_MAP_TYPES | GTA_VEHICLE_TYPE | GTA_FORKLIFT_FORKS_TYPE | GTA_PED_TYPE | GTA_RAGDOLL_TYPE | GTA_OBJECT_TYPE | GTA_EXPLOSION_TYPE | GTA_PROJECTILE_TYPE | GTA_ALL_SHAPETEST_TYPES | GTA_GLASS_TYPE | GTA_HORSE_TYPE | GTA_HORSE_RAGDOLL_TYPE,
GTA_PLANT_INCLUDE_TYPES = GTA_ALL_MAP_TYPES | GTA_VEHICLE_NON_BVH_TYPE | GTA_FORKLIFT_FORKS_TYPE | GTA_PED_TYPE | GTA_RAGDOLL_TYPE | GTA_HORSE_TYPE | GTA_HORSE_RAGDOLL_TYPE,
// include flag sets for special game object types
GTA_DOOR_OBJECT_INCLUDE_TYPES = GTA_VEHICLE_TYPE | GTA_VEHICLE_BVH_TYPE | GTA_FORKLIFT_FORKS_TYPE | GTA_PED_TYPE | GTA_RAGDOLL_TYPE | GTA_OBJECT_TYPE | GTA_EXPLOSION_TYPE | GTA_PROJECTILE_TYPE | GTA_ALL_SHAPETEST_TYPES | GTA_GLASS_TYPE | GTA_HORSE_TYPE | GTA_HORSE_RAGDOLL_TYPE,
GTA_PROJECTILE_INCLUDE_TYPES = GTA_ALL_MAP_TYPES | GTA_VEHICLE_TYPE | GTA_FORKLIFT_FORKS_TYPE | GTA_BOX_VEHICLE_TYPE | GTA_RAGDOLL_TYPE | GTA_OBJECT_TYPE | GTA_EXPLOSION_TYPE | GTA_PICKUP_TYPE | GTA_ALL_SHAPETEST_TYPES | GTA_GLASS_TYPE | GTA_HORSE_RAGDOLL_TYPE,
GTA_PROJECTILE_NEAR_INCLUDE_TYPES = GTA_MAP_TYPE_WEAPON | GTA_VEHICLE_TYPE | GTA_FORKLIFT_FORKS_TYPE | GTA_BOX_VEHICLE_TYPE | GTA_RAGDOLL_TYPE | GTA_OBJECT_TYPE | GTA_EXPLOSION_TYPE | GTA_PICKUP_TYPE | GTA_ALL_SHAPETEST_TYPES | GTA_GLASS_TYPE | GTA_HORSE_RAGDOLL_TYPE,
GTA_EXPLOSION_INCLUDE_TYPES = GTA_ALL_MAP_TYPES | GTA_VEHICLE_NON_BVH_TYPE | GTA_FORKLIFT_FORKS_TYPE | GTA_BOX_VEHICLE_TYPE | GTA_RAGDOLL_TYPE | GTA_OBJECT_TYPE | GTA_PROJECTILE_TYPE | GTA_PICKUP_TYPE | GTA_GLASS_TYPE | GTA_HORSE_RAGDOLL_TYPE,
GTA_SMOKE_INCLUDE_TYPES = GTA_ALL_MAP_TYPES | GTA_VEHICLE_NON_BVH_TYPE | GTA_PED_TYPE | GTA_RAGDOLL_TYPE | GTA_OBJECT_TYPE | GTA_HORSE_TYPE | GTA_HORSE_RAGDOLL_TYPE,
GTA_VEH_SEAT_INCLUDE_FLAGS = (GTA_VEHICLE_INCLUDE_TYPES & ~GTA_ALL_SHAPETEST_TYPES),
GTA_WHEEL_INCLUDE_TYPES = (GTA_VEHICLE_INCLUDE_TYPES & ~(GTA_WHEEL_TEST | GTA_PICKUP_TYPE | GTA_FORKLIFT_FORKS_TYPE | GTA_CAMERA_TEST)), // Wheels collide with everything vehicles do
GTA_VEH_BVH_CHASSIS_INCLUDE_TYPES = GTA_VEHICLE_NON_BVH_TYPE | GTA_PED_TYPE | GTA_RAGDOLL_TYPE | GTA_OBJECT_TYPE | GTA_PROJECTILE_TYPE | GTA_ALL_SHAPETEST_TYPES | GTA_HORSE_TYPE | GTA_HORSE_RAGDOLL_TYPE,
GTA_CAR_DOOR_UNLATCHED_INCLUDE_TYPES= GTA_VEHICLE_INCLUDE_TYPES,
GTA_CAR_DOOR_LATCHED_INCLUDE_TYPES = GTA_CORE_SHAPETEST_TYPES | GTA_PROJECTILE_TYPE,
GTA_CAR_BUMPER_INCLUDE_TYPES = GTA_PED_TYPE | GTA_RAGDOLL_TYPE | GTA_ALL_SHAPETEST_TYPES | GTA_VEHICLE_NON_BVH_TYPE,
// include sets for world probe type tests
GTA_MELEE_VISIBILTY_TYPES = GTA_ALL_MAP_TYPES | GTA_VEHICLE_NON_BVH_TYPE | GTA_FORKLIFT_FORKS_TYPE | GTA_OBJECT_TYPE | GTA_GLASS_TYPE,
GTA_WEAPON_TYPES = GTA_VEHICLE_TYPE | GTA_FORKLIFT_FORKS_TYPE | GTA_RAGDOLL_TYPE | GTA_OBJECT_TYPE | GTA_PROJECTILE_TYPE | GTA_GLASS_TYPE | GTA_MAP_TYPE_WEAPON | GTA_RIVER_TYPE | GTA_HORSE_RAGDOLL_TYPE,
GTA_MOBILE_ACTORS_TYPES = GTA_VEHICLE_NON_BVH_TYPE | GTA_FORKLIFT_FORKS_TYPE | GTA_PED_TYPE | GTA_RAGDOLL_TYPE | GTA_OBJECT_TYPE | GTA_GLASS_TYPE | GTA_HORSE_TYPE | GTA_HORSE_RAGDOLL_TYPE,
GTA_CAMERA_CLIPPING_TYPES = GTA_VEHICLE_NON_BVH_TYPE | GTA_RAGDOLL_TYPE | GTA_OBJECT_TYPE | GTA_PICKUP_TYPE | GTA_MAP_TYPE_WEAPON | GTA_RIVER_TYPE | GTA_UNSMASHED_TYPE | GTA_HORSE_RAGDOLL_TYPE,
// include flag sets for high detail map collision
GTA_HIGH_DETAIL_MAP_INCLUDE_TYPES = GTA_WEAPON_TEST | GTA_CAMERA_TEST | GTA_PROJECTILE_TYPE,
// bullets and projectiles
GTA_WEAPON_AND_PROJECTILE_INCLUDE_TYPES = GTA_WEAPON_TEST | GTA_PROJECTILE_TYPE,
GTA_BASIC_ATTACHMENT_INCLUDE_TYPES = GTA_WEAPON_TEST | GTA_PROJECTILE_TYPE | GTA_EXPLOSION_TYPE,
GTA_BASIC_ATTACHMENT_AND_CAMERA_INCLUDE_TYPES = GTA_BASIC_ATTACHMENT_INCLUDE_TYPES | GTA_CAMERA_TEST
};
#if !__FINAL
const int maxBits = 32;
const char * GetBoundFlagName(const u32 bit);
void PrintBoundFlags(const u32 flags, const char * pPrefixString, bool onlyPrintFlagsUsed = false);
void SetupCustomBoundFlagNames();
extern const char* sm_BoundFlagName[maxBits];
#endif
}
class gtaFragType : public fragType
{
public:
gtaFragType() {}
gtaFragType(datResource& rsc);
~gtaFragType();
IMPLEMENT_PLACE_INLINE(gtaFragType);
void SetModelId(fwModelId modelId) {SetUserData((void*)(size_t)(modelId.ConvertToU32()));}
fwModelId GetModelId() { return (fwModelId::ConvertTofwModelId((u32)(size_t)GetUserData())); }
// AF: DO NOT ADD ANY DATA TO THIS CLASS AS IT WILL BREAK THE RESOURCED FRAGMENT OBJECTS!!!!!
#if !__FINAL
void DeclareStruct(datTypeStruct &s);
#endif // !__FINAL
//protected:
atArray< CLightAttr > m_lights;
fwVehicleGlassWindowData* m_vehicleWindowData;
datOwner< atArray<u8> > m_pTintData;
};
#endif // end of #ifndef GTA_PHYSICS_ARCHETYPE_H