/// <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); }
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()}."); }
/// <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); }
public override string GetActionName(IActionKey actionKey) { s_ActionGuidToNameLookup.TryGetValue(((IActionKeyWithGuid)actionKey).ActionGuid, out var name); return(name); }
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); }
public override ActionParameterInfo[] GetActionParametersInfo(IStateKey stateKey, IActionKey actionKey) => null;
public override string GetActionName(IActionKey actionKey) => ActionScheduler.s_ActionGuidToNameLookup[((IActionKeyWithGuid)actionKey).ActionGuid];
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); }
/// <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)); }
/// <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