Ejemplo n.º 1
0
        public Neuron(ProcessorContainer pc)
        {
            if (pc == null)
            {
                throw new ArgumentNullException();
            }
            if (pc.Count > char.MaxValue)
            {
                throw new ArgumentException();
            }

            _procNames = new Dictionary <char, char>(pc.Count);
            ProcessorHandler ph = new ProcessorHandler();
            StringBuilder    sb = new StringBuilder(pc.Count);

            for (char k = char.MinValue; k < pc.Count; ++k)
            {
                if (!ph.Add(ProcessorHandler.RenameProcessor(pc[k], new string(k, 1))))
                {
                    continue;
                }
                char c = char.ToUpper(pc[k].Tag[0]);
                _procNames[c] = k;
                sb.Append(c);
            }

            _processorContainer = ph.Processors;
            _workReflex         = new Reflex(_processorContainer);
            _stringQuery        = sb.ToString();
        }
Ejemplo n.º 2
0
        public Neuron(ProcessorContainer pc)
        {
            ProcessorHandler ph = FromProcessorContainer(pc);

            _workReflex = new Reflex(ph.Processors);
            _procNames  = ph.ToHashSet();
            _stringOriginalUniqueQuery = ph.ToString();
        }
Ejemplo n.º 3
0
        public void Test1()
        {
            ProcessorHandler ph = new ProcessorHandler();

            Assert.AreEqual(true, ph.IsEmpty);
            Assert.AreEqual(0, ph.Count);

            bool bex = false;

            try
            {
                ProcessorContainer unused = ph.Processors;
            }
            catch (Exception ex)
            {
                Assert.AreEqual(typeof(Exception), ex.GetType());
                Assert.AreEqual($"{nameof(ProcessorHandler)}: Список карт пуст.", ex.Message);
                bex = true;
            }

            Assert.AreEqual(true, bex);

            ph.Add(new Processor(new[] { new SignValue(2) }, "A"));

            Assert.AreEqual(false, ph.IsEmpty);
            Assert.AreEqual(1, ph.Count);

            ph.AddRange(new[] { new Processor(new[] { new SignValue(3) }, "b"), new Processor(new[] { new SignValue(4) }, "C") });

            Assert.AreEqual(false, ph.IsEmpty);
            Assert.AreEqual(3, ph.Count);

            ProcessorContainer procs = ph.Processors;

            Assert.AreNotEqual(null, procs);
            Assert.AreEqual(new SignValue(2), procs[0][0, 0]);
            Assert.AreEqual("A", procs[0].Tag);
            Assert.AreEqual(new SignValue(3), procs[1][0, 0]);
            Assert.AreEqual("b", procs[1].Tag);
            Assert.AreEqual(new SignValue(4), procs[2][0, 0]);
            Assert.AreEqual("C", procs[2].Tag);
            Assert.AreEqual(3, procs.Count);

            string       str   = ph.ToString();
            const string myStr = "AbC";

            Assert.AreEqual(myStr, str);
            HashSet <char> chs = ph.ToHashSet();

            Assert.AreNotEqual(null, chs);
            HashSet <char> chj = new HashSet <char>(myStr);

            Assert.AreNotEqual(null, chj);
            Assert.AreEqual(true, chs.SetEquals(chj));
        }
Ejemplo n.º 4
0
 public MigrationEngineCore(IHost host, ILogger <MigrationEngineCore> log, ITelemetryLogger telemetry, IEngineConfigurationBuilder configBuilder)
 {
     _Host          = host;
     _Log           = log;
     _Telemetry     = telemetry;
     _Config        = configBuilder.BuildFromFile();
     _witdContainer = _Host.Services.GetRequiredService <TypeDefinitionMapContainer>();
     _pContainer    = _Host.Services.GetRequiredService <ProcessorContainer>();
     _grmContainer  = _Host.Services.GetRequiredService <GitRepoMapContainer>();
     ProcessConfiguration();
 }
Ejemplo n.º 5
0
 public void SetProcessor(EEGProcessor processor, bool create)
 {
     if (processorContainer == null && create)
     {
         GameObject go = new GameObject();
         processorContainer = go.AddComponent <ProcessorContainer> ();
     }
     if (processorContainer != null)
     {
         processorContainer.processor = processor;
     }
 }
Ejemplo n.º 6
0
        static ProcessorContainer CopyContainer(ProcessorContainer pc)
        {
            if (pc == null)
            {
                throw new ArgumentNullException();
            }
            ProcessorContainer copy = new ProcessorContainer(pc[0]);

            for (int k = 1; k < pc.Count; k++)
            {
                copy.Add(pc[k]);
            }
            return(copy);
        }
 public MigrationEngine(EngineConfiguration config,
                        TypeDefinitionMapContainer typeDefinitionMaps,
                        ProcessorContainer processors,
                        GitRepoMapContainer gitRepoMaps,
                        ChangeSetMappingContainer changeSetMapps,
                        ITelemetryLogger telemetry)
 {
     Log.Information("Creating Migration Engine {Guid}", _Guid);
     TypeDefinitionMaps = typeDefinitionMaps;
     Processors         = processors;
     GitRepoMaps        = gitRepoMaps;
     ChangeSetMapps     = changeSetMapps;
     Telemetry          = telemetry;
     ProcessConfiguration(config);
 }
Ejemplo n.º 8
0
        static ProcessorHandler FromProcessorContainer(ProcessorContainer pc)
        {
            if (pc == null)
            {
                throw new ArgumentNullException();
            }

            ProcessorHandler ph = new ProcessorHandler();

            for (int k = 0; k < pc.Count; k++)
            {
                ph.Add(pc[k]);
            }

            return(ph);
        }
        public void ProcessorContainerTest()
        {
            var config     = CreateEngineConfiguration();
            var testSimple = new SimpleProcessorConfigMock();

            Assert.AreEqual(0, config.Processors.Count);

            testSimple.Enabled = true;
            config.Processors.Add(testSimple);

            Assert.AreEqual(1, config.Processors.Count);

            var processorContainer = new ProcessorContainer(CreateServiceProvider(), config);

            Assert.AreEqual(1, processorContainer.Count);
        }
        static void CheckProcessorHandler2(ProcessorHandler ph)
        {
            Assert.AreNotEqual(null, ph);

            ProcessorContainer procs = new ProcessorContainer(ph.Processors.ToArray());

            Assert.AreNotEqual(null, procs);
            Assert.AreEqual(procs.Width, 1);
            Assert.AreEqual(procs.Height, 1);
            Assert.AreEqual(3, procs.Count);
            Assert.AreEqual(new SignValue(2), procs[0][0, 0]);
            Assert.AreEqual("A", procs[0].Tag);
            Assert.AreEqual(new SignValue(3), procs[1][0, 0]);
            Assert.AreEqual("b", procs[1].Tag);
            Assert.AreEqual(new SignValue(4), procs[2][0, 0]);
            Assert.AreEqual("C", procs[2].Tag);
            Assert.AreEqual("ABC", ph.ToString());
        }
Ejemplo n.º 11
0
        /// <summary>
        ///     Инициализирует текущий экземпляр <see cref="DynamicReflex" /> картами из указанного экземпляра
        ///     <see cref="ProcessorContainer" />.
        ///     Карты предназначены для вызова <see cref="DynamicParser.Processor.GetEqual(ProcessorContainer)" />.
        ///     Этот список невозможно изменить вручную, в процессе работы с классом.
        /// </summary>
        /// <param name="processors">
        ///     Карты, которые необходимо добавить в текущий экземпляр <see cref="DynamicReflex" />.
        ///     С помощью них будет проводиться поиск запрашиваемых данных.
        /// </param>
        public DynamicReflex(ProcessorContainer processors)
        {
            if (processors == null)
            {
                throw new ArgumentNullException(nameof(processors), $"{nameof(DynamicReflex)}: Карты должны быть добавлены в контекст (null).");
            }

            Processor[] procs = new Processor[processors.Count];

            for (int k = 0; k < procs.Length; k++)
            {
                Processor p = processors[k];
                _setChars.Add(char.ToUpper(p.Tag[0]));
                procs[k] = p;
            }

            _seaProcessors = new ProcessorContainer(procs);
        }
Ejemplo n.º 12
0
 /// <summary>
 ///     Добавляет карты в коллекцию, проверяя их на предмет совпадающих значений свойств <see cref="Processor.Tag" />.
 ///     Добавление производится в общую коллекцию для ускорения поиска.
 /// </summary>
 /// <param name="pc">Коллекция добавляемых карт.</param>
 protected void CopyProcessorContainer(ProcessorContainer pc)
 {
     if (pc == null)
     {
         throw new ArgumentNullException(nameof(pc),
                                         $"{nameof(CopyProcessorContainer)}: Коллекция добавляемых карт отсутствует (null).");
     }
     for (int k = 0; k < pc.Count; k++)
     {
         Processor p   = pc[k];
         char      tag = char.ToUpper(p.Tag[0]);
         if (_processors.ContainsKey(tag))
         {
             throw new ArgumentException(
                       $"{nameof(CopyProcessorContainer)}: Обнаружены повторяющиеся карты: карта с таким названием ({tag}) уже была добавлена.",
                       nameof(pc));
         }
         _processors[tag] = p;
     }
 }
 public MigrationEngine(
     IServiceProvider services,
     ExecuteOptions executeOptions,
     EngineConfiguration config,
     TypeDefinitionMapContainer typeDefinitionMaps,
     ProcessorContainer processors,
     GitRepoMapContainer gitRepoMaps,
     ChangeSetMappingContainer changeSetMapps,
     FieldMapContainer fieldMaps,
     ITelemetryLogger telemetry)
 {
     Log.Information("Creating Migration Engine {Guid}", _Guid);
     _services           = services;
     FieldMaps           = fieldMaps;
     this.executeOptions = executeOptions;
     TypeDefinitionMaps  = typeDefinitionMaps;
     Processors          = processors;
     GitRepoMaps         = gitRepoMaps;
     ChangeSetMapps      = changeSetMapps;
     Telemetry           = telemetry;
     Config = config;
 }
 public MigrationEngine(
     IServiceProvider services,
     IOptions <NetworkCredentialsOptions> networkCredentials,
     EngineConfiguration config,
     TypeDefinitionMapContainer typeDefinitionMaps,
     ProcessorContainer processors,
     GitRepoMapContainer gitRepoMaps,
     ChangeSetMappingContainer changeSetMapps,
     FieldMapContainer fieldMaps,
     ITelemetryLogger telemetry)
 {
     Log.Information("Creating Migration Engine {SessionId}", telemetry.SessionId);
     _services           = services;
     FieldMaps           = fieldMaps;
     _networkCredentials = networkCredentials.Value;
     TypeDefinitionMaps  = typeDefinitionMaps;
     Processors          = processors;
     GitRepoMaps         = gitRepoMaps;
     ChangeSetMapps      = changeSetMapps;
     Telemetry           = telemetry;
     Config = config;
 }
Ejemplo n.º 15
0
        /// <summary>
        ///     Инициализирует текущий экземпляр класса, добавляя указанные карты в коллекцию класса, создавая её копию. Массив
        ///     <see cref="ProcessorContainer" /> не может быть пустым или равен <see langword="null" />.
        ///     Производится проверка на отсутствие карт с одинаковыми значениями свойств <see cref="Processor.Tag" />, также
        ///     необходимо, чтобы все объекты <see cref="ProcessorContainer" /> были одинакового размера.
        ///     Количество карт в объектах <see cref="ProcessorContainer" /> должно быть не менее двух, а их свойства
        ///     <see cref="Processor.Tag" /> состояли не более, чем из одного символа.
        ///     Объекты <see cref="ProcessorContainer" /> не могут быть равны <see langword="null" />.
        /// </summary>
        /// <param name="processors">Карты, которые требуется распознать.</param>
        public Reflector(ProcessorContainer[,] processors)
        {
            if (!IsOneSize(processors))
            {
                throw new ArgumentException(
                          $"{nameof(Reflector)}: Искомые карты не прошли проверку на размер и/или количество карт в массиве, а также на значение null или значение свойства {nameof(Processor.Tag)}.",
                          nameof(processors));
            }
            int lx = processors.GetLength(0), ly = processors.GetLength(1);

            _processorContainers = new ProcessorContainer[lx, ly];
            for (int y = 0; y < ly; y++)
            {
                for (int x = 0; x < lx; x++)
                {
                    ProcessorContainer pc = processors[x, y];
                    _processorContainers[x, y] = CopyContainer(pc);
                    CopyProcessorContainer(pc);
                }
            }
            MapHeight = processors[0, 0].Height;
            MapWidth  = processors[0, 0].Width;
        }
Ejemplo n.º 16
0
        /// <summary>
        ///     Возвращает все варианты запросов для распознавания какой-либо карты.
        /// </summary>
        /// <param name="processors">Массив карт для чтения первых символов их названий. Остальные символы игнорируются.</param>
        /// <returns>Возвращает все варианты запросов для распознавания какой-либо карты.</returns>
        protected static IEnumerable <char[, ]> Matrixes(ProcessorContainer[,] processors)
        {
            if (processors == null)
            {
                throw new ArgumentNullException(nameof(processors), $"{nameof(Matrixes)}: Массив карт равен null.");
            }
            int mx = processors.GetLength(0), my = processors.GetLength(1);

            if (mx <= 0)
            {
                throw new ArgumentException($"{nameof(Matrixes)}: Массив карт пустой (ось X).", nameof(processors));
            }
            if (my <= 0)
            {
                throw new ArgumentException($"{nameof(Matrixes)}: Массив карт пустой (ось Y).", nameof(processors));
            }
            int[] count = new int[processors.Length];
            do
            {
                char[,] ch = new char[mx, my];
                for (int y = 0, cy = my - 1; y < my; y++, cy--)
                {
                    for (int x = 0, cx = mx - 1; x < mx; x++, cx--)
                    {
                        ProcessorContainer pc = processors[x, y];
                        if (pc == null)
                        {
                            throw new ArgumentNullException(nameof(processors),
                                                            $"{nameof(Matrixes)}: Элемент массива карт отсутствует (null).");
                        }
                        ch[x, y] = pc[count[cy * mx + cx]].Tag[0];
                    }
                }
                yield return(ch);
            } while (ChangeCount(count, processors));
        }
Ejemplo n.º 17
0
        /// <summary>
        ///     Выполняет проверку указанного массива объектов <see cref="ProcessorContainer" /> без их изменения.
        ///     Необходимо, чтобы все объекты <see cref="ProcessorContainer" /> были одинакового размера. Массив
        ///     <see cref="ProcessorContainer" /> не может быть пустым или равен <see langword="null" />.
        ///     Количество карт в каждом объекте <see cref="ProcessorContainer" /> должно быть не менее двух, а их свойства
        ///     <see cref="Processor.Tag" /> состояли не более, чем из одного символа.
        ///     Объекты <see cref="ProcessorContainer" /> не могут быть равны <see langword="null" />.
        /// </summary>
        /// <param name="processors">Проверяемые карты.</param>
        /// <returns>
        ///     В случае успеха возвращает значение <see langword="true" />, в противном случае возвращает значение
        ///     <see langword="false" />.
        /// </returns>
        protected static bool IsOneSize(ProcessorContainer[,] processors)
        {
            if (processors == null)
            {
                throw new ArgumentNullException(nameof(processors),
                                                $"{nameof(IsOneSize)}: Проверяемые карты отсутствуют (null).");
            }
            if (processors.GetLength(0) <= 0)
            {
                throw new ArgumentException($"{nameof(IsOneSize)}: Массив проверяемых карт пустой (ось X).",
                                            nameof(processors));
            }
            if (processors.GetLength(1) <= 0)
            {
                throw new ArgumentException($"{nameof(IsOneSize)}: Массив проверяемых карт пустой (ось Y).",
                                            nameof(processors));
            }
            ProcessorContainer fpc = processors[0, 0];

            if (fpc == null)
            {
                throw new ArgumentNullException(nameof(processors),
                                                $"{nameof(IsOneSize)}: Первый проверяемый массив карт равен null.");
            }
            if (fpc.Count < 2)
            {
                throw new ArgumentException(
                          $"{nameof(IsOneSize)}: В первом проверяемом массиве менее двух карт ({fpc.Count}).",
                          nameof(processors));
            }
            int cx = fpc.Width;
            int cy = fpc.Height;

            for (int y = 0, my = processors.GetLength(1); y < my; y++)
            {
                for (int x = 0, mx = processors.GetLength(0); x < mx; x++)
                {
                    ProcessorContainer pc = processors[x, y];
                    if (pc == null)
                    {
                        throw new ArgumentNullException(nameof(processors),
                                                        $"{nameof(IsOneSize)}: Обнаружен контейнер, равный null.");
                    }
                    if (pc.Count < 2)
                    {
                        throw new ArgumentException(
                                  $"{nameof(IsOneSize)}: Обнаружен контейнер, в котором менее двух карт ({pc.Count}).",
                                  nameof(processors));
                    }
                    for (int k = 0; k < pc.Count; k++)
                    {
                        if (pc[k].Tag.Length != 1)
                        {
                            throw new ArgumentException(
                                      $"{nameof(IsOneSize)}: Обнаружен контейнер, в котором название карты состоит более или менее, чем из одного символа ({pc[k].Tag.Length}): ({pc[k].Tag}).",
                                      nameof(processors));
                        }
                    }
                    if (pc.Width != cx || pc.Height != cy)
                    {
                        return(false);
                    }
                }
            }
            return(true);
        }
Ejemplo n.º 18
0
    // Update is called once per frame
    void Update()
    {
        if (!started)
        {
            processorContainer = FindObjectOfType <ProcessorContainer> ();
            if ((processorContainer != null && processorContainer.processor != null))
            {
                EEGManager.Instance.Processor = processorContainer.processor;
                EEGManager.Instance.Trained   = true;
                Status = GameStatus.Playing;
            }
            else
            {
                Status = GameStatus.Training;
            }

            started = true;
        }

        switch (status)
        {
        case GameStatus.Playing:
            if (Input.GetKeyDown(KeyCode.P))
            {
                Status = GameStatus.Paused;
                return;
            }

            if (player.health <= 0)
            {
                Status = GameStatus.GameOver;
                return;
            }

            EyesStatus status = EEGManager.Instance.Status;

            if (status == EyesStatus.CLOSED)
            {
                if (previousStatus == EyesStatus.OPEN)
                {
                    visibilityOn = false;
                    foreach (OutlineObject visibleObject in activeObjects)
                    {
                        visibleObject.Outline = false;
                    }
                    inactiveObjects.UnionWith(activeObjects);
                    activeObjects.Clear();
                }

                visibilityTime += Time.deltaTime;

                if (checkingTimer.Finished)
                {
                    checkingTimer.Reset();
                    foreach (Bomb bomb in bombs)
                    {
                        float distance = Vector3.Distance(player.transform.position, bomb.transform.position);
                        if (distance <= hearingDistance)
                        {
                            if (!activeBombs.Contains(bomb))
                            {
                                bomb.PlayBeepSound();
                                activeBombs.Add(bomb);
                            }
                        }
                        else
                        {
                            if (activeBombs.Contains(bomb))
                            {
                                activeBombs.Remove(bomb);
                                bomb.StopPlaying();
                            }
                        }
                    }

                    foreach (OutlineObject inactiveObject in inactiveObjects)
                    {
                        float distance = Vector3.Distance(player.transform.position, inactiveObject.transform.position);
                        if (distance <= hearingDistance)
                        {
                            activeObjects.Add(inactiveObject);
                        }
                    }

                    inactiveObjects.RemoveWhere(x => activeObjects.Contains(x));
                }
            }
            else
            {
                foreach (Bomb bomb in activeBombs)
                {
                    bomb.StopPlaying();
                }
                activeBombs.Clear();

                if (previousStatus == EyesStatus.CLOSED)
                {
                    visibilityTimer = new CounterTimer(Mathf.Min(visibilityTime + EEGManager.Instance.minThreshold, maxVisibilityDuration));
                    foreach (OutlineObject activeObject in activeObjects)
                    {
                        activeObject.Outline = true;
                    }
                    visibilityOn = true;
                }
                else
                {
                    if (visibilityOn && visibilityTimer.Finished)
                    {
                        visibilityOn = false;
                        foreach (OutlineObject activeObject in activeObjects)
                        {
                            activeObject.Outline = false;
                        }
                        inactiveObjects.UnionWith(activeObjects);
                        activeObjects.Clear();
                    }
                }

                if (visibilityOn)
                {
                    visibilityTimer.Update(Time.deltaTime);
                }

                visibilityTime = 0;
            }

            previousStatus = status;
            checkingTimer.Update(Time.deltaTime);
            break;

        case GameStatus.Paused:
            if (Input.GetKeyDown(KeyCode.P))
            {
                Status = GameStatus.Playing;
                return;
            }
            break;

        case GameStatus.Training:
            if (Input.GetKey(KeyCode.K))
            {
                EEGManager.Instance.StopTraining();
            }
            break;

        default:

            break;
        }
    }