예제 #1
0
        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);
        }
예제 #2
0
        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);
                            }
                        }
                    }
                }
            }
        }
예제 #3
0
 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)));
         }
     }
 }
예제 #4
0
        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);
        }
예제 #5
0
        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);
                            }
                        }
                    }
                    
                }
            }
        }