Пример #1
0
 public TrainingReward(int level, ItemInfo item, RobotTemplate robotTemplate, int raceId)
 {
     Level         = level;
     Item          = item;
     RobotTemplate = robotTemplate;
     RaceId        = raceId;
 }
Пример #2
0
        public Robot(RobotTemplate template, Game game)
        {
            _template = template;
            _game     = game;

            MemorySize = MemoryUpgrades
                         .Select(upgradesCount => template.InitialMemorySize + upgradesCount * template.MemoryUpgradeSize)
                         .ToReactiveProperty();

            Programs = new ReactiveCollection <Program>();

            ProgramBytes = Programs.ObserveCountChanged(true)
                           .SelectMany(_ => Programs
                                       .Select(x => x.MemorySize)
                                       .CombineLatest()
                                       .Select(y => y.Sum()))
                           .ToReactiveProperty(initialValue: 0);

            TotalUsedBytes = ProgramBytes.CombineLatest(LeakedBytes, ProducedBytes,
                                                        (programs, leaked, produced) => programs + leaked + produced)
                             .ToReactiveProperty();

            FreeSpace = TotalUsedBytes.CombineLatest(MemorySize,
                                                     (used, memory) => memory - used)
                        .ToReactiveProperty();

            Status = Programs.ObserveCountChanged(true).CombineLatest(FreeSpace,
                                                                      (programCount, freeSpace) => freeSpace <= 0 ? RobotStatus.OutOfMemory
                                           : programCount == 0 ? RobotStatus.BootError
                                           : RobotStatus.Ok)
                     .ToReactiveProperty();

            HasSyncProgram = Programs.ObserveCountChanged(true)
                             .Select(_ => Programs.Any(x => x.Template.Type == ProgramType.Sync))
                             .ToReactiveProperty();

            //TODO: stop sync on game over
            Observable.CombineLatest(HasSyncProgram, Status.Select(x => x == RobotStatus.OutOfMemory),
                                     (hasSync, outOfMemory) => hasSync && !outOfMemory)
            .DistinctUntilChanged()
            .Select(shouldSync => shouldSync ? Observable.Interval(TimeSpan.FromSeconds(10)) : Observable.Empty <long>())
            .Switch()
            .Subscribe(_ =>
            {
                _game.GameProgress.DataCollected.Value += ProducedBytes.Value;
                ProducedBytes.Value = 0;
            });
        }
        public override void HandleRequest(IRequest request)
        {
            using (var scope = Db.CreateTransaction())
            {
                var templateName = request.Data.GetOrDefault <string>(k.name);
                var description  = request.Data.GetOrDefault <Dictionary <string, object> >(k.description);

                if (string.IsNullOrEmpty(templateName))
                {
                    templateName = "template_" + FastRandom.NextString(7);
                }

                var template = RobotTemplate.CreateFromDictionary(templateName, description).ThrowIfNull(ErrorCodes.TemplateError);
                template.Validate().ThrowIfFalse(ErrorCodes.TemplateError);
                _robotTemplateRepository.Insert(template);

                SendRobotTemplateListWhenTransactionCompleted(request);

                scope.Complete();
            }
        }
        public CreateRobotTemplate()
        {
            InitializeComponent();
            Entities        = new EntityDefaults(this.Connstr);
            RTemplate       = new RobotTemplatesTable(this.Connstr);
            BotTemplate     = new RobotTemplate();
            HeadSlotList    = new CompositeCollection();
            ChassisSlotList = new CompositeCollection();
            LegSlotList     = new CompositeCollection();

            BotsList      = Entities.GetEntitiesByCategory(Types.CategoryFlags.cf_robots);
            HeadsList     = Entities.GetEntitiesByCategory(Types.CategoryFlags.cf_robot_head);
            ChassisList   = Entities.GetEntitiesByCategory(Types.CategoryFlags.cf_robot_chassis);
            LegsList      = Entities.GetEntitiesByCategory(Types.CategoryFlags.cf_robot_leg);
            InventoryList = Entities.GetEntitiesByCategory(Types.CategoryFlags.cf_robot_inventory);
            // oh dear god. Shitshow ahead!
            Mods = Entities.GetAllEntities();


            this.DataContext = this;
        }
Пример #5
0
        public override void HandleRequest(IRequest request)
        {
            using (var scope = Db.CreateTransaction())
            {
                var id       = request.Data.GetOrDefault <int>(k.ID);
                var template = _robotTemplateRepository.Get(id);

                var templateName = request.Data.GetOrDefault <string>(k.name);
                if (!string.IsNullOrEmpty(templateName))
                {
                    template.Name = templateName;
                }

                var description   = request.Data.GetOrDefault <Dictionary <string, object> >(k.description);
                var robotTemplate = RobotTemplate.CreateFromDictionary(templateName, description);
                if (robotTemplate == null)
                {
                    throw new PerpetuumException(ErrorCodes.TemplateError);
                }

                template.EntityDefault = robotTemplate.EntityDefault;
                template.Head          = robotTemplate.Head;
                template.Chassis       = robotTemplate.Chassis;
                template.Leg           = robotTemplate.Leg;
                template.Inventory     = robotTemplate.Inventory;
                if (!template.Validate())
                {
                    throw new PerpetuumException(ErrorCodes.TemplateError);
                }

                _robotTemplateRepository.Update(template);
                SendRobotTemplateListWhenTransactionCompleted(request);

                scope.Complete();
            }
        }
Пример #6
0
 public BuildableRobot(RobotTemplate robot)
 {
     this.robot = robot;
 }
Пример #7
0
 private void ExectureRobot(RobotTemplate robot)
 {
     robot.Go();
 }