void GetAvailableMedicalRooms(long playerId, out List <MyMedicalRoom> medicalRooms) { List <MyCubeGrid> cubeGrids = MyEntities.GetEntities().OfType <MyCubeGrid>().ToList(); medicalRooms = new List <MyMedicalRoom>(); foreach (var grid in cubeGrids) { grid.GridSystems.UpdatePower(); foreach (var slimBlock in grid.GetBlocks()) { MyMedicalRoom medicalRoom = slimBlock.FatBlock as MyMedicalRoom; if (medicalRoom != null) { medicalRoom.UpdateIsWorking(); if (medicalRoom.IsWorking) { if (medicalRoom.HasPlayerAccess(playerId) || medicalRoom.SetFactionToSpawnee) { medicalRooms.Add(medicalRoom); } } } } } }
static void GetAvailableMedicalRooms(long playerId, List <MyMedicalRoomInfo> medicalRooms) { List <MyCubeGrid> cubeGrids = MyEntities.GetEntities().OfType <MyCubeGrid>().ToList(); foreach (var grid in cubeGrids) { grid.GridSystems.UpdatePower(); foreach (var slimBlock in grid.GetBlocks()) { MyMedicalRoom medicalRoom = slimBlock.FatBlock as MyMedicalRoom; if (medicalRoom != null) { medicalRoom.UpdateIsWorking(); if (medicalRoom.IsWorking) { if (medicalRoom.HasPlayerAccess(playerId) || medicalRoom.SetFactionToSpawnee) { MyMedicalRoomInfo info = new MyMedicalRoomInfo(); info.MedicalRoomId = medicalRoom.EntityId; info.MedicalRoomName = medicalRoom.CustomName != null?medicalRoom.CustomName.ToString() : (medicalRoom.Name != null ? medicalRoom.Name : medicalRoom.ToString()); info.OxygenLevel = medicalRoom.GetOxygenLevel(); info.OwnerId = medicalRoom.IDModule.Owner; Vector3D medRoomPosition = medicalRoom.PositionComp.GetPosition(); Vector3D preferredCameraPosition = medRoomPosition + medicalRoom.WorldMatrix.Up * 20 + medicalRoom.WorldMatrix.Right * 20 + medicalRoom.WorldMatrix.Forward * 20; Vector3D?cameraPosition = MyEntities.FindFreePlace(preferredCameraPosition, 1); if (!cameraPosition.HasValue) { cameraPosition = preferredCameraPosition; } info.PrefferedCameraPosition = cameraPosition.Value; info.MedicalRoomPosition = medRoomPosition; info.MedicalRoomUp = medicalRoom.PositionComp.WorldMatrix.Up; if (medicalRoom.CubeGrid.Physics != null) { info.MedicalRoomVelocity = medicalRoom.CubeGrid.Physics.LinearVelocity; } medicalRooms.Add(info); } } } } } }
private MyMedicalRoom FindRespawnMedicalRoom(long medicalRoomId, MyPlayer player) { MyMedicalRoom medicalRoom = null; if (MyEntities.TryGetEntityById(medicalRoomId, out medicalRoom)) { if (!medicalRoom.IsWorking) { return(null); } if (player != null && !medicalRoom.HasPlayerAccess(player.Identity.IdentityId)) { return(null); } } return(medicalRoom); }
private MyMedicalRoom GetNearestMedRoom(Vector3 position, out List <MyMedicalRoom> medicalRooms, long?identityId = null) { List <MyCubeGrid> cubeGrids = MyEntities.GetEntities().OfType <MyCubeGrid>().ToList(); medicalRooms = new List <MyMedicalRoom>(); MyMedicalRoom closestMedicalRoom = null; float closestDistance = float.MaxValue; foreach (var grid in cubeGrids) { foreach (var slimBlock in grid.GetBlocks()) { MyMedicalRoom medicalRoom = slimBlock.FatBlock as MyMedicalRoom; if (medicalRoom != null && medicalRoom.IsWorking) { if (!identityId.HasValue || medicalRoom.HasPlayerAccess(identityId.Value)) { float distanceFromCenter = (float)medicalRoom.PositionComp.GetPosition().Length(); //Limit spawn position to be inside the world (with some safe margin) if ((!MyEntities.IsWorldLimited() && distanceFromCenter > MAX_DISTANCE_TO_RESPAWN) || (MyEntities.IsWorldLimited() && distanceFromCenter > MyEntities.WorldSafeHalfExtent())) { continue; } float distance = Vector3.Distance(position, medicalRoom.PositionComp.GetPosition()); medicalRooms.Add(medicalRoom); if (distance < closestDistance) { closestMedicalRoom = medicalRoom; closestDistance = distance; } } } } } return(closestMedicalRoom); }