public CasePhotocell(CasePhotocellInfo info, BaseTrack conv) : base(info, conv) { photocellInfo = info; AssemblyInfo ai = new AssemblyInfo(); conveyor = conv; photocellDisplay = new CasePhotocellDisplay(new PhotocellDisplayInfo { width = info.width }); photocellDisplay.ListSolutionExplorer = false; photocellDisplay.OnPhotocellDisplayDeleted += photocellDisplay_OnPhotocellDisplayDeleted; Add(photocellDisplay, new Vector3(info.length / 2, 0, 0)); sensor.OnEnter += sensor_OnEnter; sensor.OnLeave += sensor_OnLeave; sensor.Color = Color.Green; sensor.Visible = false; conv.TransportSection.Route.InsertActionPoint(sensor); //If the photocell is connected to a belt conveyor then we want to pause the timers if the conveyor is not available if (conveyor is IBeltControl) { beltControl = conveyor as IRouteStatus; routeStatus = beltControl.GetRouteStatus(conveyor.StartFixPoint); routeStatus.OnRouteStatusChanged += routeStatus_OnRouteStatusChanged; } OnNameChanged += CasePhotocell_OnNameChanged; }
public override void StartFixPoint_OnSnapped(FixPoint stranger, FixPoint.SnapEventArgs e) { IRouteStatus connectedConv = stranger.Parent as IRouteStatus; PreviousLoadWaitingStraight = connectedConv.GetLoadWaitingStatus(stranger); PreviousLoadWaitingStraight.OnLoadWaitingChanged += PreviousLoadWaitingStraight_OnLoadWaitingChanged; }
/// <summary> /// The standard straight conveyor does not care what is waiting to be released into it, however if there is /// routing control on the receiving conveyor then this should be overridden to get the Load Waiting status of /// the previous conveyor. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public virtual void StartFixPoint_OnSnapped(FixPoint stranger, FixPoint.SnapEventArgs e) { if (stranger.Parent is IRouteStatus) { PreviousConveyor = stranger.Parent as IRouteStatus; } }
public void MergeSectionStartFixPoint_OnSnapped(FixPoint fixpoint, FixPoint.SnapEventArgs e) { IRouteStatus connectedConv = fixpoint.Parent as IRouteStatus; PreviousLoadWaitingMerge = connectedConv.GetLoadWaitingStatus(fixpoint); PreviousLoadWaitingMerge.OnLoadWaitingChanged += PreviousLoadWaitingMerge_OnLoadWaitingChanged; }
public override void StartFixPoint_OnSnapped(Core.Parts.FixPoint stranger, Core.Parts.FixPoint.SnapEventArgs e) { IRouteStatus PreviousConveyorStraight = stranger.Parent as IRouteStatus; previousLoadWaitingStatus = PreviousConveyorStraight.GetLoadWaitingStatus(stranger); if (previousLoadWaitingStatus != null) { previousLoadWaitingStatus.OnLoadWaitingChanged += PreviousLoadWaitingStatusStraight_OnLoadWaitingChanged; } }
private void TrackStopPoint_OnEnter(ActionPoint sender, Load load) { track.Route.Motor.Stop(); if (Tasks.Count > 0) { var currentTask = Tasks[0]; if (currentTask.TCarCycle == TCycle.Load) { IRouteStatus sourceConveyor = (IRouteStatus)currentTask.Source.Attached.Parent; sourceConveyor.TransportSection.Route.NextRoute = conveyor.TransportSection.Route; if (currentTask.Source.LocalPosition.Z == conveyor.StartFixPoint.LocalPosition.X) { conveyor.LocalYaw = Trigonometry.PI(Trigonometry.Angle2Rad(270.0f)); } else { conveyor.LocalYaw = Trigonometry.PI(Trigonometry.Angle2Rad(90.0f)); } conveyor.ThisRouteStatus.Available = RouteStatuses.Available; currentTask.Source.FixPointRouteStatus.Available = RouteStatuses.Available; currentTask.TCarCycle = TCycle.Unload; } else { if (currentTask.Destination.LocalPosition.Z == conveyor.EndFixPoint.LocalPosition.X) { if (conveyor.TransportSection.Route.Loads.Count > 0) { var loadDistance = conveyor.TransportSection.Route.Loads.First().Distance; conveyor.LocalYaw = Trigonometry.PI(Trigonometry.Angle2Rad(270.0f)); conveyor.TransportSection.Route.Loads.First().Distance = conveyor.TransportSection.Route.Length - loadDistance; } } else if (currentTask.Destination.LocalPosition.Z == conveyor.StartFixPoint.LocalPosition.X) { if (conveyor.TransportSection.Route.Loads.Count > 0) { var loadDistance = conveyor.TransportSection.Route.Loads.First().Distance; conveyor.LocalYaw = Trigonometry.PI(Trigonometry.Angle2Rad(90.0f)); conveyor.TransportSection.Route.Loads.First().Distance = conveyor.TransportSection.Route.Length - loadDistance; } } IRouteStatus destinationConveyor = (IRouteStatus)currentTask.Destination.Attached.Parent; conveyor.TransportSection.Route.NextRoute = destinationConveyor.TransportSection.Route; if (currentTask.Destination.FixPointRouteStatus.Available == RouteStatuses.Available) { conveyor.ThisRouteStatus.Available = RouteStatuses.Request; } } } }
public virtual void EndFixPoint_OnUnSnapped(Core.Parts.FixPoint stranger) { if (stranger.Parent is BaseTrack) { NextConveyor = null; if (NextRouteStatus != null) { NextRouteStatus.OnRouteStatusChanged -= NextRouteStatus_OnAvailableChanged; NextRouteStatus = null; } } }
public virtual void EndFixPoint_OnSnapped(Core.Parts.FixPoint stranger, Core.Parts.FixPoint.SnapEventArgs e) { NextConveyor = stranger.Parent as IRouteStatus; if (NextConveyor != null) { NextRouteStatus = NextConveyor.GetRouteStatus(stranger); if (NextRouteStatus != null) { NextRouteStatus.OnRouteStatusChanged += NextRouteStatus_OnAvailableChanged; } } }
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 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; } } }
private void SetNextDivertRouteStatus(bool value) { if (value) { IRouteStatus afterNextConv = divertSection.NextConveyor; if (afterNextConv is StraightConveyor) { StraightConveyor straight = afterNextConv as StraightConveyor; NextDivertRouteStatus = straight.NextConveyor.GetRouteStatus(divertSection.EndFixPoint.Attached); } else if (afterNextConv is CurveConveyor) { CurveConveyor curve = afterNextConv as CurveConveyor; NextDivertRouteStatus = curve.NextConveyor.GetRouteStatus(divertSection.EndFixPoint.Attached); } } else { NextDivertRouteStatus = divertSection.NextConveyor.GetRouteStatus(divertSection.EndFixPoint.Attached); } }
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 bool has_the_same_value_as(IRouteStatus the_other_route_status) { return underlying_display_name.Equals(the_other_route_status.display_name()); }
void EndFixPoint_OnSnapped(FixPoint stranger, FixPoint.SnapEventArgs e) { NextConveyor = stranger.Parent as IRouteStatus; NextRouteStatus = NextConveyor.GetRouteStatus(stranger); NextRouteStatus.OnRouteStatusChanged += NextRouteStatus_OnAvailableChanged; }
void EndFixPoint_OnUnSnapped(FixPoint stranger) { NextConveyor = null; NextRouteStatus.OnRouteStatusChanged -= NextRouteStatus_OnAvailableChanged; NextRouteStatus = null; }
public PalletStationEventArgs(IRouteStatus status, Load load, string pickStation) { Status = status; Load = load; PickStationName = pickStation; }