private void MoveTCar(DematicFixPoint fp) { busy = true; if (Running) { return; } float distance = -fp.LocalPosition.X; if (trackStopPoint.Distance == distance) { TrackStopPoint_OnEnter(trackStopPoint, trackLoad); } else { if (trackStopPoint.Distance <= distance) { track.Route.Motor.Forward(); } else { track.Route.Motor.Backward(); } trackStopPoint.Distance = distance; track.Route.Motor.Start(); trackLoad.Release(); } }
private void DestinationFixPoint_OnUnSnapped(FixPoint stranger) { if (stranger.Parent is IRouteStatus) { IRouteStatus destinationConveyor = (IRouteStatus)stranger.Parent; DematicFixPoint dfp = (DematicFixPoint)stranger.Attached; if (dfp != null) { dfp.FixPointRouteStatus.OnRouteStatusChanged -= DestinationConveyorRouteStatus_OnRouteStatusChanged; } } }
private void DestinationFixPoint_OnSnapped(FixPoint stranger, FixPoint.SnapEventArgs e) { if (stranger.Parent is IRouteStatus) { IRouteStatus destinationConveyor = (IRouteStatus)stranger.Parent; DematicFixPoint dfp = (DematicFixPoint)stranger.Attached; if (dfp != null) { dfp.FixPointRouteStatus = destinationConveyor.GetRouteStatus(stranger); dfp.FixPointRouteStatus.OnRouteStatusChanged += DestinationConveyorRouteStatus_OnRouteStatusChanged; } } }
private void AddFixPoints(string[] fixPointList, LoadDirection direction, float leftPosition, float rightPosition) { var color = direction == LoadDirection.Source ? Color.Red : Color.Blue; var fixPointType = direction == LoadDirection.Source ? FixPoint.Types.Start : FixPoint.Types.End; foreach (var fixPoint in fixPointList) { var localYaw = Trigonometry.PI(Trigonometry.Angle2Rad(90.0f)); var fixPointArray = fixPoint.Split(':'); var side = fixPointArray[0]; var name = fixPointArray.Length > 2 ? fixPointArray[2] : ""; var trackSide = string.Equals("R", side) ? rightPosition : leftPosition; if (string.Equals("R", side) && direction == LoadDirection.Source) { localYaw = Trigonometry.PI(Trigonometry.Angle2Rad(270.0f)); } if (string.Equals("L", side) && direction == LoadDirection.Destination) { localYaw = Trigonometry.PI(Trigonometry.Angle2Rad(270.0f)); } var trackPosition = TCarLength / 2 - 0.05f; // Default value to be replaced by TryParse var isFloat = float.TryParse(fixPointArray[1], System.Globalization.NumberStyles.AllowDecimalPoint, System.Globalization.CultureInfo.CreateSpecificCulture("en-GB"), out trackPosition); if (isFloat) { // Find out which fixpoint is the furthest furthestFixPoint = furthestFixPoint < trackPosition ? trackPosition : furthestFixPoint; DematicFixPoint fp = new DematicFixPoint(color, fixPointType, this); fp.Name = name; if (direction == LoadDirection.Source) { fp.OnSnapped += new FixPoint.SnappedEvent(SourceFixPoint_OnSnapped); fp.OnUnSnapped += new FixPoint.UnSnappedEvent(SourceFixPoint_OnUnSnapped); } else { fp.OnSnapped += new FixPoint.SnappedEvent(DestinationFixPoint_OnSnapped); fp.OnUnSnapped += new FixPoint.UnSnappedEvent(DestinationFixPoint_OnUnSnapped); } Add(fp); fp.LocalPosition = new Vector3(-trackPosition, 0, trackSide); fp.LocalYaw = localYaw; // Label Text3D label = new Text3D(Color.Yellow, 0.08f, 0.1f, new Font(FontFamily.GenericSansSerif, 1.0f)); label.Text = name; Add(label); label.LocalPosition = new Vector3(-trackPosition + 0.08f, 0, trackSide - 0.02f); label.Pitch = Trigonometry.PI(Trigonometry.Angle2Rad(90.0f)); } } }
private void SourceFixPoint_OnUnSnapped(FixPoint stranger) { if (stranger.Parent is IRouteStatus) { IRouteStatus sourceConveyor = (IRouteStatus)stranger.Parent; DematicFixPoint dfp = (DematicFixPoint)stranger.Attached; if (dfp != null) { if (SourceFixPoints.ContainsKey(dfp.Name)) { SourceFixPoints.Remove(dfp.Name); } dfp.FixPointLoadWaitingStatus.OnLoadWaitingChanged -= FixPointLoadWaitingStatus_OnLoadWaitingChanged; } } }
public void SourceArrival(Load load, DematicFixPoint sourceFixPoint) { // Get the correct FixPoint for this destination List <FixPoint> fixpointDestinations = GetFixPointDestinations(); string destinationName = GetRandomDestination(fixpointDestinations); // Temporary : Get random one for now var fpName = fixpointDestinations.Find(x => x.ContainsDestination(destinationName) == true).Name; DematicFixPoint fp = (DematicFixPoint)tCar.FixPoints.Find(x => x.Name == fpName); TCarTask task = new TCarTask { Source = sourceFixPoint, Destination = fp, }; tCar.Tasks.Add(task); }
private void SourceFixPoint_OnSnapped(FixPoint stranger, FixPoint.SnapEventArgs e) { if (stranger.Parent is IRouteStatus) { IRouteStatus sourceConveyor = (IRouteStatus)stranger.Parent; DematicFixPoint dfp = (DematicFixPoint)stranger.Attached; if (!SourceFixPoints.ContainsKey(dfp.Name)) { SourceFixPoints.Add(dfp.Name, dfp); } if (dfp != null) { dfp.FixPointLoadWaitingStatus = sourceConveyor.GetLoadWaitingStatus(stranger); dfp.FixPointLoadWaitingStatus.OnLoadWaitingChanged += FixPointLoadWaitingStatus_OnLoadWaitingChanged; } } else { // call upsnap method } }
private void FixPointLoadWaitingStatus_OnLoadWaitingChanged(object sender, LoadWaitingChangedEventArgs e) { Load load = e._waitingLoad; if (load != null && load.Route != null && e._loadWaiting) { IRouteStatus conveyor = (IRouteStatus)e._waitingLoad.Route.Parent.Parent; if (ControlType == ControlTypes.Local) { // Select a destination at random (this will be replaced by controller code) string destinationName = GetRandomDestination(); // Temporary : Get random one for now DematicFixPoint destinationFP = (DematicFixPoint)FixPoints.Find(x => x.Name == destinationName); DematicFixPoint sourceFP = (DematicFixPoint)conveyor.EndFixPoint.Attached; if (sourceFP != null) { TCarTask task = new TCarTask { Source = sourceFP, Destination = destinationFP, }; Tasks.Add(task); } } else if (ControlType == ControlTypes.Project_Script) // TODO: Invent event to attach routing script to { SourceLoadArrived(load, (DematicFixPoint)conveyor.EndFixPoint.Attached); } else if (ControlType == ControlTypes.Controller) { if (Controller != null) { sourceArrival?.Invoke(load, (DematicFixPoint)conveyor.EndFixPoint.Attached); } } } }
public RouteStatus GetRouteStatus(FixPoint startFixPoint) { DematicFixPoint dFixPoint = (DematicFixPoint)startFixPoint; return(dFixPoint.FixPointRouteStatus); }
private void SourceLoadArrived(Load load, DematicFixPoint sourceFixPoint) { OnSourceLoadArrived?.Invoke(this, load, sourceFixPoint); }