31 static int m_LastRegisteredMaterial = 0;
35 static int m_LastRegisteredIgnoredAmmo = 0;
42 static int PLASTIC = RegisterSurface(
"Hit_Plastic");
43 static int SAND = RegisterSurface(
"Hit_Sand");
44 static int DESERT_SAND = RegisterSurface(
"Hit_Desert_Sand");
45 static int TEXTILE = RegisterSurface(
"Hit_Textile");
46 static int CONCRETE = RegisterSurface(
"Hit_Concrete");
47 static int GRAVEL = RegisterSurface(
"Hit_Gravel");
48 static int DIRT = RegisterSurface(
"Hit_Dirt");
49 static int FOLIAGE = RegisterSurface(
"Hit_Foliage");
50 static int FOLIAGE_GREEN = RegisterSurface(
"Hit_Foliage_Green");
51 static int FOLIAGE_CONIFER = RegisterSurface(
"Hit_Foliage_Conifer");
52 static int GRASS = RegisterSurface(
"Hit_Grass");
53 static int WOOD = RegisterSurface(
"Hit_Wood");
54 static int METAL = RegisterSurface(
"Hit_Metal");
55 static int GLASS = RegisterSurface(
"Hit_Glass");
56 static int GLASS_THIN = RegisterSurface(
"Hit_Glass_Thin");
57 static int WATER = RegisterSurface(
"Hit_Water");
58 static int RUBBER = RegisterSurface(
"Hit_Rubber");
59 static int PLASTER = RegisterSurface(
"Hit_Plaster");
60 static int ICE = RegisterSurface(
"Hit_Ice");
61 static int SNOW = RegisterSurface(
"Hit_Snow");
62 static int MEATBONES = RegisterSurface(
"Hit_MeatBones");
63 static int MEATBONES_SHOVEL = RegisterSurface(
"Hit_MeatBones_MeleeShovel");
64 static int MEATBONES_PIPEWRENCH = RegisterSurface(
"Hit_MeatBones_MeleePipeWrench");
65 static int MEATBONES_WRENCH = RegisterSurface(
"Hit_MeatBones_MeleeWrench");
66 static int MEATBONES_FIST = RegisterSurface(
"Hit_MeatBones_MeleeFist");
67 static int UNDEFINED = RegisterSurface(
"Hit_Undefined");
68 static int ERROR_NO_MATERIAL = RegisterSurface(
"Hit_ErrorNoMaterial");
76 static int FIST = RegisterIgnoredAmmo(
"MeleeFist");
77 static int FIST_HEAVY = RegisterIgnoredAmmo(
"MeleeFist_Heavy");
78 static int SOFT = RegisterIgnoredAmmo(
"MeleeSoft");
79 static int SOFT_HEAVY = RegisterIgnoredAmmo(
"MeleeSoft_Heavy");
80 static int DUMMY = RegisterIgnoredAmmo(
"Dummy_Light");
81 static int DUMMY_HEAVY = RegisterIgnoredAmmo(
"Dummy_Heavy");
84 static int RegisterSurface(
string surface)
89 m_ImpactEffect.Insert(surface, surface.ToType());
91 return ++m_LastRegisteredMaterial;
94 static bool UnregisterSurface(
string surface)
98 m_ImpactEffect.Remove(surface);
99 return !m_ImpactEffect.Contains(surface);
105 static int RegisterIgnoredAmmo(
string ammo)
110 ++m_LastRegisteredIgnoredAmmo;
112 m_IgnoredAmmo.Insert(ammo, m_LastRegisteredIgnoredAmmo);
114 return m_LastRegisteredIgnoredAmmo;
117 static bool UnregisterIgnoredAmmo(
string ammo)
121 m_IgnoredAmmo.Remove(ammo);
122 return !m_IgnoredAmmo.Contains(ammo);
128 static typename GetImpactEffect(
string surface,
string ammoType)
130 string key =
string.Format(
"%1_%2", surface, ammoType);
132 typename eff_type = m_ImpactEffect[key];
137 return m_ImpactEffect[surface];
140 static void EvaluateImpactEffectEx(ImpactEffectsData pData)
142 EvaluateImpactEffect(pData.m_DirectHit, pData.m_ComponentIndex, pData.m_Surface, pData.m_Position, pData.m_ImpactType, pData.m_SurfaceNormal, pData.m_ExitPosition, pData.m_InSpeed, pData.m_OutSpeed, pData.m_IsDeflected, pData.m_AmmoType, pData.m_IsWater);
145 static void EvaluateImpactEffect(
Object directHit,
int componentIndex,
string surface,
vector pos,
int impact_type,
vector surfNormal,
vector exitPos,
vector inSpeed,
vector outSpeed,
bool deflected,
string ammoType,
bool isWater)
148 if (m_IgnoredAmmo.Contains(ammoType))
160 surface =
"Hit_Water";
164 if ( !eff && surface ==
"" )
170 RegisterSurface(surface);
171 ErrorEx(
string.Format(
"Unregistered surface for bullet impact effect (%1). Register this surface in ImpactMaterials (Script) for better performance.", surface),
ErrorExSeverity.WARNING);
177 string object_type = directHit.GetType();
179 if ( object_type ==
"" )
180 object_type =
"OBJECT_WITHOUT_CONFIG_CLASS";
182 ErrorEx(
string.Format(
"Object '%1' with model file: %2 has undefined 'Hit_...' material! Cannot play impact effect.", object_type, directHit.GetShapeName()));
188 if ( !eff && surface !=
"" )
190 ErrorEx(
string.Format(
"Unregistered surface impact material <%1>! Register this surface in ImpactMaterials (Script).", surface));
196 eff.EvaluateEffect(directHit, componentIndex, pos, impact_type, surfNormal, exitPos, inSpeed, outSpeed, ammoType);
197 eff.SetAutodestroy(
true);