Esempio n. 1
0
        private void _merge_reasons(ObjectiveAI ai)
        {
            if (0 < stage_view.Count)
            {
                foreach (var x in stage_view)
                {
                    reasons[x] = (int)What.VIEW;
                }
                stage_view.Clear();
            }
            if (0 < stage_inventory.Count)
            {
                var items = ai.ItemMemory;
                if (null != items)
                {
                    var need = ai.WhatDoINeedNow();
                    var want = ai.WhatDoIWantNow();

                    int code(in Location loc)
                    {
                        var think_is_there = items.WhatIsAt(loc);

                        if (null != think_is_there)
                        {
                            // \todo duplicate cheating postfilters from ActorController::WhereIs
                            foreach (var it in need)
                            {
                                if (think_is_there.Contains(it))
                                {
                                    return((int)What.INVENTORY - (int)it);
                                }
                            }
                            foreach (var it in want)
                            {
                                if (think_is_there.Contains(it))
                                {
                                    return((int)What.INVENTORY - (int)it);
                                }
                            }
                        }
                        return(0);
                    }

                    int test;
                    foreach (var x in stage_inventory)
                    {
                        if (0 != (test = code(in x)))
                        {
                            reasons[x] = test;
                        }
                    }
                }
                stage_inventory.Clear();
            }
            if (0 < stage_generators.Count)
            {
                foreach (var x in stage_generators)
                {
                    reasons[x.Location] = (int)What.GENERATOR_OFF;                                   // will downgrade to real reason on update
                }
                stage_generators.Clear();
            }
        }