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

Function GetTargetOnLOS

TombEngine/Game/control/los.cpp:147–287  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

145}
146
147bool GetTargetOnLOS(GameVector* origin, GameVector* target)
148{
149 auto dir = target->ToVector3() - origin->ToVector3();
150 dir.Normalize();
151
152 auto target2 = *target;
153 int result = LOS(origin, &target2);
154
155 GetFloor(target2.x, target2.y, target2.z, &target2.RoomNumber);
156
157 if (Lara.Control.Look.IsUsingLasersight)
158 {
159 Lara.Control.Weapon.HasFired = true;
160 Lara.RightArm.GunFlash = Weapons[(int)Lara.Control.Weapon.GunType].FlashTime;
161
162 if (Lara.Control.Weapon.GunType == LaraWeaponType::Revolver)
163 SoundEffect(SFX_TR4_REVOLVER_FIRE, nullptr);
164
165 if (Lara.Control.Weapon.GunType == LaraWeaponType::Crossbow)
166 {
167 FireCrossBowFromLaserSight(*LaraItem, origin, &target2);
168 return false;
169 }
170 }
171
172 StaticMesh* mesh = nullptr;
173 auto vector = Vector3i::Zero;
174 int itemNumber = ObjectOnLOS2(origin, target, &vector, &mesh);
175 bool hasHit = (itemNumber != NO_LOS_ITEM);
176
177 if (!hasHit)
178 {
179 if (!result)
180 {
181 SpawnDecal(target2.ToVector3(), target2.RoomNumber, DecalType::BulletHole);
182
183 target2.x -= (target2.x - origin->x) >> 5;
184 target2.y -= (target2.y - origin->y) >> 5;
185 target2.z -= (target2.z - origin->z) >> 5;
186 TriggerRicochetSpark(target2, LaraItem->Pose.Orientation.y);
187 }
188
189 return false;
190 }
191
192 bool hitProcessed = false;
193
194 target2.x = vector.x - ((vector.x - origin->x) >> 5);
195 target2.y = vector.y - ((vector.y - origin->y) >> 5);
196 target2.z = vector.z - ((vector.z - origin->z) >> 5);
197 GetFloor(target2.x, target2.y, target2.z, &target2.RoomNumber);
198
199 // TODO: This is a shatter bug workaround, should be removed after proper conversion to newer LOS tests
200 // such as GetRoomLosCollision et al -- Lwmte, 15.10.25
201 int shatterRoomNumber = FindRoomNumber(target2.ToVector3i(), target2.RoomNumber, true);
202
203 if (itemNumber < 0)
204 {

Callers 2

FireWeaponFunction · 0.85
LasersightWeaponHandlerFunction · 0.85

Calls 15

LOSFunction · 0.85
GetFloorFunction · 0.85
SoundEffectFunction · 0.85
ObjectOnLOS2Function · 0.85
SpawnDecalFunction · 0.85
FindRoomNumberFunction · 0.85
ShatterObjectFunction · 0.85
GetShatterSoundFunction · 0.85
RayClass · 0.85
HitTargetFunction · 0.85
SmashObjectFunction · 0.85

Tested by

no test coverage detected