/// <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; }
/// <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(); }
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); } }
/// <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(); }
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")); }