Example #1
0
 public MyPlayer(MyNetworkClient client, string displayName, PlayerId id)
 {
     m_client    = client;
     Id          = id;
     DisplayName = displayName;
     Controller  = new MyEntityController(this);
 }
Example #2
0
 public MyPlayer(MyNetworkClient client, PlayerId id)
 {
     m_client   = client;
     Id         = id;
     Controller = new MyEntityController(this);
 }
        private void OnControlReleased(MyEntityController controller)
        {
            
            Static_CameraAttachedToChanged(null, null);
            m_oldController = controller;

            //---
            //When losing control turn off character lights until we regain control
            m_lightWasEnabled = LightEnabled;
            if (m_lightWasEnabled)
            {
                EnableLights(false);
                RecalculatePowerRequirement();
            }
            //---

            if (MySession.Static.LocalHumanPlayer == controller.Player)
            {

                MyHud.SelectedObjectHighlight.RemoveHighlight();

                RemoveNotifications();

                if (MyGuiScreenGamePlay.Static != null)
                    MySession.Static.CameraAttachedToChanged -= Static_CameraAttachedToChanged;

                m_currentCameraShakePower = 0;

                MyHud.GravityIndicator.Hide();
                MyHud.CharacterInfo.Hide();
                m_suitBattery.OwnedByLocalPlayer = false;
                MyHud.LargeTurretTargets.Visible = false;
                MyHud.OreMarkers.Visible = false;
                RadioReceiver.Clear();
                if (MyGuiScreenGamePlay.ActiveGameplayScreen != null)
                    MyGuiScreenGamePlay.ActiveGameplayScreen.CloseScreen();

                ResetMovement();
            }
            else
            {
                if (!MyFakes.ENABLE_RADIO_HUD)
                {
                    MyHud.LocationMarkers.UnregisterMarker(this);
                }
            }

            SoundComp.StopStateSound(true);

            // Note: This event was currently registered in init and never unregistered, when the character control is released, we unregister from the event handler
            {
                MyToolbarComponent.CharacterToolbar.ItemChanged -= Toolbar_ItemChanged;  // OM: The Init can be called on one instance several times (changing color etc.). We need to unregister first, otherwise we get this event registered even more than 11 times for one instance..
            }
        }
        private void OnControlAcquired(MyEntityController controller)
        {
            if (controller.Player.IsLocalPlayer)
            {
                bool isHuman = controller.Player == MySession.Static.LocalHumanPlayer;
                if (isHuman)
                {
                    //---
                    //When gaining control turn on character lights until we regain control
                    if (m_lightWasEnabled)
                    {
                        EnableLights(true);
                        RecalculatePowerRequirement();
                    }
                    m_lightWasEnabled = false;
                    //---

                    MyHud.HideAll();
                    MyHud.Crosshair.ResetToDefault();
                    MyHud.Crosshair.Recenter();

                    if (MyGuiScreenGamePlay.Static != null)
                        MySession.Static.CameraAttachedToChanged += Static_CameraAttachedToChanged;

                    if (MySession.Static.CameraController is MyEntity)
                        MySession.Static.SetCameraController(IsInFirstPersonView ? MyCameraControllerEnum.Entity : MyCameraControllerEnum.ThirdPersonSpectator, this);

                    m_currentCameraShakePower = 0;

                    MyHud.GravityIndicator.Entity = this;
                    MyHud.GravityIndicator.Show(null);
                    MyHud.CharacterInfo.Show(null);
                    MyHud.OreMarkers.Visible = true;
                    MyHud.LargeTurretTargets.Visible = true;
                    if (MySession.Static.IsScenario)
                        MyHud.ScenarioInfo.Show(null);
                }

                //Enable features for local player
                var jetpack = JetpackComp;
                if (jetpack != null)
                    jetpack.TurnOnJetpack(jetpack.TurnedOn);

                m_suitBattery.OwnedByLocalPlayer = true;
                DisplayName = controller.Player.Identity.DisplayName;
            }
            else
            {
                DisplayName = controller.Player.Identity.DisplayName;
                UpdateHudMarker();
            }

            if (StatComp != null && StatComp.Health != null && StatComp.Health.Value <= 0.0f)
            {
                m_dieAfterSimulation = true;
                return;
            }

            if (m_currentWeapon != null)
                m_currentWeapon.OnControlAcquired(this);

            UpdateCharacterPhysics(controller.Player.IsLocalPlayer);

            // Note: This code was part of the init, this event got registered for all characters, and never unregistered..            
            if (this == MySession.Static.ControlledEntity && MyToolbarComponent.CharacterToolbar != null)
            {
                MyToolbarComponent.CharacterToolbar.ItemChanged -= Toolbar_ItemChanged;  // OM: The Init or this can be called on one instance several times (changing color etc.). We need to unregister first, otherwise we get this event registered even more than 11 times for one instance..
                MyToolbarComponent.CharacterToolbar.ItemChanged += Toolbar_ItemChanged;
            }
        }
        protected virtual void OnControlReleased(MyEntityController controller)
        {
            // Release control of the ship
            if (Sync.Players.GetEntityController(this) == controller && GridThrustSystem != null)
                GridThrustSystem.Enabled = true;

            if (MySession.LocalHumanPlayer == controller.Player)
            {
                OnControlReleased_UpdateCamera();

                ForceFirstPersonCamera = false;

                if (MyGuiScreenGamePlay.Static != null)
                {
                    Static_CameraAttachedToChanged(null, null);
                    //MySession.Static.CameraAttachedToChanged -= Static_CameraAttachedToChanged;
                }

                MyHud.Notifications.Remove(MyNotificationSingletons.RespawnShipWarning);

                RemoveControlNotifications();

                if (GridThrustSystem != null)
                {
                    ClearMovementControl();
                }

                MyHud.ShipInfo.Hide();
                MyHud.GravityIndicator.Hide();
                MyHud.Crosshair.Hide();
                MyHud.LargeTurretTargets.Visible = false;
                MyHud.Notifications.Remove(m_noControlNotification);
                m_noControlNotification = null;
            }
            else
            {
                if (!MyFakes.ENABLE_RADIO_HUD)
                {
                    MyHud.LocationMarkers.UnregisterMarker(this);
                }
#warning TODO: Add player name changing support
                //controller.Player.OnDisplayNameChanged -= UpdateHudMarker;
            }

            if (SyncObject.IsShooting())
            {
                EndShootAll();
            }

            if (m_enableShipControl && (IsMainCockpit == true || CubeGrid.HasMainCockpit() == false))
            {
                if (GridSelectionSystem != null)
                {
                    GridSelectionSystem.OnControlReleased();
                }

                //if (Sync.IsServer)
                /*{
                    var group = ControlGroup.GetGroup(CubeGrid);
                    Debug.Assert(group != null, "Grid should be in group when player lefts cockpit?");
                    if (group != null)
                    {
                        foreach (var node in group.Nodes)
                            Sync.Controllers.RemoveControlledEntity(node.NodeData);
                    }
                }*/
                var group = ControlGroup.GetGroup(CubeGrid);
                if (group != null)
                {
                    group.GroupData.ControlSystem.RemoveControllerBlock(this);
                }
            }
        }
        protected void OnControlAcquired(MyEntityController controller)
        {
            // Try to take control of ship
            // This won't be here at all
            if (MySession.LocalHumanPlayer == controller.Player)
            {
                if (MyFakes.ENABLE_WHEEL_CONTROLS_IN_COCKPIT)
                    GridWheels.InitControl();

                if (MySession.Static.CameraController is MyEntity && IsCameraController())
                    MySession.SetCameraController(MyCameraControllerEnum.Entity, this);

                //if (MyGuiScreenGamePlay.Static != null)
                //    MySession.Static.CameraAttachedToChanged += Static_CameraAttachedToChanged;

                if (MySession.Static.Settings.RespawnShipDelete && controller.Player.RespawnShip.Contains(CubeGrid.EntityId))
                    MyHud.Notifications.Add(MyNotificationSingletons.RespawnShipWarning);

                Static_CameraAttachedToChanged(null, null);

                RefreshControlNotifications();

                if (IsCameraController())
                {
                    OnControlAcquired_UpdateCamera();
                }

                MyHud.HideAll();
                MyHud.ShipInfo.Show(null);
                MyHud.Crosshair.Show(null);
                MyHud.CharacterInfo.Show(null);
                MyHud.ConsumerGroupInfo.Visible = true;
                MyHud.GravityIndicator.Entity = this;
                MyHud.GravityIndicator.Show(null);
                MyHud.OreMarkers.Visible = true;
                MyHud.LargeTurretTargets.Visible = true;
            }
            else
            {
#warning TODO: Add player name change support
                //controller.Player.OnDisplayNameChanged += UpdateHudMarker;
                UpdateHudMarker();
            }

            if (m_enableShipControl && (IsMainCockpit == true || CubeGrid.HasMainCockpit() == false))
            {
                var group = ControlGroup.GetGroup(CubeGrid);
                if (group != null)
                {
                    group.GroupData.ControlSystem.AddControllerBlock(this);
                }
                /*if (Sync.IsServer)
                {
                    var group = ControlGroup.GetGroup(CubeGrid);
                    if (group != null)
                    {
                        if (!CubeGrid.GridSystems.ControlSystem.ControllerSteamId.HasValue)
                        {
                            foreach (var node in group.Nodes)
                                Sync.Controllers.TryExtendControl(this, node.NodeData);
                        }
                    }
                    else
                        Sync.Controllers.TryExtendControl(this, CubeGrid);

                }*/

                GridSelectionSystem.OnControlAcquired();
            }

            if (controller == Sync.Players.GetEntityController(CubeGrid) && GridThrustSystem != null)
                GridThrustSystem.Enabled = m_controlThrusters;

            UpdateShipInfo10(true);

            NeedsUpdate |= MyEntityUpdateEnum.EACH_FRAME;

            if (Sync.IsServer || controller.Player == MySession.LocalHumanPlayer)
                NeedsUpdate |= MyEntityUpdateEnum.EACH_10TH_FRAME | MyEntityUpdateEnum.EACH_100TH_FRAME;
        }
Example #7
0
        protected override void OnControlReleased(MyEntityController controller)
        {
            base.OnControlReleased(controller);

            if (controller.Player.IsLocalPlayer)
            {
                if (m_pilot != null)
                    m_pilot.RadioReceiver.Clear();
            }

            // to turn on/off sound in dependence of distance from listener
            NeedsUpdate |= MyEntityUpdateEnum.EACH_100TH_FRAME;
        }
 protected void OnCryoChamberControlAcquired(MyEntityController controller)
 {
     m_currentPlayerId = controller.Player.Id;
 }
Example #9
0
        protected override void OnControlReleased(MyEntityController controller)
        {
            base.OnControlReleased(controller);

            if (controller.Player.IsLocalPlayer())
            {
                if (m_pilot != null)
                    m_pilot.RadioReceiver.Clear();
            }
        }
Example #10
0
        protected void OnControlAcquired(MyEntityController controller)
        {
            m_isControlled = true;
            m_networkUpdate = true;
            controller.ControlledEntityChanged += OnControlEntityChanged;
            // Try to take control of ship
            // This won't be here at all
            if (MySession.Static.LocalHumanPlayer == controller.Player || Sync.IsServer)
            {
                if (MyFakes.ENABLE_WHEEL_CONTROLS_IN_COCKPIT)
                    GridWheels.InitControl(controller.ControlledEntity as MyEntity);

                if (MySession.Static.CameraController is MyEntity && IsCameraController() && MySession.Static.LocalHumanPlayer == controller.Player)
                    MySession.Static.SetCameraController(MyCameraControllerEnum.Entity, this);

                //if (MyGuiScreenGamePlay.Static != null)
                //    MySession.Static.CameraAttachedToChanged += Static_CameraAttachedToChanged;

                if (MySession.Static.Settings.RespawnShipDelete && CubeGrid.IsRespawnGrid)
                    MyHud.Notifications.Add(MyNotificationSingletons.RespawnShipWarning);

                Static_CameraAttachedToChanged(null, null);

                RefreshControlNotifications();

                if (IsCameraController())
                {
                    OnControlAcquired_UpdateCamera();
                }

                MyHud.HideAll();
                MyHud.ShipInfo.Show(null);
                MyHud.Crosshair.ResetToDefault();
                MyHud.CharacterInfo.Show(null);
                MyHud.SinkGroupInfo.Visible = true;
                MyHud.GravityIndicator.Entity = this;
                MyHud.GravityIndicator.Show(null);
                MyHud.OreMarkers.Visible = true;
                MyHud.LargeTurretTargets.Visible = true;
            }
            else
            {
#warning TODO: Add player name change support
                //controller.Player.OnDisplayNameChanged += UpdateHudMarker;
                UpdateHudMarker();
            }
            if (m_enableShipControl)
            {
                if ((IsMainCockpit == true || CubeGrid.HasMainCockpit() == false))//|| ((MySession.Static.ControlledEntity is MyRemoteControl))
                {
                var group = ControlGroup.GetGroup(CubeGrid);
                if (group != null)
                {
                    group.GroupData.ControlSystem.AddControllerBlock(this);
                }

                GridSelectionSystem.OnControlAcquired();
            }
            }

            if (BuildingMode && (MySession.Static.ControlledEntity is MyRemoteControl)) BuildingMode = false;
            if (BuildingMode)
            {
                MyHud.Crosshair.ChangeDefaultSprite(MyHudTexturesEnum.Target_enemy, 0.01f);
            }
            else
            {
                MyHud.Crosshair.ResetToDefault();
            }

            var thrustComponent = EntityThrustComponent;
            if (controller == Sync.Players.GetEntityController(CubeGrid) && thrustComponent != null)
                thrustComponent.Enabled = m_controlThrusters;

            UpdateShipInfo10(true);

            NeedsUpdate |= MyEntityUpdateEnum.EACH_FRAME;

            if (Sync.IsServer || controller.Player == MySession.Static.LocalHumanPlayer)
                NeedsUpdate |= MyEntityUpdateEnum.EACH_10TH_FRAME | MyEntityUpdateEnum.EACH_100TH_FRAME;
        }
        public void OnControlReleased(MyEntityController controller)
        {

        }
 public void OnControlAcquired(MyEntityController controller)
 {
    
 }