示例#1
0
        public static Item Select(List <Item> items, string selector)
        {
            Item result = null;

            if (items.Count <= 0)
            {
                return(null);
            }

            switch (selector)
            {
            case "Random":
                result = items[Utility.Random(items.Count)] as Item;
                break;

            case "Nearest":
                Item nearest = items[0] as Item;
                if (nearest != null)
                {
                    double minDist = Misc.DistanceSqrt(Player.Position, nearest.Position);
                    foreach (Item t in items)
                    {
                        if (t == null)
                        {
                            continue;
                        }

                        double dist = Misc.DistanceSqrt(Player.Position, t.Position);

                        if (!(dist < minDist))
                        {
                            continue;
                        }

                        nearest = t;
                        minDist = dist;
                    }
                    result = nearest;
                }
                break;

            case "Farthest":
                Item farthest = items[0] as Item;
                if (farthest != null)
                {
                    double maxDist = Misc.DistanceSqrt(Player.Position, farthest.Position);
                    foreach (Item t in items)
                    {
                        if (t == null)
                        {
                            continue;
                        }

                        double dist = Misc.DistanceSqrt(Player.Position, t.Position);
                        if (dist > maxDist)
                        {
                            farthest = t;
                            maxDist  = dist;
                        }
                    }
                    result = farthest;
                }
                break;

            case "Less":
                Item least = items[0] as Item;
                if (least != null)
                {
                    int minAmount = least.Amount;
                    foreach (Item t in items)
                    {
                        if (t == null)
                        {
                            continue;
                        }

                        int amount = t.Amount;
                        if (amount < minAmount)
                        {
                            least     = t;
                            minAmount = amount;
                        }
                    }
                    result = least;
                }
                break;

            case "Most":
                Item most = items[0] as Item;
                if (most != null)
                {
                    int maxAmount = most.Amount;
                    foreach (Item t in items)
                    {
                        if (t == null)
                        {
                            continue;
                        }

                        int amount = t.Amount;

                        if (amount <= maxAmount)
                        {
                            continue;
                        }

                        most      = t;
                        maxAmount = amount;
                    }
                    result = most;
                }
                break;

            case "Weakest":
                Item weakest = items[0] as Item;
                if (weakest != null)
                {
                    int minDur = weakest.Durability;
                    foreach (Item t in items)
                    {
                        if (t == null)
                        {
                            continue;
                        }

                        int dur = t.Durability;

                        if (dur >= minDur)
                        {
                            continue;
                        }

                        weakest = t;
                        minDur  = dur;
                    }
                    result = weakest;
                }
                break;

            case "Strongest":
                Item strongest = items[0] as Item;
                if (strongest != null)
                {
                    int maxDur = strongest.Durability;
                    foreach (Item t in items)
                    {
                        if (t == null)
                        {
                            continue;
                        }

                        int dur = t.Durability;

                        if (dur <= maxDur)
                        {
                            continue;
                        }
                        strongest = t;
                        maxDur    = dur;
                    }
                    result = strongest;
                }
                break;
            }

            return(result);
        }