private void CheckIsLookingAtMarkable()
        {
            var ray = playerCamera.ScreenPointToRay(crosshairImage.transform.position);

            if (Physics.Raycast(ray, out var hit))
            {
                _markable = hit.collider.gameObject.GetComponent <Markable>();
            }
        }
 private TerrainChunk SelectedTerrainWasIn(Markable marked)
 {
     foreach (TerrainChunk tc in selections)
     {
         if (tc.Contains(marked))
         {
             return(tc);
         }
     }
     return(null);
 }
        public void Run()
        {
            Console.WriteLine("--Marker interface pattern--\n");

            var markable    = new Markable();
            var nonMarkable = new object();

            var itemsToProcess = new List <object>
            {
                markable,
                nonMarkable
            };

            Process(itemsToProcess);

            Console.WriteLine();
        }
示例#4
0
        /// <summary>
        /// Builds the markers using an IMarkable collection and reflection to access the property values
        /// </summary>
        public static List <Marker> BuildMarkers(Markable markedObject, string prefix)
        {
            if (markedObject == null)
            {
                return(new List <Marker>());
            }

            var styleProvider = new MarkStyleProvider();

            var markers = new List <Marker>();

            foreach (var item in markedObject.MarkItems)
            {
                var marker = new Marker();

                SetMarkerPosition(item, marker);

                var property = markedObject.GetType().GetProperty(item.PropertyName);

                var markAttribute = property?.GetCustomAttributes(typeof(MarkAttribute), false);

                if (markAttribute != null && markAttribute.Length > 0)
                {
                    var attribute = (markAttribute[0] as MarkAttribute);

                    var style = styleProvider.GetMarkStyle(attribute.MarkType);

                    marker.ForeColour          = style.ForeColour;
                    marker.BackColour          = style.BackColour;
                    marker.AlternateBackColour = style.AlternateBackColour;
                    marker.Name = style.Description;

                    marker.Visible = attribute.Visible;

                    if (string.IsNullOrEmpty(prefix) | string.IsNullOrEmpty(attribute?.Description))
                    {
                        marker.Name = prefix + style.Description;
                    }
                    else
                    {
                        marker.Name = prefix + " - " + style.Description;
                    }
                }
                else
                {
                    marker.Name = item.PropertyName;
                }

                // Check if there is an index, if there is it indicates the property is an array
                if (item.Index < 0)
                {
                    var value = property.GetValue(markedObject, null);

                    SetValue(markers, marker, value, prefix + item.Prefix);
                }
                else
                {
                    var array = (object[])property.GetValue(markedObject, null);

                    SetValue(markers, marker, array[item.Index], prefix + item.Prefix);
                }

                if (item.StartPosition > 0)
                {
                    markers.Add(marker);
                }
            }
            // Sort the markers in order of their positions
            markers.Sort((marker1, marker2) => marker1.StartPosition.CompareTo(marker2.StartPosition));

            return(markers);
        }
示例#5
0
 public static List <Marker> BuildMarkers(Markable markedObject)
 {
     return(BuildMarkers(markedObject, string.Empty));
 }
 public bool Contains(Markable toCheck)
 {
     return(terrains.Contains(toCheck));
 }
        protected override void OnNextStage(StageChangedEventArgs e)
        {
            var stage = e.Stage;

            DisplayText  = stage.Cue?.Trim();
            SubtitleText = stage.Subtitle?.Trim();

            if (stage.Marker != null)
            {
                /* Record marker */
                Markable?.Mark(stage.Marker.Value);

                var sessionTime = Session.SessionTime;

                /* Handle events */
                switch (stage.Marker)
                {
                case MarkerDefinitions.ParadigmStartMarker:
                    Result.ParadigmStartTime = sessionTime;
                    ParadigmStarted          = true;
                    SpellerController.Start();
                    HintButton();
                    break;

                case MarkerDefinitions.ParadigmEndMarker:
                    Result.ParadigmEndTime = sessionTime;
                    break;

                case MarkerDefinitions.TrialStartMarker:
                {
                    var trial         = new SpellerParadigm.Result.Trial();
                    var activedButton = _activatedButton = UpdateCursor(GazePointHandler.CurrentPosition);
                    if (activedButton != null)
                    {
                        trial.ActivedButtons = new SpellerParadigm.Result.Button(activedButton.Key).SingletonArray();
                    }
                    trial.StartTime = CurrentTime;
                    _trial          = trial;
                    SelectedButton  = null;
                    DisplayText     = null;
                    TrialCancelled  = false;
                    if (activedButton != null)
                    {
                        _detector.Active(activedButton.BorderRect);
                    }
                    break;
                }

                case MarkerDefinitions.TrialEndMarker:
                {
                    var hintButton = HintedButton;
                    HintButton(TrialCancelled ? 1 : 2);
                    var trial          = _trial;
                    var detectorResult = _detector.GetResult(Buttons);
                    _detector.Reset();
                    _trial          = null;
                    trial.Cancelled = TrialCancelled;
                    trial.EndTime   = CurrentTime;
                    if (!trial.Cancelled && ComputeTrialResult(Buttons, Functions.Constant(detectorResult), hintButton,
                                                               out var button, out var correct))
                    {
                        trial.Correct = correct;
                        if (button != null)
                        {
                            trial.SelectedButton = new SpellerParadigm.Result.Button(button.Key);
                        }
                        else if (!Paradigm.Config.Test.AlwaysCorrectFeedback)
                        {
                            SystemSounds.Exclamation.Play();
                        }
                    }
                    CheckStop();
                    Result.Trials.Add(trial);
                    TrialTrigger?.Reset();
                    break;
                }
                }
            }
        }
示例#8
0
        protected override void OnNextStage(StageChangedEventArgs e)
        {
            var stage = e.Stage;

            if (TrialCancelled && stage.Marker != null && stage.Marker == SpellerMarkerDefinitions.SubTrialMarker)
            {
                e.Action = StageAction.Skip;
                return;
            }

            DisplayText  = stage.Cue?.Trim();
            SubtitleText = stage.Subtitle?.Trim();

            if (stage.Marker != null)
            {
                /* Record marker */
                Markable?.Mark(stage.Marker.Value);

                var sessionTime = Session.SessionTime;

                /* Handle events */
                switch (stage.Marker)
                {
                case MarkerDefinitions.ExperimentStartMarker:
                    Result.ExperimentStartTime = sessionTime;
                    ExperimentStarted          = true;
                    SpellerController.Start();
                    HintButton();
                    break;

                case MarkerDefinitions.ExperimentEndMarker:
                    Result.ExperimentEndTime = sessionTime;
                    break;

                case MarkerDefinitions.TrialStartMarker:
                {
                    var trial = new P300Trial {
                        SubTrials = new List <P300Trial.SubTrial>((int)(Experiment.Config.Test.SubTrialCount + 1))
                    };
                    UpdateCursor(GazePointHandler.CurrentPosition);
                    var activedButtons = _activedButtons;
                    if (activedButtons != null)
                    {
                        var buttons = new LinkedList <SpellerExperiment.Result.Button>();
                        foreach (var activedButton in activedButtons)
                        {
                            if (activedButton != null)
                            {
                                buttons.AddLast(new SpellerExperiment.Result.Button(activedButton.Key));
                            }
                        }
                        trial.ActivedButtons = buttons;
                    }
                    trial.StartTime = CurrentTime;
                    _trial          = trial;
                    if (_p300Detector != null)
                    {
                        _p300Detector.Actived = true;
                    }
                    SelectedButton = null;
                    DisplayText    = null;
                    TrialCancelled = false;
                    break;
                }

                case MarkerDefinitions.TrialEndMarker:
                {
                    var hintButton = HintedButton;
                    HintButton(TrialCancelled ? 1 : 2);
                    var trial = _trial;
                    _trial          = null;
                    trial.Cancelled = TrialCancelled;
                    trial.EndTime   = CurrentTime;
                    if (_p300Detector != null)
                    {
                        _p300Detector.Actived = false;
                    }
                    if (!trial.Cancelled && ComputeTrialResult(_activedButtons,
                                                               _p300Detector == null ? null : (Func <int>)_p300Detector.Compute,
                                                               hintButton, out var button, out var correct))
                    {
                        trial.Correct = correct;
                        if (button == null)
                        {
                            SystemSounds.Exclamation.Play();
                        }
                        else
                        {
                            trial.SelectedButton = new SpellerExperiment.Result.Button(button.Key);
                        }
                    }
                    CheckStop();
                    Result.Trials.Add(trial);
                    TrialTrigger?.Reset();
                    break;
                }

                case SpellerMarkerDefinitions.SubTrialMarker:
                {
                    var activedButtons      = _activedButtons;
                    var randomBoolSequences = _randomBoolSequences;
                    if (activedButtons != null)
                    {
                        var flags = new bool[activedButtons.Length];
                        for (var i = 0; i < activedButtons.Length; i++)
                        {
                            var button = activedButtons[i];
                            if (button != null)
                            {
                                button.State = (flags[i] = randomBoolSequences[i].Next()) ? 1 : 0;
                            }
                        }
                        _trial.SubTrials.Add(new P300Trial.SubTrial {
                                Timestamp = CurrentTime, Flags = flags
                            });
                    }
                    break;
                }
                }
            }
        }
示例#9
0
 private void OnNewObjectMarked(Markable _markable)
 {
     StartCoroutine(AddToScore(_markable.pointsForMarking));
 }
示例#10
0
        protected override void OnNextStage(StageChangedEventArgs e)
        {
            var stage = e.Stage;

            DisplayText  = stage.Cue?.Trim();
            SubtitleText = stage.Subtitle?.Trim();

            if (stage.Marker != null)
            {
                /* Record marker */
                Markable?.Mark(stage.Marker.Value);

                var sessionTime = Session.SessionTime;

                /* Handle events */
                switch (stage.Marker)
                {
                case MarkerDefinitions.BaselineStartMarker:
                    if (_hybridSsvepIdentifier != null)
                    {
                        _initializer = _hybridSsvepIdentifier?.CreateInitializer();
                        _biosignalStreamer.AttachConsumer(_initializer);
                    }
                    break;

                case MarkerDefinitions.BaselineEndMarker:
                    if (_initializer != null)
                    {
                        _biosignalStreamer.DetachConsumer(_initializer);
                        _initializer.Initialize();
                        _initializer = null;
                    }
                    SpellerController.CalibrationComplete();
                    break;

                case MarkerDefinitions.ParadigmStartMarker:
                    Result.ParadigmStartTime = sessionTime;
                    ParadigmStarted          = true;
                    SpellerController.Start();
                    HintButton();
                    break;

                case MarkerDefinitions.ParadigmEndMarker:
                    Result.ParadigmEndTime = sessionTime;
                    break;

                case MarkerDefinitions.TrialStartMarker:
                {
                    var trial = new SsvepTrial {
                        TargetFrequencyIndex = HintedButton?.State
                    };
                    var activedButtons = _activedButtons = UpdateCursor(GazePointHandler.CurrentPosition);
                    if (activedButtons != null)
                    {
                        var buttons = new LinkedList <SpellerParadigm.Result.Button>();
                        foreach (var activedButton in activedButtons)
                        {
                            if (activedButton != null)
                            {
                                buttons.AddLast(new SsvepButton(activedButton.Key, activedButton.State));
                            }
                        }
                        trial.ActivedButtons = buttons;
                    }
                    trial.StartTime = CurrentTime;
                    _trial          = trial;
                    if (_hybridSsvepIdentifier != null)
                    {
                        _hybridSsvepIdentifier.IsActive = true;
                    }
                    SelectedButton = null;
                    DisplayText    = null;
                    TrialCancelled = false;
                    break;
                }

                case MarkerDefinitions.TrialEndMarker:
                {
                    var hintButton = HintedButton;
                    if (Paradigm.Config.Test.AlwaysCorrectFeedback)
                    {
                        SelectedButton           = hintButton;
                        SelectionFeedbackCorrect = true;
                    }
                    HintButton(TrialCancelled ? 1 : 2);
                    var trial = _trial;
                    _trial          = null;
                    trial.Cancelled = TrialCancelled;
                    trial.EndTime   = CurrentTime;
                    if (_hybridSsvepIdentifier != null)
                    {
                        _hybridSsvepIdentifier.IsActive = false;
                    }
                    if (!trial.Cancelled && ComputeTrialResult(_activedButtons,
                                                               _hybridSsvepIdentifier == null ? null : (Func <IdentificationResult>)_hybridSsvepIdentifier.Identify,
                                                               hintButton, out var button, out var correct))
                    {
                        trial.Correct = correct;
                        if (button != null)
                        {
                            trial.SelectedFrequencyIndex = button.State;
                            trial.SelectedButton         = new SsvepButton(button.Key, button.State);
                        }
                        else if (!Paradigm.Config.Test.AlwaysCorrectFeedback)
                        {
                            SystemSounds.Exclamation.Play();
                        }
                    }
                    CheckStop();
                    Result.Trials.Add(trial);
                    TrialTrigger?.Reset();
                    break;
                }
                }
            }
        }
示例#11
0
 public void Fire_EVT_MarkedNewObject(Markable _markedObject)
 {
     EVT_MarkedNewObject(_markedObject);
 }