/// <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]++; }
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 }
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); }
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); }
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; } }