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

Function GetFishStartPosition

TombEngine/Objects/TR3/Entity/FishSwarm.cpp:215–239  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

213 }
214
215 static Vector3 GetFishStartPosition(const ItemInfo& item)
216 {
217 constexpr auto BUFFER = BLOCK(0.1f);
218 constexpr auto SPHEROID_SEMI_MAJOR_AXIS = Vector3(BLOCK(2), BLOCK(1), BLOCK(5));
219
220 auto pos = Random::GeneratePointInSpheroid(item.StartPose.Position.ToVector3(), EulerAngles::Identity, SPHEROID_SEMI_MAJOR_AXIS);
221
222 // Get point collision.
223 auto pointColl = GetPointCollision(pos, item.RoomNumber);
224
225 // 1) Test for water room.
226 if (!TestEnvironment(ENV_FLAG_WATER, pointColl.GetRoomNumber()))
227 return Vector3::Zero;
228
229 // 2) Assess point collision.
230 if (pos.y >= (pointColl.GetFloorHeight() - BUFFER) ||
231 pos.y <= (pointColl.GetWaterTopHeight() + BUFFER) ||
232 pointColl.GetSector().IsWall(item.Pose.Position.x + BUFFER, item.Pose.Position.z + BUFFER) ||
233 pointColl.GetSector().IsWall(item.Pose.Position.x - BUFFER, item.Pose.Position.z - BUFFER))
234 {
235 return Vector3::Zero;
236 }
237
238 return pos;
239 }
240
241 void UpdateFishSwarm()
242 {

Callers 1

UpdateFishSwarmFunction · 0.85

Calls 9

GeneratePointInSpheroidFunction · 0.85
GetPointCollisionFunction · 0.85
TestEnvironmentFunction · 0.85
GetWaterTopHeightMethod · 0.80
Vector3Function · 0.50
ToVector3Method · 0.45
GetRoomNumberMethod · 0.45
GetFloorHeightMethod · 0.45
IsWallMethod · 0.45

Tested by

no test coverage detected