예제 #1
0
        public void Test1()
        {
            var worldRepository    = new WorldRepositoryClientSide();
            var newInstanceFactory = new NewInstanceFactoryClientSide(worldRepository);
            var processorsProvider = new ProcessorsProvider(newInstanceFactory);

            var world = new WorldClientSideEntity();
            var city  = new CityClientSideEntity();

            world.Cities.Add(city);

            var livingHouse = new LivingHouseClientSideEntity();

            livingHouse.Cargos.Add(new FreshWaterClientSideEntity {
                Count = 1m
            });
            livingHouse.Cargos.Add(new SaltClientSideEntity {
                Count = 1m
            });
            city.Buildings.Add(livingHouse);

            var saltEvaporationFactory = new SaltEvaporationFactoryClientSideEntity();

            saltEvaporationFactory.Cargos.Add(new SaltWaterClientSideEntity {
                Count = 1
            });

            processorsProvider.Process(world);
        }
 protected virtual void ProcessCargos(ICargoContainer entity)
 {
     foreach (var cargo in entity.Cargos.Collection)
     {
         ProcessorsProvider.Process(cargo);
     }
 }
        public IProcessWorldResponse ProcessWorld(IProcessWorldRequest request)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }
            if (request.Player == null)
            {
                throw new Exception("Player is null");
            }

            var world = WorldRepository.GetWorld(request.WorldGuid);

            if (world == null)
            {
                throw new Exception($"World with guid='{request.WorldGuid}' not found");
            }

            var player = world.Players.Collection.FirstOrDefault(c => c.Guid == request.Player.Guid);

            if (player == null)
            {
                throw new Exception($"Player with guid='{request.Player.Guid}' not found");
            }

            player.X = request.Player.X;
            player.Y = request.Player.Y;
            if (request.ClientCommands != null && request.ClientCommands.Any())
            {
                foreach (var clientCommand in request.ClientCommands)
                {
                    ProcessorsProvider.ProcessClientCommand(clientCommand, world, player);
                }
            }

            ProcessorsProvider.Process(world);

            foreach (var worldCity in world.Cities.Collection)
            {
                if (!player.VisibleCities.Contains(worldCity.Guid))
                {
                    if (CoordinateHelper.GetDistance(player.X, player.Y, worldCity.X, worldCity.Y) < worldCity.Size * 2)
                    {
                        player.VisibleCities = player.VisibleCities.Union(new[] { worldCity.Guid }).ToArray();
                    }
                }
            }

            ProcessorsProvider.Process(player);


            var result = new ProcessWorldResponseClientSideEntity();

            result.Player = player;
            result.World  = world;

            return(result);
        }
        public CaravanServerConnectorClientSide()
        {
            var worldRepository = new WorldRepositoryClientSide();

            var newInstanceFactory = new NewInstanceFactoryClientSide(worldRepository);

            var processorsProvider = new ProcessorsProvider(newInstanceFactory);
            var newWorldGenerator  = new NewWorldGenerator(newInstanceFactory, worldRepository);

            CaravanServer = new CaravanServerClientSide(processorsProvider, newInstanceFactory, newWorldGenerator, worldRepository);
        }
예제 #5
0
        public override void Process(object c)
        {
            var casted = H.Cast <ICity>(c);

            base.Process(casted);

            foreach (var building in casted.Buildings.Collection)
            {
                ProcessorsProvider.Process(building);
            }
        }
예제 #6
0
        public override void Process(object c)
        {
            var casted = H.Cast <IWorld>(c);

            base.Process(casted);

            // ReSharper disable once ReturnValueOfPureMethodIsNotUsed
            casted.WorldDate = casted.WorldDate.AddSeconds(1);

            foreach (var city in casted.Cities.Collection)
            {
                ProcessorsProvider.Process(city);
            }
        }
예제 #7
0
 public Instances(ICrvServiceContext context, INewInstanceFactory newInstanceFactory)
 {
     WorldRepository    = new WorldRepositoryEntity(context);
     ProcessorsProvider = new ProcessorsProvider(newInstanceFactory);
     NewWorldGenerator  = new NewWorldGenerator(newInstanceFactory, WorldRepository);
 }