/// <summary> /// Processes gravitons for one particle /// </summary> /// <param name="system"></param> /// <param name="part"></param> public static void ProcessGravitons(TableDepositor system, Particle part) { temp.X = 0; temp.Y = 0; foreach (Graviton ig in system.gravitons) { GravitonSettings settings = (ig.Settings_Allowed) ? ig.Settings : system.table.Settings.gravitonSettings; double length = (part.Position.X - ig.Position.X) * (part.Position.X - ig.Position.X) + (part.Position.Y - ig.Position.Y) * (part.Position.Y - ig.Position.Y); //================================================= // GRAVITY: // g = CONST*M/(radius/11 + 14), //================================================= // fix treshold double acc = (PhysicSettings.Instance().DEFAULT_GRAVITY_CONSTANT *ig.Settings.weigh) / (length / 114 + 14) * (((A_Rock)ig).Intensity / 100); double sqrt_length = Math.Sqrt(length); if (sqrt_length < 20) { acc *= -Math.Log(sqrt_length - Math.Min(20, sqrt_length - 2)); } // pulsar if (settings.Energy_pulsing) { acc /= (1 + Math.Tan(settings.Energy_pulse_speed) / 10); } // calculate velocity if (PhysicsSettings.gravitationMode == GravitationMode.ADITIVE) { temp.Add(acc * ((ig.Position.X - part.Position.X) / Math.Sqrt(length)), acc * ((ig.Position.Y - part.Position.Y) / Math.Sqrt(length))); } else if (PhysicsSettings.gravitationMode == GravitationMode.AVERAGE) { temp.Add(1 / (acc * ((ig.Position.X - part.Position.X) / Math.Sqrt(length))), 1 / (acc * ((ig.Position.Y - part.Position.Y) / Math.Sqrt(length)))); } else if (PhysicsSettings.gravitationMode == GravitationMode.MULTIPLY) { temp.Add(acc * ((ig.Position.X - part.Position.X) / Math.Log(length)), acc * ((ig.Position.Y - part.Position.Y) / Math.Log(length))); } } if (PhysicsSettings.gravitationMode == GravitationMode.AVERAGE) { temp.Invert(); } part.Vector_Acceleration.Add(temp); }