Beispiel #1
0
        /// <summary>
        /// Constructor for build recipe for IProtoStructure.
        /// Must be used only in InitEntityRelationships phase.
        /// </summary>
        /// <param name="structureViewModel">View Model of IProtoStructure.</param>
        /// <param name="config">Building config.</param>
        public RecipeViewModel([NotNull] ProtoObjectStructureViewModel structureViewModel,
                               [NotNull] IConstructionStageConfigReadOnly config)
            : base(structureViewModel.ProtoEntity)
        {
            if (!EntityViewModelsManager.EntityDictonaryCreated)
            {
                throw new Exception("CNEI: Build constructor used before all entity VMs sets.");
            }

            InputItemsVMList = config.StageRequiredItems
                               .Select(item => new ViewModelEntityWithCount(EntityViewModelsManager.GetEntityViewModel(item.ProtoItem),
                                                                            item.Count * config.StagesCount))
                               .ToList().AsReadOnly();

            OutputItemsVMList =
                new List <BaseViewModel>()
            {
                new ViewModelEntityWithCount(structureViewModel)
            }.AsReadOnly();

            OriginText        = "Build by:";
            IsStationCraft    = Visibility.Visible;
            StationsList      = EntityViewModelsManager.GetAllEntityViewModelsByType <IProtoItemToolToolbox>().AsReadOnly();
            ListedInTechNodes = structureViewModel.ListedInTechNodes;

            IsAutoUnlocked = structureViewModel.IsAutoUnlocked;
        }
        /// <summary>
        /// Constructor for vehicle creation recipe.
        /// Must be used only in InitEntityRelationships phase.
        /// </summary>
        /// <param name="vehicleViewModel">View Model of IProtoVehicle.</param>
        /// <param name="vehicle"></param>
        public VehicleBuildRecipeViewModel([NotNull] ProtoVehicleViewModel vehicleViewModel, IProtoVehicle vehicle)
            : base(vehicleViewModel.ProtoEntity)
        {
            if (!EntityViewModelsManager.EntityDictionaryCreated)
            {
                throw new Exception("CNEI: Build constructor used before all entity VMs sets.");
            }

            InputItemsList = vehicle.BuildRequiredItems
                             .Select(item => EntityViewModelsManager.GetEntityViewModel(item.ProtoItem))
                             .ToList();

            InputItemsVMList = vehicle.BuildRequiredItems
                               .Select(item => new ViewModelEntityWithCount(EntityViewModelsManager.GetEntityViewModel(item.ProtoItem),
                                                                            item.Count))
                               .ToList().AsReadOnly();

            BuildRequiredElectricityAmount = vehicle.BuildRequiredElectricityAmount;

            OutputItemsList.Add(vehicleViewModel);

            VehicleVM = vehicleViewModel;

            StationsList = EntityViewModelsManager.GetAllEntityViewModelsByType <IProtoVehicleAssemblyBay>()
                           .AsReadOnly();
            ListedInTechNodes = vehicleViewModel.ListedInTechNodes;
        }
Beispiel #3
0
        /// <summary>
        /// Initilize entity reletionships with each other - invoked after all entity view Models created,
        /// so you can access them by using <see cref="EntityViewModelsManager.GetEntityViewModel" />
        /// and <see cref="EntityViewModelsManager.GetAllEntityViewModels" />.
        /// </summary>
        public override void InitAdditionalRecipes()
        {
            base.InitAdditionalRecipes();

            InputItemsList = EntityViewModelsManager.GetAllEntityViewModelsByType <IProtoItemOrganic>();

            InputItemsVMList = EntityViewModelsManager.GetAllEntityViewModelsByType <IProtoItemOrganic>()
                               .Select(item => new ViewModelEntityWithCount(item))
                               .ToList().AsReadOnly();
        }
Beispiel #4
0
        protected override void OnLoaded()
        {
            base.OnLoaded();
            DataContext     = viewModel = new ViewModelFishingCalculator();
            fishingGridView = FindName("FishingGridView") as GridView;

            foreach (var baitViewModel in EntityViewModelsManager.GetAllEntityViewModelsByType <IProtoItemFishingBait>())
            {
                var entityControl = new EntitySlotControl()
                {
                    DataContext = baitViewModel
                };
                var gridViewColumnHeader = new GridViewColumnHeader()
                {
                    Content = entityControl
                };
                var commandBinding = new Binding()
                {
                    Path = new PropertyPath("BaitSortDictionary[" + baitViewModel.Type + "]")
                };
                gridViewColumnHeader.SetBinding(GridViewColumnHeader.CommandProperty, commandBinding);
                var gridColumn = new GridViewColumn()
                {
                    Header = gridViewColumnHeader,
                    Width  = double.NaN
                };
                Binding ChanceBinding = new Binding()
                {
                    Path         = new PropertyPath("BaitWeightDictionary[" + baitViewModel.Type + "].Chance"),
                    StringFormat = "P0"
                };
                // Yep, it's error in VS2019, but it works for noesis.
                // https://www.noesisengine.com/bugs/view.php?id=1337
                gridColumn.DisplayMemberBinding =
                    (BindingExpression)ChanceBinding.ProvideValue(
                        new ProvideValueTarget
                {
                    TargetObject   = null,
                    TargetProperty = null
                });
                fishingGridView.Columns.Add(gridColumn);
            }
        }
Beispiel #5
0
        /// <summary>
        /// Constructor for fishing recipe.
        /// Must be used only in InitEntityRelationships phase.
        /// </summary>
        /// <param name="baitViewModel">View Model of fishing bait entity.</param>
        /// <param name="fishViewModel">View Model of fish entity.</param>
        /// <param name="chance">Chance for catching this fish with this bait.</param>
        public FishingViewModel([NotNull] ProtoEntityViewModel baitViewModel,
                                [NotNull] ProtoEntityViewModel fishViewModel,
                                double weight)
            : base(baitViewModel.ProtoEntity)
        {
            if (!EntityViewModelsManager.EntityDictionaryCreated)
            {
                throw new Exception("CNEI: Droplist constructor used before all entity VMs sets.");
            }

            BaitEntity = baitViewModel;

            InputItemsList.Add(baitViewModel);

            AddBaitUsage(fishViewModel, weight);

            StationsList = EntityViewModelsManager.GetAllEntityViewModelsByType <IProtoItemToolFishing>()
                           .ToList().AsReadOnly();
        }
Beispiel #6
0
        public ViewModelFishingCalculator()
        {
            fishViewModelList       = EntityViewModelsManager.GetAllEntityViewModelsByType <ProtoItemFish>();
            baitViewModelList       = EntityViewModelsManager.GetAllEntityViewModelsByType <ProtoItemFishingBait>();
            BaitWeightSumDictionary = baitViewModelList.ToDictionary(b => b.Type, b => 0d);
            BaitSortDictionary      = baitViewModelList
                                      .ToDictionary(b => b.Type,
                                                    b => new ActionCommand(() =>
                                                                           SortByPropertyName("BaitWeightDictionary[" + b.Type + "].Chance")) as BaseCommand);
            FishDetailsList = new FilteredObservableWithSorting <FishDetails>();
            foreach (var fishViewModel in fishViewModelList)
            {
                if (fishViewModel.ProtoEntity is IProtoItemFish fish)
                {
                    FishDetailsList.Add(new FishDetails()
                    {
                        FishViewModel   = fishViewModel,
                        Name            = fishViewModel.Title,
                        IsSaltWaterFish = fish.IsSaltwaterFish,
                        RequiredFishingKnowledgeLevel = fish.RequiredFishingKnowledgeLevel,
                        BaitWeightDictionary          = fish.BaitWeightList.Entries
                                                        .ToDictionary(e => e.Value.Id,
                                                                      e => new FishDetails.BaitWithWeight(this)
                        {
                            Name   = e.Value.Name,
                            Id     = e.Value.Id,
                            Weight = e.Weight
                        })
                    });
                }
            }
            FishDetailsList.RemoveAllFilters();
            FishDetailsList.AddFilter(FishingFilter);
            CalculateBaitWeightSum();
            SortByPropertyName("Name");

            SortByName      = new ActionCommand(() => SortByPropertyName("Name"));
            SortByKnowledge = new ActionCommand(() => SortByPropertyName("RequiredFishingKnowledgeLevel"));
        }