private void StartPlanning(IEnumerable <Item> everything, List <GOAPAction> actions, GOAPState goal)
    {
        var typeDict = new Dictionary <string, ItemType>()
        {
            { "mine", ItemType.Mine }
            , { "defense", ItemType.Defense }
            , { "cannon", ItemType.Cannon }
            , { "core", ItemType.Core }
            , { "workTable", ItemType.WorkTable }
            , { "waitZone", ItemType.WaitZone }
        };
        var actDict = new Dictionary <string, IAAction>()
        {
            { "Pickup", IAAction.PickUp }
            , { "Create", IAAction.Create }
            , { "Upgrade", IAAction.Upgrade }
            , { "Attack", IAAction.Attack }
            , { "Wait", IAAction.Wait }
            , { "SuperAttack", IAAction.SuperAttack }
        };

        var plan = GoapMiniTest.GoapRun(initial, goal, actions, true);

        if (plan == null)
        {
            print("Couldn't plan");
        }
        else
        {
            var li = plan.Select(x => x.name).ToList();
            print(li);
            _ia.SetPlan(
                plan
                .Select(pa => pa.name)
                .Select(a =>
            {
                var i2 = everything.FirstOrDefault(i => typeDict.Any(kv => a.EndsWith(kv.Key)) ?
                                                   i.type == typeDict.First(kv => a.EndsWith(kv.Key)).Value :
                                                   false);
                if (actDict.Any(kv => a.StartsWith(kv.Key)) && i2 != null)
                {
                    return(Tuple.Create(actDict.First(kv => a.StartsWith(kv.Key)).Value, i2));
                }
                else
                {
                    return(null);
                }
            }).Where(a => a != null)
                .ToList()
                );
            if (firstTime)
            {
                firstTime = false;
                _ia.NextStep();
            }
        }
    }