Пример #1
0
        /// <inheritdoc cref="IPlan"/>
        public bool TryGetOptimalAction(IStateKey planStateKey, out IActionKey actionKey)
        {
            planData.CompletePlanningJobs();
            var found = planData.PlanGraph.TryGetOptimalAction(Convert(planStateKey), out var actionKeyTyped);

            actionKey = actionKeyTyped as IActionKey;
            return(found);
        }
Пример #2
0
        TActionKey Convert(IActionKey actionKey)
        {
            if (actionKey is TActionKey converted)
            {
                return(converted);
            }

            throw new ArgumentException($"Expected action key of type {typeof(TActionKey)}. Received key of type {actionKey?.GetType()}.");
        }
Пример #3
0
        /// <inheritdoc cref="IPlan"/>
        public int GetResultingStates(IStateKey planStateKey, IActionKey actionKey, IList <IStateKey> resultingPlanStateKeys)
        {
            planData.CompletePlanningJobs();
            resultingPlanStateKeys?.Clear();

            var count                = 0;
            var stateActionPair      = new StateActionPair <TStateKey, TActionKey>(Convert(planStateKey), Convert(actionKey));
            var resultingStateLookup = planData.PlanGraph.ResultingStateLookup;

            if (resultingStateLookup.TryGetFirstValue(stateActionPair, out var resultingState, out var iterator))
            {
                do
                {
                    resultingPlanStateKeys?.Add(resultingState as IStateKey);
                    count++;
                } while (resultingStateLookup.TryGetNextValue(out resultingState, ref iterator));
            }

            return(count);
        }
Пример #4
0
 public override string GetActionName(IActionKey actionKey)
 {
     s_ActionGuidToNameLookup.TryGetValue(((IActionKeyWithGuid)actionKey).ActionGuid, out var name);
     return(name);
 }
Пример #5
0
        public override ActionParameterInfo[] GetActionParametersInfo(IStateKey stateKey, IActionKey actionKey)
        {
            string[] parameterNames = {};
            var      stateData      = m_StateManager.GetStateData((StateEntityKey)stateKey, false);

            switch (((IActionKeyWithGuid)actionKey).ActionGuid)
            {
            case var actionGuid when actionGuid == ActionScheduler.CollectGuid:
                parameterNames = Collect.parameterNames;
                break;

            case var actionGuid when actionGuid == ActionScheduler.NavigateGuid:
                parameterNames = Navigate.parameterNames;
                break;
            }

            var parameterInfo = new ActionParameterInfo[parameterNames.Length];

            for (var i = 0; i < parameterNames.Length; i++)
            {
                var traitBasedObjectId = stateData.GetTraitBasedObjectId(((ActionKey)actionKey)[i]);

#if DEBUG
                parameterInfo[i] = new ActionParameterInfo {
                    ParameterName = parameterNames[i], TraitObjectName = traitBasedObjectId.Name.ToString(), TraitObjectId = traitBasedObjectId.Id
                };
#else
                parameterInfo[i] = new ActionParameterInfo {
                    ParameterName = parameterNames[i], TraitObjectName = traitBasedObjectId.ToString(), TraitObjectId = traitBasedObjectId.Id
                };
#endif
            }

            return(parameterInfo);
        }
Пример #6
0
 public override ActionParameterInfo[] GetActionParametersInfo(IStateKey stateKey, IActionKey actionKey) => null;
Пример #7
0
 public override string GetActionName(IActionKey actionKey) =>
 ActionScheduler.s_ActionGuidToNameLookup[((IActionKeyWithGuid)actionKey).ActionGuid];
Пример #8
0
        public override IActionParameterInfo[] GetActionParametersInfo(IStateKey stateKey, IActionKey actionKey)
        {
            string[] parameterNames = {};
            var      stateData      = m_StateManager.GetStateData((StateEntityKey)stateKey, false);

            switch (((IActionKeyWithGuid)actionKey).ActionGuid)
            {
            case var actionGuid when actionGuid == ActionScheduler.MoveDownGuid:
                parameterNames = MoveDown.parameterNames;
                break;

            case var actionGuid when actionGuid == ActionScheduler.MoveLeftGuid:
                parameterNames = MoveLeft.parameterNames;
                break;

            case var actionGuid when actionGuid == ActionScheduler.MoveRightGuid:
                parameterNames = MoveRight.parameterNames;
                break;

            case var actionGuid when actionGuid == ActionScheduler.MoveUpGuid:
                parameterNames = MoveUp.parameterNames;
                break;

            case var actionGuid when actionGuid == ActionScheduler.PickupKeyGuid:
                parameterNames = PickupKey.parameterNames;
                break;

            case var actionGuid when actionGuid == ActionScheduler.UseDoorLeftGuid:
                parameterNames = UseDoorLeft.parameterNames;
                break;

            case var actionGuid when actionGuid == ActionScheduler.UseDoorRightGuid:
                parameterNames = UseDoorRight.parameterNames;
                break;

            case var actionGuid when actionGuid == ActionScheduler.UseGateUpGuid:
                parameterNames = UseGateUp.parameterNames;
                break;
            }

            var parameterInfo = new IActionParameterInfo[parameterNames.Length];

            for (var i = 0; i < parameterNames.Length; i++)
            {
                var traitBasedObjectId = stateData.GetTraitBasedObjectId(((ActionKey)actionKey)[i]);

#if DEBUG
                parameterInfo[i] = new ActionParameterInfo {
                    ParameterName = parameterNames[i], TraitObjectName = traitBasedObjectId.Name.ToString(), TraitObjectId = traitBasedObjectId.Id
                };
#else
                parameterInfo[i] = new ActionParameterInfo {
                    ParameterName = parameterNames[i], TraitObjectName = traitBasedObjectId.ToString(), TraitObjectId = traitBasedObjectId.Id
                };
#endif
            }

            return(parameterInfo);
        }
Пример #9
0
 /// <inheritdoc cref="IPlan"/>
 public bool TryGetStateTransitionInfo(IStateKey originatingPlanStateKey, IActionKey actionKey, IStateKey resultingPlanStateKey, out StateTransitionInfo stateTransitionInfo)
 {
     return(TryGetStateTransitionInfo(Convert(originatingPlanStateKey), Convert(actionKey), Convert(resultingPlanStateKey), out stateTransitionInfo));
 }
Пример #10
0
 /// <inheritdoc cref="IPlan"/>
 public bool TryGetActionInfo(IStateKey planStateKey, IActionKey actionKey, out ActionInfo actionInfo)
 {
     return(TryGetActionInfo(Convert(planStateKey), Convert(actionKey), out actionInfo));
 }
        public abstract string GetActionName(IActionKey actionKey); //todo move to planWrapper

        public abstract ActionParameterInfo[] GetActionParametersInfo(IStateKey stateKey, IActionKey actionKey);
 public abstract string GetActionName(IActionKey actionKey); //todo move to planWrapper