Ejemplo n.º 1
0
 /// <summary>
 /// Adds Gravity Generator to list of Generators
 /// </summary>
 /// <param name="generator"></param>
 public void AddGenerator(IMyGravityGenerator generator)
 {
     grav.Add(generator);
     Base6Directions.Direction direction = core.Orientation.TransformDirectionInverse(generator.Orientation.Up); //transforms the "Up" direction of the generator into the direction of the corridor coordinates
     gravDirections.Add(direction);
     numberOfGeneratorsInDirection[((int)Base6Directions.GetAxis(direction) + 2) % 3]++;
 }
Ejemplo n.º 2
0
 public Gravity(IMyGravityGenerator block, float width, float height, float depth)
 {
     dimensions.X  = width;
     dimensions.Y  = height;
     dimensions.Z  = depth;
     Generator     = block;
     negateGravity = Generator.CustomName.Contains('-');
 }
        // 0000


        public Program()
        {
            // 0000
            Runtime.UpdateFrequency = UpdateFrequency.Update10;
            tribalSensor            = GridTerminalSystem.GetBlockWithName("sensor1") as IMySensorBlock;
            List <IMyGravityGenerator> gravity = new List <IMyGravityGenerator>();

            GridTerminalSystem.GetBlocksOfType <IMyGravityGenerator>(gravity);
            gravGen = gravity[0];
            // 0000
        }
Ejemplo n.º 4
0
        bool FuncTest(IMyGravityGenerator block)
        {
            //Gravity Generator
            //Interface name: IMyGravityGenerator
            //Parent: IMyGravityGeneratorBase
            //Parent: IMyFunctionalBlock
            //Fields:
            float FieldWidth  = block.FieldWidth;
            float FieldHeight = block.FieldHeight;
            float FieldDepth  = block.FieldDepth;
            float Gravity     = block.Gravity;

            return(true);
        }
Ejemplo n.º 5
0
            public Corridor(IMyGravityGenerator core, Program program)
            {
                this.core = core;
                main      = program;
                int offset;

                if (!int.TryParse(core.CustomData, out offset))
                {
                    offset = 1;
                }
                position        = core.Position - offset * Base6Directions.GetIntVector(core.Orientation.Up);
                referenceOffset = (position - main.reference.Position) * 2.5f;

                core.Orientation.GetMatrix(out localRotationMatrix);
                localRotationMatrix = Matrix.Transpose(localRotationMatrix);
            }
Ejemplo n.º 6
0
    Program()
    {
        // Создаем списки
        ThrList = new List<IMyThrust>();
        MassList = new List<IMyArtificialMassBlock>();
        RightMassList = new List<IMyArtificialMassBlock>();
        LeftMassList = new List<IMyArtificialMassBlock>();
        UpMassList = new List<IMyArtificialMassBlock>();
        DownMassList = new List<IMyArtificialMassBlock>();
        BackwardMassList = new List<IMyArtificialMassBlock>();
        ForwardMassList = new List<IMyArtificialMassBlock>();
        //gravigenlist = new List<IMyGravityGenerator>();
        gravidrivelist = new List<IMyGravityGeneratorSphere>();

        // Находим генераторы гравитации
        //GridTerminalSystem.GetBlocksOfType<IMyGravityGenerator>(gravigenlist);
        gravigen = GridTerminalSystem.GetBlockWithName("Gravity Generator") as IMyGravityGenerator;

        GridTerminalSystem.GetBlocksOfType<IMyGravityGeneratorSphere>(gravidrivelist);

        //Находим гироскоп
        gyroscope = GridTerminalSystem.GetBlockWithName("Gyroscope 1") as IMyGyro;
        
        // Находим движки
        GridTerminalSystem.GetBlocksOfType<IMyThrust>(ThrList);
        foreach (IMyThrust thr in ThrList)
        {            
            if (thr.CustomName.Contains("[Right]"))
            {
                ThrRight = thr;
            }
            else if (thr.CustomName.Contains("[Left]"))
            {
                ThrLeft = thr;
            }
            else if (thr.CustomName.Contains("[Up]"))
            {
                ThrUp = thr;
            }
            else if (thr.CustomName.Contains("[Down]"))
            {
                ThrDown = thr;
            }
            else if (thr.CustomName.Contains("[Backward]"))
            {
                ThrBackward = thr;
            }
            else if (thr.CustomName.Contains("[Forward]"))
            {
                ThrForward = thr;
            }
        }
        // Находим блоки искусст. массы

        GridTerminalSystem.GetBlocksOfType<IMyArtificialMassBlock>(MassList);
        foreach (IMyArtificialMassBlock mass in MassList)
        {
            if (mass.CustomName.Contains("[Right]"))
            {
                RightMassList.Add(mass);
            }
            else if (mass.CustomName.Contains("[Left]"))
            {
                LeftMassList.Add(mass);
            }
            else if (mass.CustomName.Contains("[Up]"))
            {
                UpMassList.Add(mass);
            }
            else if (mass.CustomName.Contains("[Down]"))
            {
                DownMassList.Add(mass);
            }
            else if (mass.CustomName.Contains("[Backward]"))
            {
                BackwardMassList.Add(mass);
            }
            else if (mass.CustomName.Contains("[Forward]"))
            {
                ForwardMassList.Add(mass);
            }
        }
        Runtime.UpdateFrequency = UpdateFrequency.Update1;
    }
            public MyGravitonThruster(IMyGravityGenerator gravGen, List <SharedMass> allMass)
            {
                m_gravGen = gravGen;
                //m_enabled = m_gravGen.Enabled;


                //Correction de l'orientation du thruster (pour qu'ils poussent tous dans la même direction
                switch (m_gravGen.Orientation.Up)
                {
                case Base6Directions.Direction.Right:
                    axe = Base6Directions.Axis.LeftRight;
                    m_orientationThrusterCorrection = -1;
                    break;

                case Base6Directions.Direction.Left:
                    axe = Base6Directions.Axis.LeftRight;
                    m_orientationThrusterCorrection = 1;
                    break;

                case Base6Directions.Direction.Up:
                    axe = Base6Directions.Axis.UpDown;
                    m_orientationThrusterCorrection = -1;
                    break;

                case Base6Directions.Direction.Down:
                    axe = Base6Directions.Axis.UpDown;
                    m_orientationThrusterCorrection = 1;
                    break;

                case Base6Directions.Direction.Forward:
                    axe = Base6Directions.Axis.ForwardBackward;
                    m_orientationThrusterCorrection = 1;
                    break;

                case Base6Directions.Direction.Backward:
                    axe = Base6Directions.Axis.ForwardBackward;
                    m_orientationThrusterCorrection = -1;
                    break;
                }


                Vector3 gravityFeild = new Vector3(); //On réoriente le vector "Gravity feild" pour que sa zone corresponde aux coordonées des autres elements de la grille

                switch (axe)
                {
                case Base6Directions.Axis.LeftRight:
                    gravityFeild.X = m_gravGen.FieldSize.Y / 5f;                             //On divise par 2.5 car 1 bloc fait 2.5 de coté, et aussi par 2, car on souhaite avoir le rayon à la place du diamètre diamètre. Donc 5
                    if (m_gravGen.Orientation.Forward <= Base6Directions.Direction.Backward) // ForwardBackward
                    {
                        gravityFeild.Y = m_gravGen.FieldSize.X / 5f;
                        gravityFeild.Z = m_gravGen.FieldSize.Z / 5f;
                    }
                    else     // UpDown
                    {
                        gravityFeild.Y = m_gravGen.FieldSize.Z / 5f;
                        gravityFeild.Z = m_gravGen.FieldSize.X / 5f;
                    }
                    break;

                case Base6Directions.Axis.UpDown:
                    gravityFeild.Y = m_gravGen.FieldSize.Y / 5f;
                    if (m_gravGen.Orientation.Forward <= Base6Directions.Direction.Backward)     // ForwardBackward
                    {
                        gravityFeild.X = m_gravGen.FieldSize.X / 5f;
                        gravityFeild.Z = m_gravGen.FieldSize.Z / 5f;
                    }
                    else     // LeftRight
                    {
                        gravityFeild.X = m_gravGen.FieldSize.Z / 5f;
                        gravityFeild.Z = m_gravGen.FieldSize.X / 5f;
                    }
                    break;

                case Base6Directions.Axis.ForwardBackward:
                    gravityFeild.Z = m_gravGen.FieldSize.Y / 5f;
                    if (m_gravGen.Orientation.Forward <= Base6Directions.Direction.Right)     // LeftRight
                    {
                        gravityFeild.X = m_gravGen.FieldSize.X / 5f;
                        gravityFeild.Y = m_gravGen.FieldSize.Z / 5f;
                    }
                    else     // UpDown
                    {
                        gravityFeild.X = m_gravGen.FieldSize.Z / 5f;
                        gravityFeild.Y = m_gravGen.FieldSize.X / 5f;
                    }
                    break;
                }

                //On récupère la liste des masses artificielles qui sont dans le champ de gravité
                Vector3 distance = new Vector3();

                m_position = new Vector3D(0, 0, 0);

                IMyVirtualMass mass;

                foreach (SharedMass shrMass in allMass)
                {
                    mass     = shrMass.mass;
                    distance = mass.Position - m_gravGen.Position;
                    if (Math.Abs(distance.X) <= gravityFeild.X &&
                        Math.Abs(distance.Y) <= gravityFeild.Y &&
                        Math.Abs(distance.Z) <= gravityFeild.Z)
                    {
                        m_mass.Add(shrMass);
                        m_position += mass.Position * mass.VirtualMass;
                    }
                }

                m_artificialMass_kg = m_mass.Sum(shrmass => shrmass.mass.VirtualMass);
                m_maximumThrust_kN  = 9.81f * m_artificialMass_kg / 1000;

                if (m_artificialMass_kg > 0)
                {
                    m_position = (m_position * 2.5D) / m_artificialMass_kg;
                }
                else
                {
                    m_position = m_gravGen.Position * 2.5D;
                }
            }