public static Builder For(CelestialObject celestialObject) { if (celestialObject is AsteroidBelt) return new AsteroidBeltBuilder(); if (celestialObject is Planet) return new PlanetBuilder(); return new Builder(); }
public CelestialObjectState Save(CelestialObject celestialObject) { State = new CelestialObjectState { ObjectId = celestialObject.Id, Name = celestialObject.Name, CelestialObjectType = celestialObject.CelestialObjectType, LocalCoordinates = celestialObject.Position.LocalCoordinates, Orbits = celestialObject.Position.Location.AsObjectReference(), Mass = celestialObject.Mass, Size = celestialObject.Size }; return SaveCelestialObject(celestialObject); }
private static void CheckOrbitDistance(OrbitingObject @object, CelestialObject parent, double orbitDistance) { if (orbitDistance > parent.Size) { return; } throw new InvalidOperationException( string.Format("{0} cannot orbit {1} as the orbit is decaying", @object.Name, parent.Name)); }
protected virtual ObjectBuilder<CelestialObject> Build() { CelestialObject celestialObject; switch (State.CelestialObjectType) { case CelestialObjectType.Planet: celestialObject = new Planet(); break; case CelestialObjectType.Moon: celestialObject = new Moon(); break; case CelestialObjectType.Object: default: celestialObject = new CelestialObject(); break; } return new ObjectBuilder<CelestialObject>(celestialObject); }
protected override CelestialObjectState SaveCelestialObject(CelestialObject celestialObject) { var state = base.SaveCelestialObject(celestialObject); state.Orbits = null; return state; }
protected override CelestialObjectState SaveCelestialObject(CelestialObject celestialObject) { var asteroidBelt = (AsteroidBelt) celestialObject; var state = base.SaveCelestialObject(asteroidBelt); state.AsteroidBelt = new AsteroidBeltState { AmountRemaining = asteroidBelt.AmountRemaining, Richness = asteroidBelt.Richness, }; return state; }
protected virtual CelestialObjectState SaveCelestialObject(CelestialObject celestialObject) { return State; }
private double Speed(CelestialObject celestialBody) { return System.Math.PI / 1000; }