43 string nameMin, nameMax;
44 int count = tmp.Count();
45 for (
int i; i < count / 2; ++i)
49 if (!parent.MemoryPointExists(nameMin) || !parent.MemoryPointExists(nameMax))
52 vector min = parent.GetMemoryPointPos(nameMin);
53 vector max = parent.GetMemoryPointPos(nameMax);
102 for (
int i = 0; i < count; ++i)
104 mask |= 1 << (offset + i);
139 for (
int i = 0; i < count; ++i)
141 res |= (syncData >> (offset + i) & 1) << i;
400 ErrorEx(
"cannot override m_PartTypeData during runtime!");
455 if (info.m_DoorConstructionPartName ==
GetPartName() && !buildingBase.IsDoorClosed(idx))
456 buildingBase.CloseDoor(idx);
476 parent.SetAnimationPhase(animSourceName, 0);
482 parent.SetAnimationPhase(animSourceName, 1);
490 [
Obsolete(
"1.30: data stored on ConstructionPartTypeData")]
492 [
Obsolete(
"1.30: data stored on ConstructionPartTypeData")]
494 [
Obsolete(
"1.30: data stored on ConstructionPartTypeData")]
496 [
Obsolete(
"1.30: data stored on ConstructionPartTypeData")]
498 [
Obsolete(
"1.30: data stored on ConstructionPartTypeData")]
500 [
Obsolete(
"1.30: data stored on ConstructionPartTypeData")]
504 [
Obsolete(
"1.30: Use 'SetBuiltState' directly")]
510 if (
g_Game.IsMultiplayer())
542 int count = animSourceNameOverrides.Count();
546 for (
int i = 0; i < count; ++i)
548 animSource = animSourceNameOverrides[i];
549 if (!animSourceBehaviorInvetrtedOverrides[i])
565 int count = animSourceNameOverrides.Count();
569 for (
int i = 0; i < count; ++i)
571 animSource = animSourceNameOverrides[i];
572 if (!animSourceBehaviorInvetrtedOverrides[i])
588 int count = phxGeomNames.Count();
592 for (
int i = 0; i < count; ++i)
594 physName = phxGeomNames[i];
595 if (!phxGeomBehaviorInvets[i])
614 int count = phxGeomNames.Count();
618 for (
int i = 0; i < count; ++i)
620 physName = phxGeomNames[i];
621 if (phxGeomBehaviorInvets[i])
640 int count = proxyRoadwayNames.Count();
643 string proxyRoadwayName;
644 for (
int i = 0; i < count; ++i)
646 proxyRoadwayName = proxyRoadwayNames[i];
647 if (!proxyRoadwayBehaviorInvets[i])
649 parent.AddProxyPhysics(proxyRoadwayName);
653 parent.RemoveProxyPhysics(proxyRoadwayName);
663 int count = proxyRoadwayNames.Count();
666 string proxyRoadwayName;
667 for (
int i = 0; i < count; ++i)
669 proxyRoadwayName = proxyRoadwayNames[i];
670 if (proxyRoadwayBehaviorInvets[i])
672 parent.AddProxyPhysics(proxyRoadwayName);
676 parent.RemoveProxyPhysics(proxyRoadwayName);
705 Physics phx = parent.GetPhysics();
716 string name = physName;
718 for (
int idx = 0; idx < count; ++idx)
733 Physics phx = parent.GetPhysics();
744 string name = physName;
746 for (
int idx = 0; idx < count; ++idx)
778 #ifdef DIAG_DEVELOPER
779 if (
IsCLIParam(
"loudConstructionEffectWarnings"))
787 foreach (
string soundPointName : memPointNames)
789 if (soundPointName ==
"" || !parent.MemoryPointExists(soundPointName))
791 ErrorEx(
"'" + soundPointName +
"' memory point not found in the model: " + parent.GetShapeName() +
", skipping construction effects!", severity);
815 string soundsetName =
"";
821 DamageSystem.GetDamageZoneFromComponentName(parent,
GetPartName(), damageZone);
824 if (
g_Game.IsMultiplayer())
827 isDestruction = parent.GetHealth(damageZone,
"Health") <= 0;
846 if (soundsetName !=
"")
847 SEffectManager.PlaySoundEnviroment(soundsetName, effectPos);
857 DamageSystem.GetDamageZoneFromComponentName(parent,
GetPartName(), damageZone);
865 if (parent.GetHealth(damageZone,
"Health") <= 0)
871 if (particleID != ParticleList.INVALID)
881 super.TryHandleUtilityParts(parent);
885 foreach (
string partName : list)
888 if (con.CanBuildUtilityPart(partName))
890 con.AddToConstructedParts(partName);
895 con.RemoveFromConstructedParts(partName);
907 super.HandleHideConstructionPart(parent);
912 super.HandleShowConstructionPart(parent);
917 super.HandleRemovePhysics(parent);
922 super.HandleAddPhysics(parent);
927class ConstructionPartRebuildRubble: ConstructionPartRebuild
932 super.OnBuiltServer(parent,builder);
948 if (!itemTypes || !itemBaseQuantities)
951 float quantityToolCoef = 1.0;
952 ItemBase tool = player.GetItemInHands();
959 vector posHead = MiscGameplayFunctions.GetPlayerHeadPosition(player);
960 vector destination = player.GetPosition();
963 if (parent.MemoryPointExists(
"" + partName +
"_materials"))
965 destination = parent.GetMemoryPointPos(
"" + partName +
"_materials");
966 destination =
g_Game.ObjectModelToWorld(parent, destination);
968 else if (parent.MemoryPointExists(
"" + mainPartName +
"_materials"))
970 destination = parent.GetMemoryPointPos(
"" + mainPartName +
"_materials");
971 destination =
g_Game.ObjectModelToWorld(parent, destination);
975 int count = itemTypes.Count();
976 for (
int i = 0; i < count; ++i)
978 string itemType = itemTypes[i];
979 float quantity = itemBaseQuantities[i];
980 quantity *= quantityToolCoef;
987 MiscGameplayFunctions.CreateItemBasePilesDispersed(itemType, posHead, destination, UAItemsSpreadRadius.NARROW,quantity, MiscGameplayFunctions.GetTypeMaxGlobalHealth(itemType), player);
1003 super.HandleHideConstructionPart(parent);
1016 foreach (
string partName : namesMap)
1032 foreach (
string animSource,
bool hide : ASBMap)
1034 parent.SetAnimationPhase(animSource, hide);
1042 foreach (
string animSource,
bool hide : ASBMap)
1044 parent.SetAnimationPhase(animSource, !hide);
1055 super.OnBeforeBuildServer(parent,builder);
1059 if (
Class.
CastTo(reb, parent.GetConstructionBasic()))
1061 m_TempReversed = reb.ConstructionDirectionCheck(
PlayerBase.Cast(builder),
this, EConstructionDirCheckType.REFERENCE_DIRECTION);
1068 mask |= 1 << offset;
1086 super.HandleShowConstructionPart(parent);
1093 super.HandleHideConstructionPart(parent);
1109 if (defaultSourceName !=
"")
1141 if (barricadeName !=
"")
1147 parent.SetAnimationPhase(barricadeName, 1);
1151 parent.SetAnimationPhase(barricadeName, 0);
class BaseBuildingBase extends ItemBase bsbDebugPrint(string s)
PlayerSpawnPresetDiscreteItemSetSlotData name
one set for cargo
void ConstructionBase(EntityAI parent)
void OnBuiltServer(EntityAI parent, Man builder)
special handling of received materials
int GetLocalSyncBitMask()
void PerformHideAnim(string animSourceName, notnull EntityAI parent)
Sealed on purpose.
void PerformShowAnim(string animSourceName, notnull EntityAI parent)
Sealed on purpose.
ConstructionPartTypeData m_PartTypeData
bool RubbleRemovalCheck(EntityAI parent)
Returns 'true' if all rubble piles are removed.
void PlayConstructionEffects(EntityAI parent)
class ConstructionPart InitAdditionalPartInstanceInfo(PartInstanceInitData initData)
intended to fill in additional INSTANCE info AFTER basic info is filled (which is tied to constructor...
void TryShowAnim(string animSourceName, notnull EntityAI parent)
Override-friendly.
void HandleAddProxyRoadway(EntityAI parent)
void PlayConstructionSound(EntityAI parent, vector effectPos)
Plays sound of current construction state on parent; BaseBuildingBase uses its own class events for t...
void HandleAddPhysics(EntityAI parent)
typedef HandleSubvariantAnim
void TryHandleUtilityParts(EntityAI parent)
Currently only local part state + animations, not a proper synced build!
void ProcessPhysicsRemove(string name, notnull EntityAI parent)
Groups all actions needed to 'remove physics'.
void PlayConstructionParticle(EntityAI parent, vector effectPos)
Plays particle of current construction state on parent; BaseBuildingBase uses its own class events fo...
void SpawnRubbleMaterials(EntityAI parent, Man builder)
void HandleRemovePhysics(EntityAI parent)
void TryHideAnim(string animSourceName, notnull EntityAI parent)
Override-friendly.
void ProcessPhysicsAdd(string name, notnull EntityAI parent)
Groups all actions needed to 'add physics'.
void InitCustomPartInstanceProperties(PartInstanceInitData initData)
Generic init method for custom part instance properties.
void HandleShowConstructionPart(EntityAI parent)
void AddPartGeom(EntityAI parent, string physName)
Non-proxy physics handling, ADDING.
void RemovePartGeom(EntityAI parent, string physName)
Non-proxy physics handling, REMOVAL.
void OnRubbleRemoved(EntityAI parent)
animate defined animsources
array< ref array< vector > > TConstructionPartInsiderBoxData
void HandleRemoveProxyRoadway(EntityAI parent)
void OnRubbleCreated(EntityAI parent)
void HandleHideConstructionPart(EntityAI parent)
const int ANIMATION_EFFECT_DELAY_BUILD
no. of bits to store synced info, per part. System not ready for variable size parts yet.
void ParticleManager(ParticleManagerSettings settings)
Constructor (ctor)
Super root of all classes in Enforce script.
static void AddPartToProcess(ConstructionBase con, ConstructionPart part)
Static part of the construction system, for global handling mostly.
bool HasRelatedGUICategories()
void ClearPartBitMask(inout int syncData, int offset)
void OnBuiltServer(EntityAI parent, Man builder)
void PlayConstructionSound(EntityAI parent, vector effectPos)
Plays sound of current construction state on parent; BaseBuildingBase uses its own class events for t...
void HandleShowConstructionPart(EntityAI parent)
int GetSyncDataSize()
Not ready for overrides yet. All in good time.
void HandleHideConstructionPart(EntityAI parent)
void OnBeforeDismantleServer(EntityAI parent, Man dismantler)
void InitAdditionalPartInstanceInfo(PartInstanceInitData initData)
intended to fill in additional INSTANCE info AFTER basic info is filled (which is tied to constructor...
void OnBeforeBuildServer(EntityAI parent, Man builder)
void CloseDoorOnPartUnbuild(EntityAI parent)
bool HasEssentialAttachmentSlots()
int GetLocalSyncBitMask()
int GetMaxRepairLevel(ItemBase tool=null, PlayerBase player=null)
health state from 'GetHealthLevel', not the actual health float value!
int GetHandBuildFBAnimOverride()
ConstructionPartStaticsSupportData GetPartStaticsSupportData()
array< string > GetItemFallingData()
strings of min/max selections (should be single points in memory LOD)
bool DamageToolOnDeconstruct()
bool DamageHandsOnDeconstruct()
void TryHandleUtilityParts(EntityAI parent)
int GetSupportProvided(int category)
int GetBuildIndicationTypeMask()
set< int > GetConfiguredSupportCategories()
int CalculateBitMaskOnBuild(int offset)
default behavior for simple parts
void ComposeSyncDataOnDismantle(inout int syncData, int offset)
static const int BITWISE_SYNCINFO_SIZE_BASE
ConstructionPartTypeData m_PartTypeData
int GetMaterialType()
rough material type, used for effect playback
int CalculateBitMaskOnDestroy(int offset)
default behavior for simple parts
string GetBuildTextOverride()
array< string > GetEssentialAttachmentSlots()
float GetPartDecayThreshold()
void OnDestroyedServer(EntityAI parent, Man destroyer)
array< string > GetConflictedParts()
ref TConstructionPartInsiderBoxData m_InsiderBoxData
array< string > GetRelatedGUICategoryNames()
void PlayConstructionParticle(EntityAI parent, vector effectPos)
Plays particle of current construction state on parent; BaseBuildingBase uses its own class events fo...
void TryShowAnim(string animSourceName, notnull EntityAI parent)
Override-friendly.
int GetDismantleActionTypeMask()
int CalculateLocalSyncBitMask(int syncData, int offset)
Translates the bitmask value from the main syncVariable into simple int format of 'GetSyncDataSize' s...
void PartInstanceDeferredInit(EntityAI parent)
Init stuff reliant on entity position or other stuff that can't be done in constructor.
void SetBuiltState(bool is_built)
void PerformShowAnim(string animSourceName, notnull EntityAI parent)
Sealed on purpose.
array< string > GetCollisionData()
strings of min/max selections (should be single points in memory LOD)
int GetSupportRequirement(int category)
void HandleAddPhysics(EntityAI parent)
TConstructionPartVariantArray GetRequiredPartsVariants()
int CalculateBitMaskOnDismantle(int offset)
default behavior for simple parts
void ConstructionPart(string name, string part_name, string main_part_name, int id, bool is_built, bool is_base, bool is_gate, array< string > required_parts)
string GetDismantleTextOverride()
bool CanBeRepaired(int zoneHealthLevel, ItemBase tool=null, PlayerBase player=null)
const int ANIMATION_EFFECT_DELAY_BUILD
no. of bits to store synced info, per part. System not ready for variable size parts yet.
bool DamageHandsOnBuild()
int m_LocalSyncBitMask
Entity-type object storing non-instanced data.
bool CanSimulateItemFalling()
void PlayConstructionEffects(EntityAI parent)
bool IsLocalSyncBuilt()
'true' if synced as built already
void ComposeSyncDataOnDestroy(inout int syncData, int offset)
void SetRequestBuiltState(bool req_built)
obsolete, stored on 'ConstructionPartTypeData'
void SetPartTypeData(ConstructionPartTypeData ptd)
ref array< string > m_RequiredParts
void InitInsiderBoxData(EntityAI parent)
'inside' box data to help determine whether the character is inside. Modelspace.
TConstructionPartInsiderBoxData GetInsiderBoxData()
translated MODELSPACE positions of min/max memory points (should be single points in memory LOD)
int GetBuildActionTypeMask()
void OnDismantledServer(EntityAI parent, Man dismantler)
void ComposeSyncDataOnBuild(inout int syncData, int offset)
void PerformHideAnim(string animSourceName, notnull EntityAI parent)
Sealed on purpose.
void OnBeforeDestroyServer(EntityAI parent, Man destroyer)
array< string > GetRequiredParts()
void HandleRemovePhysics(EntityAI parent)
void TryHideAnim(string animSourceName, notnull EntityAI parent)
Override-friendly.
void StoreLocalSyncBitMask(int bitmask)
array< ref ConstructionMaterialData > GetMaterialsData()
string GetSoundsetBuild()
int GetParticleDestroyID()
array< string > GetSoundEffectMemoryPointNames()
string GetSoundsetDismantle()
string GetSoundsetDestroy()
Instanced construction part data classes for dynamic data, statics now stored on EntityType level in ...
override void HandleHideConstructionPart(EntityAI parent)
override void HandleShowConstructionPart(EntityAI parent)
override void HandleRemovePhysics(EntityAI parent)
override void HandleAddPhysics(EntityAI parent)
Inverted show/hide functionality.
string GetSourceNameBarricade()
override void HandleShowConstructionPart(EntityAI parent)
int CalculateBitMaskOnBuild(int offset)
override bool IsReversible()
override void OnBeforeBuildServer(EntityAI parent, Man builder)
override void HandleHideConstructionPart(EntityAI parent)
void HandleSubvariantAnim(EntityAI parent)
override bool IsReversedLocal()
string GetReversedSourceName()
string GetDefaultSourceName()
array< string > GetRubbleMaterialTypes()
map< string, bool > CustomAnimationSourceBehaviorMap()
array< float > GetRubbleMaterialBaseQuantities()
array< string > GetRelatedPartNames()
array< string > GetPartTypeAnimSourceNameOverrides()
array< int > GetPartTypeAnimSourceBehaviorInverts()
array< string > GetPartTypePhxGeomNames()
array< int > GetPartTypePhxGeomBehaviorInverts()
static parts info, lives on EntityType level. Instanced data in 'ConstructionPart' class
static bool IsBaseBuildingLogEnable()
proto external int GetGeomInteractionLayer(int index)
Returns interaction layer mask of the geometry element.
proto external int GetNumGeoms()
Returns number of geometries of the entity.
proto external void SetGeomInteractionLayer(int index, int mask)
Sets interaction layer mask of the geometry element.
proto external string GetGeomName(int index)
Returns name of a geometry element.
void HandleSubvariantAnim(EntityAI parent)
barricade rotation
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
static void SanitizeMinsMaxs(inout vector min, inout vector max)
Makes sure all values in MIN are lower than the MAX.
static proto bool CastTo(out Class to, Class from)
Try to safely down-cast base class to child class.
void Obsolete(string msg="")
static proto float Round(float f)
Returns mathematical round of value.
proto native bool IsCLIParam(string param)
Returns if command line argument is present.