public override bool HandleInputAfterSimulation() { if (m_respawnsTable.SelectedRow != null && MySession.Static.GetCameraControllerEnum() != MyCameraControllerEnum.Entity) { MyMedicalRoomInfo userData = m_respawnsTable.SelectedRow.UserData as MyMedicalRoomInfo; if (userData != null) { m_respawnButton.Enabled = false; MyMedicalRoom medicalRoom; if (MyEntities.TryGetEntityById <MyMedicalRoom>(userData.MedicalRoomId, out medicalRoom)) { m_respawnButton.Enabled = true; Vector3D medRoomPosition = (Vector3D)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; } MySpectatorCameraController.Static.Position = cameraPosition.Value; MySpectatorCameraController.Static.SetTarget(medRoomPosition, medicalRoom.WorldMatrix.Up); } } } return(true); }
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 void OnTableItemDoubleClick(MyGuiControlTable sender, MyGuiControlTable.EventArgs eventArgs) { if (m_respawnsTable.SelectedRow != null) { MyMedicalRoomInfo userData = m_respawnsTable.SelectedRow.UserData as MyMedicalRoomInfo; MyMedicalRoom medicalRoom; if (userData == null || (userData != null && MyEntities.TryGetEntityById <MyMedicalRoom>(userData.MedicalRoomId, out medicalRoom))) { onRespawnClick(m_respawnButton); } else { MyGuiSandbox.AddScreen(MyGuiSandbox.CreateMessageBox( canHideOthers: false, buttonType: MyMessageBoxButtonsType.OK, messageCaption: MyTexts.Get(MyCommonTexts.MessageBoxCaptionNotReady), messageText: MyTexts.Get(MyCommonTexts.MessageBoxTextNotReady))); } } }
public override bool Update(bool hasFocus) { /*if (m_respawnsTable.RowsCount == 0 && State != MyGuiScreenState.CLOSING && MySession.Static.LocalHumanPlayer != null) * { * MyPlayerCollection.RespawnRequest(joinGame: true, newPlayer: true, medicalId: 0, shipPrefabId: null); * CloseScreen(); * }*/ UpdateSpawnShipTimes(); bool retval = base.Update(hasFocus); if (m_selectedRespawnShip != null) { var rc = MySpaceRespawnComponent.Static; int cooldown = rc.GetRespawnCooldownSeconds(MySession.Static.LocalHumanPlayer.Id, m_selectedRespawnShip.Id.SubtypeName); if (rc.IsSynced && cooldown == 0) { RespawnShipImmediately(m_selectedRespawnShip.Id.SubtypeName); } } if (m_respawnsTable.RowsCount == 0) { RefreshRespawnPoints();//because medical rooms are not powered when the map starts } if (m_respawnsTable.SelectedRow != null && MySession.Static.GetCameraControllerEnum() != MyCameraControllerEnum.Entity) { MyMedicalRoomInfo userData = m_respawnsTable.SelectedRow.UserData as MyMedicalRoomInfo; if (userData != null) { m_respawnButton.Enabled = false; MyMedicalRoom medicalRoom; if (MyEntities.TryGetEntityById <MyMedicalRoom>(userData.MedicalRoomId, out medicalRoom)) { m_respawnButton.Enabled = true; Vector3D medRoomPosition = (Vector3D)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; } MySession.Static.SetCameraController(MyCameraControllerEnum.Spectator, null, cameraPosition.Value); MySpectatorCameraController.Static.Target = medRoomPosition; } } } if (m_labelNoRespawn.Text == null) { m_labelNoRespawn.Visible = false; } else { m_labelNoRespawn.Visible = true; } return(retval); }
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.ToString(); info.OxygenLevel = medicalRoom.GetOxygenLevel(); info.OwnerId = medicalRoom.IDModule.Owner; Vector3D medRoomPosition = (Vector3D)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.MedicalRoomPos = medRoomPosition; medicalRooms.Add(info); } } } } } }