コード例 #1
0
ファイル: MarketTests.cs プロジェクト: andy-uq/Echo
        public void Deserialise()
        {
            var wrapped = new WrappedObjectState(Market);
            using (var session = Database.OpenSession())
            {
                session.Store(wrapped, string.Concat(wrapped.Value.GetType().Name, "/market"));
                session.SaveChanges();
            }

            using (var session = Database.OpenSession())
            {
                var buyOrder = new BuyOrder {Id = Universe.BuyOrder.ObjectId};
                var sellOrder = new SellOrder { Id = Universe.SellOrder.ObjectId };
                var resolver = new IdResolutionContext(new IObject[] { buyOrder, sellOrder, new ItemInfo(ItemCode.Veldnium), new TradingStation { Id = Universe.TradingStation.ObjectId }, new Corporation { Id = Universe.MSCorp.ObjectId }, new Corporation { Id = Universe.AppleCorp.ObjectId } });

                var state = session.Load<WrappedObjectState>(wrapped.Id).Value;
                Assert.That(state, Is.Not.Null);
                Assert.That(state.Settlements, Is.Not.Empty);

                var market = MarketPlace.Builder.Build(Market, null).Materialise(resolver);
                Assert.That(market, Is.InstanceOf<MarketPlace>());

                Assert.That(market.BuyOrders, Is.Not.Empty);
                Assert.That(market.SellOrders, Is.Not.Empty);
                Assert.That(market.Settlements, Is.Not.Empty);
            }
        }
コード例 #2
0
ファイル: IdResolution.cs プロジェクト: andy-uq/Echo
        public void SupportsNulls()
        {
            var idResolution = new IdResolutionContext(Enumerable.Empty<IObject>());

            ItemInfo value;
            idResolution.Get<ItemInfo>(null).ShouldBe(null);
            idResolution.TryGet(null, out value).ShouldBe(false);
        }
コード例 #3
0
ファイル: IdResolution.cs プロジェクト: andy-uq/Echo
        public void IdResolutionGet()
        {
            var itemInfo = TestItems.Item(ItemCode.MissileLauncher);

            var idResolution = new IdResolutionContext(new[] { itemInfo, });
            var objRef = new ObjectReference(itemInfo.ObjectId);
            idResolution.Get<ItemInfo>(objRef);
        }
コード例 #4
0
ファイル: IdResolution.cs プロジェクト: andy-uq/Echo
        public void IdResolutionFail()
        {
            const long id = 1L;
            var itemInfo = TestItems.Item(ItemCode.MissileLauncher);

            var idResolution = new IdResolutionContext(new[] { itemInfo, });
            var objRef = new ObjectReference(id);

            Should.Throw<ItemNotFoundException>(() => idResolution.Get<ItemInfo>(objRef)).Message.ShouldBe("Could not find ItemInfo \"[x00000001]\"");
            Should.Throw<ItemNotFoundException>(() => idResolution.GetById<ItemInfo>(id)).Message.ShouldBe("Could not find ItemInfo \"1\"");
        }
コード例 #5
0
ファイル: ItemStateTest.cs プロジェクト: andy-uq/Echo
        public void Save()
        {
            var idResolver = new IdResolutionContext(new[] { Universe.Item });
            var item = Echo.Items.Item.Builder.Build(Item).Build(idResolver);

            Assert.That(item.ObjectType, Is.EqualTo(ObjectType.Item));

            var state = Echo.Items.Item.Builder.Save(item);
            var json = Database.Conventions.CreateSerializer().Serialize(state);
            Console.WriteLine(json);
        }
コード例 #6
0
ファイル: MarketTests.cs プロジェクト: andy-uq/Echo
        public void Save()
        {
            var buyOrder = new BuyOrder { Id = Universe.BuyOrder.ObjectId };
            var sellOrder = new SellOrder { Id = Universe.SellOrder.ObjectId };
            var resolver = new IdResolutionContext(new IObject[] { buyOrder, sellOrder, new ItemInfo(ItemCode.Veldnium), new TradingStation { Id = Universe.TradingStation.ObjectId }, new Corporation { Id = Universe.MSCorp.ObjectId }, new Corporation { Id = Universe.AppleCorp.ObjectId } });

            var market = MarketPlace.Builder.Build(Market, new StarCluster()).Materialise(resolver);
            Assert.That(market, Is.InstanceOf<MarketPlace>());

            var state = market.Save();

            var json = Database.Conventions.CreateSerializer().Serialize(state);
            Console.WriteLine(json);
        }
コード例 #7
0
ファイル: AgentTestExtensions.cs プロジェクト: andy-uq/Echo
        public static Agent StandUp(this AgentState state, Corporation corporation = null, ILocation initialLocation = null)
        {
            var idResolver = IdResolver.Empty;

            if (initialLocation != null)
            {
                state.Location = initialLocation.AsObjectReference();
                idResolver = new IdResolutionContext(new[] { initialLocation });
            }

            var builder = Agent.Builder.Build(state)
                .Resolve((r, a) => a.Corporation = corporation);

            return builder.Materialise(idResolver.RegisterTestSkills());
        }
コード例 #8
0
ファイル: IdResolution.cs プロジェクト: andy-uq/Echo
        public void IdResolutionCombine()
        {
            var i1 = TestItems.Item(ItemCode.MissileLauncher);
            var i2 = TestItems.Item(ItemCode.EnergyShield);

            var r1 = new IdResolutionContext(new[] { i1, });
            var r2 = new IdResolutionContext(new[] { i2, });

            var idResolution = r1.Combine(r2);
            idResolution.ShouldBeOfType<CompositeIdResolver>();

            var objRef = new ObjectReference(i2.ObjectId);
            idResolution.Get<ItemInfo>(objRef);

            idResolution.Values.ShouldContain(i1);
            idResolution.Values.ShouldContain(i2);
        }
コード例 #9
0
ファイル: Program.cs プロジェクト: andy-uq/Echo
        private static void Main(string[] args)
        {
            string universeFileName = args.FirstOrDefault() ?? "universe.txt";
            UniverseState universe;

            if (File.Exists(universeFileName))
            {
                using (StreamReader fs = File.OpenText(universeFileName))
                {
                    var reader = new JsonTextReader(fs);
                    var serialiser = new JsonSerializer();
                    serialiser.Converters.Add(new VectorConverter());
                    universe = serialiser.Deserialize<UniverseState>(reader);
                }
            }
            else
            {
                universe = CreateNewUniverse();
            }

            ObjectBuilder<Universe> universeBuilder = Universe.Builder.Build(universe);
            var resolver = new IdResolutionContext(universeBuilder.FlattenObjectTree());

            var game = new Game(universeBuilder.Build(resolver), Registrations);
            var gameThread = new Thread(() => GameThread(game));
            gameThread.Start();

            var render = new System.Threading.Timer(state => Render(game));
            render.Change(0, 200);

            int? saveSlot = null;
            bool recordInput = false;
            string command = "";
            WriteHelp();
            while (_alive)
            {
                ConsoleKeyInfo key = Console.ReadKey(intercept: true);
                if (recordInput)
                {
                    switch (key.Key)
                    {
                        case ConsoleKey.Escape:
                            recordInput = false;
                            command = "";
                            break;
                        case ConsoleKey.Enter:
                            recordInput = false;
                            command = "";
                            break;
                        default:
                            command += key.KeyChar;
                            break;
                    }

                    WritePrompt(": " + command);
                    continue;
                }

                switch (key.KeyChar)
                {
                    case 'q':
                        _alive = false;
                        break;
                    case 's':
                    case 'l':
                        if (saveSlot != null)
                        {
                            if (key.KeyChar == 's')
                            {
                                RequestSave(saveSlot);
                            }
                            else
                            {
                                RequestRewind(saveSlot);
                            }
                        }
                        else
                        {
                            WritePrompt("Please enter save slot [0-9]");
                        }
                        break;
                    case '0':
                    case '1':
                    case '2':
                    case '3':
                    case '4':
                    case '5':
                    case '6':
                    case '7':
                    case '8':
                    case '9':
                        saveSlot = key.KeyChar - '0';
                        break;
                    case ':':
                    case ';':
                        recordInput = true;
                        WritePrompt(": ");
                        break;
                }
            }

            gameThread.Join();
            SaveState(game, universeFileName);
        }
コード例 #10
0
ファイル: MiningTests.cs プロジェクト: andy-uq/Echo
        public void SetUp()
        {
            _solarSystem = new SolarSystem();
            _asteroid = new AsteroidBelt { Ore = ItemCode.Veldnium, Difficulty = 1, Richness = 500, AmountRemaining = 1000, Position = new Position(_solarSystem, Vector.Parse("1,0")) };
            _difficultAsteroid = new AsteroidBelt { Ore = ItemCode.Veldnium, Difficulty = 2, Richness = 500, AmountRemaining = 1000, Position = new Position(_solarSystem, Vector.Parse("1,0")) };
            _solarSystem.Satellites.Add(_asteroid);

            var shipInfo = new ShipState(ItemCode.LightFrigate)
            {
                HardPoints = new[]
                {
                    new HardPointState { Position = HardPointPosition.Bottom, Weapon = new WeaponState { Code = ItemCode.MiningLaser }, Speed = 1d },
                    new HardPointState { Position = HardPointPosition.Top, Weapon = new WeaponState { Code = ItemCode.MissileLauncher } }
                }
            };

            var builder = Ship.Builder.Build(_solarSystem, shipInfo);
            var frigate = new ShipInfo { Code = ItemCode.LightFrigate };
            var missileLauncher = TestItems.Weapon(ItemCode.MissileLauncher);
            var miningLaser = TestItems.Weapon(ItemCode.MiningLaser);

            IIdResolver resolver = new IdResolutionContext(new IObject[] { missileLauncher, miningLaser, frigate });
            _ship = builder.Build(resolver);
        }