Exemple #1
0
        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();
            }
        }
Exemple #2
0
 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;
         }
     }
 }
Exemple #3
0
 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;
         }
     }
 }
Exemple #4
0
        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));
                }
            }
        }
Exemple #5
0
 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;
         }
     }
 }
Exemple #6
0
        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);
        }
Exemple #7
0
        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
            }
        }
Exemple #8
0
        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);
                    }
                }
            }
        }
Exemple #9
0
        public RouteStatus GetRouteStatus(FixPoint startFixPoint)
        {
            DematicFixPoint dFixPoint = (DematicFixPoint)startFixPoint;

            return(dFixPoint.FixPointRouteStatus);
        }
Exemple #10
0
 private void SourceLoadArrived(Load load, DematicFixPoint sourceFixPoint)
 {
     OnSourceLoadArrived?.Invoke(this, load, sourceFixPoint);
 }