private bool CollidesWithBlackHole(PhysicalObject po) { foreach (BlackHole bh in model.BlackHoleList) { if (Vector2.Distance(bh.Position, po.Position) <= bh.DisappearanceRadius) { return(true); } } return(false); }
private Planet CollidesWithPlanet(PhysicalObject po) { foreach (Planet planet in model.PlanetList) { if (Vector2.Distance(po.Position, planet.Position) < planet.Radius) { return(planet); } } return(null); }
/// <summary> /// Returns a Vector2 showing the gravitational pull of GravityPoint gp on PhysicalObject po /// </summary> /// <param name="po">The physical object being affected.</param> /// <param name="gp">The gravity point affecting the object.</param> /// <returns></returns> public static Vector2 CalculateGravity(PhysicalObject po, GravityPoint gp) { Vector2 delta = gp.Position - po.Position; float r = delta.Length(); float gravPull = GravityConstant * gp.Mass / (r * r); float theta = (float)Math.Atan2(delta.Y, delta.X); Vector2 result = new Vector2(); result.X = gravPull * (float)Math.Cos(theta); result.Y = gravPull * (float)Math.Sin(theta); return(result); }
public static bool CollidesWithBottomBorder(PhysicalObject p, Terrain terrain) { if (GravityField.Y > 0 && GravityField.Y > GravityField.X) //gravity pointing down { return(p.BoundingBox.Bottom >= terrain.Height); } else if (GravityField.Y < 0 && GravityField.Y < GravityField.X) //Gravity pointing up { return(p.BoundingBox.Top < 0); } else if (GravityField.X > 0 && GravityField.X > GravityField.Y) //Gravity pointing right { return(p.BoundingBox.Right >= terrain.Width); } else if (GravityField.X < 0 && GravityField.X < GravityField.Y) //gravity pointing left { return(p.BoundingBox.Left < 0); } else { return(false); } }
private bool CollidesWithTerrain(PhysicalObject po) { return(IntersectPixels(po.WorldTransform, po.SourceRect.Width, po.SourceRect.Height, po.ColorData, model.Terrain)); }
private bool CollidesWithBorders(PhysicalObject po) { return(!new Rectangle(0, 0, model.Terrain.Width, model.Terrain.Height).Contains(po.BoundingBox)); }