public static ObjectBuilder<SolarSystem> Build(StarCluster starCluster, SolarSystemState state) { var solarSystem = new SolarSystem { Id = state.ObjectId, Name = state.Name, Position = new Position(starCluster, state.LocalCoordinates), }; var builder = new ObjectBuilder<SolarSystem>(solarSystem) .Resolve((target, resolver) => BuildOrbits(state, target)); builder .Dependents(state.Ships) .Build(Echo.Ships.Ship.Builder.Build) .Resolve((resolver, target, dependent) => target.Ships.Add(dependent)); builder .Dependents(state.JumpGates) .Build(Echo.JumpGates.JumpGate.Builder.Build) .Resolve((resolver, target, dependent) => target.JumpGates.Add(dependent)); builder .Dependents(state.Satellites) .Build((target, dependent) => CelestialObject.Builder.For(dependent).Build(solarSystem)) .Resolve((resolver, target, dependent) => target.Satellites.Add(dependent)); builder .Dependents(state.Structures) .Build((target, dependent) => Structure.Builder.For(dependent).Build(solarSystem)) .Resolve((resolver, target, dependent) => target.Structures.Add(dependent)); return builder; }
public void Resolves() { var testObject = new TestObject() { Id = 1, Children = new List<TestObject>() }; var mChildObject = new Mock<IObject>(MockBehavior.Strict); mChildObject.SetupGet(o => o.Id).Returns(2); var mChildState = new Mock<IObjectState>(MockBehavior.Strict); var builder = new ObjectBuilder<IObject>(testObject); builder.Dependents(new[] { mChildState.Object }).Build(state => new ObjectBuilder<IObject>(mChildObject.Object)); var r = builder.Materialise(); Assert.That(r, Is.EqualTo(testObject)); }
public void Dependents() { var mObject = new Mock<IObject>(MockBehavior.Strict); mObject.SetupGet(o => o.Id).Returns(1); var mChildObject = new Mock<IObject>(MockBehavior.Strict); mChildObject.SetupGet(o => o.Id).Returns(2); var mChildState = new Mock<IObjectState>(MockBehavior.Strict); var builder = new ObjectBuilder<IObject>(mObject.Object); builder.Dependents(new[] { mChildState.Object }).Build(state => new ObjectBuilder<IObject>(mChildObject.Object)); Assert.That(builder.DependentObjects, Is.Not.Empty); Assert.That(builder.DependentObjects, Has.Exactly(1).Matches<IBuilderContext>(x => x.Target.Id == 2)); }
public static ObjectBuilder<Corporation> Build(CorporationState state) { var corporation = new Corporation { Id = state.ObjectId, Name = state.Name, }; var builder = new ObjectBuilder<Corporation>(corporation); builder .Dependents(state.Employees) .Build(Agent.Builder.Build) .Resolve((resolver, target, agent) => AddEmployee(target, agent)); return builder; }
public static ObjectBuilder<StarCluster> Build(Universe universe, StarClusterState state) { var starCluster = new StarCluster { Id = state.ObjectId, Name = state.Name, Position = new Position(universe, state.LocalCoordinates), }; var builder = new ObjectBuilder<StarCluster>(starCluster); builder.Resolve((resolver, target) => target.MarketPlace = Market.MarketPlace.Builder.Build(state.MarketPlace, starCluster).Build(resolver)); builder .Dependents(state.SolarSystems) .Build(SolarSystem.Builder.Build) .Resolve((resolver, target, dependent) => target.SolarSystems.Add(dependent)); return builder; }
public static ObjectBuilder<MarketPlace> Build(MarketPlaceState state, StarCluster starCluster) { var marketPlace = new MarketPlace { AuctionLength = state.AuctionLength, SettlementDelay = state.SettlementDelay, StarCluster = starCluster, }; var builder = new ObjectBuilder<MarketPlace>(marketPlace); builder .Dependents(state.Settlements) .Build(Settlement.Builder.Build) .Resolve((resolver, target, settlement) => target._settlements.Add(settlement)); builder .Resolve((resolver, target) => target._auctions.AddRange(state.Auctions.Select(resolver.Get<Auction>))); return builder; }