Beispiel #1
0
 public T[] RandomItems <T>(int count, float sizeExponent, Predicate <T> filter = null) where T : EquippableItemData
 {
     return(ItemManager.ItemData.GetAll <T>()
            .Where(item =>
                   item.Price > 0 &&
                   item.Manufacturer != Guid.Empty &&
                   (Galaxy?.ContainsFaction(item.Manufacturer) ?? true) &&
                   (Faction == null || Faction.Allegiance.ContainsKey(item.Manufacturer)) &&
                   (filter?.Invoke(item) ?? true))
            .WeightedRandomElements(ref Random, item =>
                                    (Faction == null || item.Manufacturer == Faction.ID ? 1 : Faction.Allegiance[item.Manufacturer]) * // Prioritize items from allied manufacturers
                                    pow(item.Shape.Coordinates.Length, sizeExponent) /                                                 // Prioritize larger items
                                    (Zone?.Distance[Galaxy.HomeZones[ItemManager.ItemData.Get <Faction>(item.Manufacturer)]] ?? 1) /   // Penalize distance to manufacturer headquarters
                                    pow(item.Price, PriceExponent),                                                                    // Penalize item price to a controllable degree
                                    count
                                    ));
 }
Beispiel #2
0
 public HullData RandomHull(HullType type, Predicate <HullData> hullFilter = null)
 {
     return(ItemManager.ItemData.GetAll <HullData>()
            .Where(item =>
                   item.Price > 0 &&
                   (hullFilter?.Invoke(item) ?? true) &&
                   item.HullType == type &&
                   item.Manufacturer != Guid.Empty &&
                   (Galaxy?.ContainsFaction(item.Manufacturer) ?? true) &&
                   (Faction == null || item.Manufacturer == Faction.ID || Faction.Allegiance.ContainsKey(item.Manufacturer)))
            .WeightedRandomElements(ref Random,
                                    item =>
                                    (Faction == null || item.Manufacturer == Faction.ID ? 1 : Faction.Allegiance[item.Manufacturer]) / // Prioritize items from allied manufacturers
                                    (Zone?.Distance[Galaxy.HomeZones[ItemManager.ItemData.Get <Faction>(item.Manufacturer)]] ?? 1) /   // Penalize distance to manufacturer headquarters
                                    pow(item.Price, PriceExponent),                                                                    // Penalize item price to a controllable degree
                                    1
                                    ).FirstOrDefault());
 }