MCPcopy Create free account
hub / github.com/TombEngine/TombEngine / FireRopeControl

Function FireRopeControl

TombEngine/Objects/TR4/Object/FireRope.cpp:94–177  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

92}
93
94void FireRopeControl(short itemNumber)
95{
96 auto& item = g_Level.Items[itemNumber];
97
98 if (!TriggerActive(&item))
99 return;
100
101 int meshCount = Objects[item.ObjectNumber].nmeshes - 1;
102
103 if (!(GlobalCounter & 3))
104 {
105 auto spheres = item.GetSpheres();
106 int prevMeshIndex = item.ItemFlags[FireRopeItemFlags::LowerMesh];
107
108 for (int i = item.ItemFlags[FireRopeItemFlags::LowerMesh]; i < item.ItemFlags[FireRopeItemFlags::UpperMesh]; i++)
109 {
110 bool oddMesh = (i & 1);
111
112 if (item.MeshBits.Test(i))
113 {
114 if (oddMesh && prevMeshIndex < spheres.size() && GlobalCounter & 4)
115 {
116 auto pos = Vector3((spheres[prevMeshIndex].Center + spheres[i].Center) / 2);
117 TriggerRopeFlame(pos);
118 }
119 else if (!(GlobalCounter & 4))
120 {
121 TriggerRopeFlame(Vector3i(spheres[i].Center));
122 }
123 }
124
125 if (oddMesh)
126 prevMeshIndex++;
127 }
128
129 if (item.ItemFlags[FireRopeItemFlags::Timeout])
130 {
131 if (item.ItemFlags[FireRopeItemFlags::LowerMesh] > 0)
132 item.ItemFlags[FireRopeItemFlags::LowerMesh]--;
133
134 if (item.ItemFlags[FireRopeItemFlags::UpperMesh] < meshCount)
135 item.ItemFlags[FireRopeItemFlags::UpperMesh]++;
136 }
137 }
138
139 if (item.ItemFlags[FireRopeItemFlags::Timeout])
140 {
141 item.ItemFlags[FireRopeItemFlags::Timeout]--;
142
143 if (!item.ItemFlags[FireRopeItemFlags::Timeout])
144 {
145 item.ItemFlags[FireRopeItemFlags::UpperMesh] =
146 item.ItemFlags[FireRopeItemFlags::LowerMesh] = item.ItemFlags[FireRopeItemFlags::StartMesh];
147
148 ExplodeItemNode(&item, item.ItemFlags[FireRopeItemFlags::StartMesh], 0, BODY_DO_EXPLOSION);
149 }
150 }
151 else if (GlobalCounter & 1)

Callers

nothing calls this directly

Calls 10

TriggerActiveFunction · 0.85
TriggerRopeFlameFunction · 0.85
ExplodeItemNodeFunction · 0.85
TestTriggersFunction · 0.85
KillItemFunction · 0.85
Vector3iClass · 0.70
Vector3Function · 0.50
GetSpheresMethod · 0.45
TestMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected