public override void AddObjectVariablesToAssigner(IWorkshopTree reference, VarIndexAssigner assigner) { assigner.Add(Node_A, DijkstraBase.Node1((Element)reference)); assigner.Add(Node_B, DijkstraBase.Node2((Element)reference)); assigner.Add(Attribute_AB, DijkstraBase.Node1Attribute((Element)reference)); assigner.Add(Attribute_BA, DijkstraBase.Node2Attribute((Element)reference)); }
public override IWorkshopTree Get(ActionSet actionSet, IWorkshopTree[] parameterValues) { DijkstraNormal algorithm = new DijkstraNormal( actionSet, (Element)actionSet.CurrentObject.GetVariable(), Element.Part <V_PositionOf>(parameterValues[0]), (Element)parameterValues[1] ); algorithm.Get(); DijkstraBase.Pathfind( actionSet, actionSet.Translate.DeltinScript.SetupPathfinder(), (Element)algorithm.finalPath.GetVariable(), (Element)parameterValues[0], (Element)parameterValues[1] ); return(null); }
public Element SegmentsFromNodes(IWorkshopTree pathmapObject, Element node1, Element node2) => Element.Part <V_FilteredArray>( Segments.Get()[(Element)pathmapObject], Element.Part <V_And>( Element.Part <V_ArrayContains>( DijkstraBase.BothNodes(new V_ArrayElement()), node1 ), Element.Part <V_ArrayContains>( DijkstraBase.BothNodes(new V_ArrayElement()), node2 ) ) );
/// <summary>Gets the closest node from a position.</summary> public Element ClosestNode(ActionSet actionSet, Element position) { // Get the nodes in the pathmap Element nodes = Element.Part <V_ValueInArray>(PathmapInstance.Nodes.GetVariable(), PathmapReference.GetVariable()); // Get the closest node index. if (ApplicableNodeDeterminer == null) { return(DijkstraBase.ClosestNodeToPosition(nodes, position, PotentiallyNullNodes)); } else { return((Element)ApplicableNodeDeterminer.Invoke(actionSet, nodes, position)); } }
public override IWorkshopTree Get(ActionSet actionSet, IWorkshopTree[] parameterValues) { // Store the pathfind destination. IndexReference destinationStore = actionSet.VarCollection.Assign("_pathfindDestinationStore", actionSet.IsGlobal, true); actionSet.AddAction(destinationStore.SetVariable((Element)parameterValues[1])); DijkstraNormal algorithm = new DijkstraNormal( actionSet, (Element)actionSet.CurrentObject, Element.Part <V_PositionOf>(parameterValues[0]), (Element)destinationStore.GetVariable() ); algorithm.Get(); DijkstraBase.Pathfind( actionSet, actionSet.Translate.DeltinScript.SetupPathfinder(), (Element)algorithm.finalPath.GetVariable(), (Element)parameterValues[0], (Element)destinationStore.GetVariable() ); return(null); }
private void SetHooks(DijkstraBase algorithm, IWorkshopTree onLoop, IWorkshopTree onConnectLoop) { // OnLoop if (onLoop is LambdaAction onLoopLambda) { algorithm.OnLoop = actionSet => onLoopLambda.Invoke(actionSet); } // OnConnectLoop if (onConnectLoop is LambdaAction onConnectLoopLambda) { algorithm.OnConnectLoop = actionSet => onConnectLoopLambda.Invoke(actionSet); } if (ApplicableNodeDeterminer.HookValue != null) { algorithm.GetClosestNode = (actionSet, nodes, position) => (Element)((LambdaAction)ApplicableNodeDeterminer.HookValue).Invoke(actionSet, nodes, position); } }
override protected MethodResult Get(PathfinderInfo info) { if (((VarRef)Parameters[1]).Var is PathMapVar == false) { throw SyntaxErrorException.InvalidVarRefType(((VarRef)Parameters[1]).Var.Name, VarType.PathMap, ParameterLocations[1]); } Element player = (Element)Parameters[0]; PathMapVar pathmap = (PathMapVar)((VarRef)Parameters[1]).Var; IndexedVar destination = IndexedVar.AssignInternalVarExt(TranslateContext.VarCollection, Scope, "Destination", TranslateContext.IsGlobal); TranslateContext.Actions.AddRange(destination.SetVariable((Element)Parameters[2])); DijkstraNormal algorithm = new DijkstraNormal(TranslateContext, pathmap, Element.Part <V_PositionOf>(player), destination.GetVariable()); algorithm.Get(); DijkstraBase.Pathfind(TranslateContext, info, algorithm.finalPath.GetVariable(), player, destination.GetVariable()); return(new MethodResult(null, null)); }