예제 #1
0
 public void OnAddedToGroup(MyGridPhysicalGroupData group)
 {
     this.ControlSystem = group.ControlSystem;
     foreach (MyShipController controller in this.m_cubeGrid.GetFatBlocks <MyShipController>())
     {
         if (controller != null)
         {
             if (controller.ControllerInfo.Controller == null)
             {
                 if (controller.Pilot == null)
                 {
                     continue;
                 }
                 if (!MySessionComponentReplay.Static.HasEntityReplayData(this.CubeGrid.EntityId))
                 {
                     continue;
                 }
             }
             if (controller.EnableShipControl && ((!(controller is MyCockpit) || controller.IsMainCockpit) || !controller.CubeGrid.HasMainCockpit()))
             {
                 this.ControlSystem.AddControllerBlock(controller);
             }
         }
     }
     this.ControlSystem.AddGrid(this.CubeGrid);
 }
        public void OnAddedToGroup(MyGridPhysicalGroupData group)
        {
            ControlSystem = group.ControlSystem;

            foreach (var block in m_cubeGrid.GetFatBlocks <MyShipController>())
            {
                if (block != null && block.ControllerInfo.Controller != null && block.EnableShipControl)
                {
                    ControlSystem.AddControllerBlock(block);
                }
            }

            ControlSystem.AddGrid(CubeGrid);
        }
        public void OnRemovedFromGroup(MyGridPhysicalGroupData group)
        {
            ControlSystem.RemoveGrid(CubeGrid);

            if (m_blocksRegistered)
            {
                foreach (var controllerBlock in m_cubeGrid.GetFatBlocks <MyShipController>())
                {
                    if (controllerBlock != null && controllerBlock.ControllerInfo.Controller != null && controllerBlock.EnableShipControl)
                    {
                        ControlSystem.RemoveControllerBlock(controllerBlock);
                    }
                }
            }

            ControlSystem = null;
        }
예제 #4
0
 public void OnRemovedFromGroup(MyGridPhysicalGroupData group)
 {
     this.ControlSystem.RemoveGrid(this.CubeGrid);
     if (this.m_blocksRegistered)
     {
         foreach (MyShipController controller in this.m_cubeGrid.GetFatBlocks <MyShipController>())
         {
             if (controller == null)
             {
                 continue;
             }
             if ((controller.ControllerInfo.Controller != null) && (controller.EnableShipControl && ((!(controller is MyCockpit) || controller.IsMainCockpit) || !controller.CubeGrid.HasMainCockpit())))
             {
                 this.ControlSystem.RemoveControllerBlock(controller);
             }
         }
     }
     this.ControlSystem = null;
 }
예제 #5
0
        public void OnAddedToGroup(MyGridPhysicalGroupData group)
        {
            ControlSystem = group.ControlSystem;

            foreach (var block in m_cubeGrid.GetBlocks())
            {
                if (block.FatBlock == null)
                {
                    continue;
                }

                var controllerBlock = block.FatBlock as MyShipController;
                if (controllerBlock != null && controllerBlock.ControllerInfo.Controller != null && controllerBlock.EnableShipControl)
                {
                    ControlSystem.AddControllerBlock(controllerBlock);
                }
            }

            ControlSystem.AddGrid(CubeGrid);
        }
예제 #6
0
        public override void UpdateBeforeSimulation()
        {
            try
            {
                if (!RealisticMode || !Block.IsWorking)
                {
                    return;
                }

                var grid = Block.CubeGrid;
                if (grid.IsPreview || grid.Physics == null || !grid.Physics.Enabled || grid.Physics.IsStatic)
                {
                    return;
                }

                float strength = Block.BlockDefinition.ForceMagnitude * Block.CurrentStrength;

                if (Math.Abs(strength) < 0.00001f)
                {
                    return;
                }

                Vector3D force = Block.WorldMatrix.Backward * strength;

                var groupProperties = MyGridPhysicalGroupData.GetGroupSharedProperties(grid);

                // cancel the thruster's force at grid-group center of mass
                grid.Physics.AddForce(MyPhysicsForceType.APPLY_WORLD_FORCE, -force, groupProperties.CoMWorld, null);

                // apply the thruster's force at its position
                grid.Physics.AddForce(MyPhysicsForceType.APPLY_WORLD_FORCE, force, Block.PositionComp.WorldVolume.Center, null);
            }
            catch (Exception e)
            {
                Log.Error(e);
            }
        }
예제 #7
0
        public void OnRemovedFromGroup(MyGridPhysicalGroupData group)
        {
            ControlSystem.RemoveGrid(CubeGrid);

            if (m_blocksRegistered)
            {
                foreach (var controllerBlock in m_cubeGrid.GetFatBlocks<MyShipController>())
                {
                    if (controllerBlock != null && controllerBlock.ControllerInfo.Controller != null && controllerBlock.EnableShipControl)
                    {
                        ControlSystem.RemoveControllerBlock(controllerBlock);
                    }
                }
            }

            ControlSystem = null;
        }
예제 #8
0
        public void OnAddedToGroup(MyGridPhysicalGroupData group)
        {
            ControlSystem = group.ControlSystem;

            foreach (var block in m_cubeGrid.GetFatBlocks<MyShipController>())
            {
                if (block != null && block.ControllerInfo.Controller != null && block.EnableShipControl)
                {
                    ControlSystem.AddControllerBlock(block);
                }
            }

            ControlSystem.AddGrid(CubeGrid);
        }
예제 #9
0
        public void OnAddedToGroup(MyGridPhysicalGroupData group)
        {
            ControlSystem = group.ControlSystem;

            foreach (var block in m_cubeGrid.GetBlocks())
            {
                if (block.FatBlock == null)
                    continue;

                var controllerBlock = block.FatBlock as MyShipController;
                if (controllerBlock != null && controllerBlock.ControllerInfo.Controller != null && controllerBlock.EnableShipControl)
                {
                    ControlSystem.AddControllerBlock(controllerBlock);
                }
            }

            ControlSystem.AddGrid(CubeGrid);
        }