Example #1
0
        private PatternInfo GetOrCreatePatternInfo(int id, object provider,
                                                   string path,
                                                   CreateWrapperFromProvider wrapperCreator)
        {
            PatternInfo oldInfo;

            if (patternMapping.TryGetValue(id, out oldInfo))
            {
                if (oldInfo.Provider == provider)
                {
                    return(oldInfo);
                }
            }

            object      wrapper = wrapperCreator(provider);
            PatternInfo newInfo = new PatternInfo {
                Path            = path,
                Provider        = provider,
                ProviderWrapper = wrapper
            };

            patternMapping [id] = newInfo;
            bus.Register(new ObjectPath(path), wrapper);

            return(newInfo);
        }
Example #2
0
        public CompiledPeg Compile(Pattern StartPattern)
        {
            var patternInfo    = PatternInfo.Build(StartPattern);
            var patternIndices = new Dictionary <Pattern, int>();

            var compiledPatterns  = new List <Method>();
            var patternsToCompile = new List <Pattern>();

            compiledPatterns.Add(null);
            patternIndices[StartPattern] = 0;
            patternsToCompile.Add(StartPattern);

            foreach (var pattern in patternInfo.Keys)
            {
                if (pattern != StartPattern)
                {
                    var patternId = patternIndices[pattern] = compiledPatterns.Count;
                    compiledPatterns.Add(null);
                    patternsToCompile.Add(pattern);
                }
            }

            foreach (var pattern in patternsToCompile)
            {
                compiledPatterns[patternIndices[pattern]] = CompilePattern(pattern, patternInfo, patternIndices);
            }

            return(new CompiledPeg(compiledPatterns, 0));
        }
Example #3
0
        public bool LoadPatternInfo(string programPath)
        {
            Stream fstream = null;

            try
            {
                string extension = Path.GetExtension(programPath);
                if (extension != ".pattern")
                {
                    MessageBox.Show("请确认打开的是后缀为pattern的文件");
                    return(false);
                }
                fstream = new FileStream(programPath, FileMode.Open, FileAccess.Read);
                BinaryFormatter binFormat = new BinaryFormatter();
                this.currPInfo = (PatternInfo)binFormat.Deserialize(fstream);
                return(true);
            }
            catch (Exception e)
            {
                //throw e;
                return(false);
            }
            finally
            {
                if (fstream != null)
                {
                    fstream.Close();
                }
            }
        }
        public Pattern GeneratePatternFromStruct(PatternInfo pInfo)
        {
            Pattern pattern = new Pattern();

            pattern.mAcceleration = pInfo.Acceleration;
            pattern.mSpeed        = pInfo.Speed;

            pattern.mArrayNumber     = pInfo.ArrayNumber;
            pattern.mBulletsPerArray = pInfo.BulletsPerArray;

            pattern.mDirectionAngle = pInfo.DirectionAngle;
            pattern.mFireRate       = pInfo.FireRate;
            pattern.mHitBox         = new Rectangle(pInfo.HitBox[0],
                                                    pInfo.HitBox[1],
                                                    pInfo.HitBox[2],
                                                    pInfo.HitBox[3]);
            pattern.mIndvArraySpread  = pInfo.IndividualArraySpread;
            pattern.mTotalArraySpread = pInfo.TotalArraySpread;

            pattern.mRotationSpeed      = pInfo.RotationSpeed;
            pattern.mRotationSpeedDelta = pInfo.RotationSpeedDelta;
            pattern.mMaxRotationSpeed   = pInfo.MaxRotationSpeed;
            pattern.mBoundedRotation    = pInfo.BoundedRotation;
            pattern.mMaxRotation        = pInfo.MaxRotation;
            pattern.mMinRotation        = pInfo.MinRotation;
            pattern.mFlipRotation       = pInfo.FlipRotation;

            pattern.SetBulletSpawner(mGameBulletSpawnerPtr);

            pattern.mBulletType  = pInfo.BulletType;
            pattern.mBulletColor = pInfo.BulletColor;
            pattern.mDirectional = pInfo.Directional;

            return(pattern);
        }
Example #5
0
        private static PatternInfo GetPatternDescriptionInfo(IElement root)
        {
            // Pattern info
            var patternInfo   = new PatternInfo();
            var infoContainer = root.QuerySelector("div.set__info") as IHtmlDivElement;

            if (infoContainer != null && !string.IsNullOrEmpty(infoContainer.InnerText))
            {
                var lines = infoContainer.InnerText.Split(new[] { '.' }, StringSplitOptions.RemoveEmptyEntries);
                if (lines.Length >= 2)
                {
                    patternInfo.Title       = lines[0];
                    patternInfo.Description = infoContainer.InnerText.Replace(patternInfo.Title, string.Empty).TrimStart('.', ' ', '\n');
                }
                if (lines.Length == 1)
                {
                    var singleLine = lines[0];
                    if (singleLine.ToLowerInvariant().Contains("размер"))
                    {
                        patternInfo.Description = singleLine;
                    }
                    else
                    {
                        patternInfo.Title = singleLine;
                    }
                }
            }

            return(patternInfo);
        }
Example #6
0
 /// <summary>
 /// Initializes a new instance of the <see cref="BytesFinder"/> class for the specified bytes pattern.
 /// </summary>
 /// <param name="pattern">The bytes pattern to seek.</param>
 /// <exception cref="ArgumentException"><paramref name="pattern"/> is null or empty.</exception>
 public BytesFinder(byte[] pattern)
 {
     if (pattern == null || pattern.Length == 0)
     {
         throw new ArgumentException("pattern is null or empty.", nameof(pattern));
     }
     _mPattInfo = new PatternInfo(pattern);
 }
Example #7
0
 /// <summary>
 /// Initializes a new instance of the <see cref="BytesFinder"/> class for the specified <see cref="string"/> pattern.
 /// </summary>
 /// <param name="pattern">The <see cref="string"/> pattern to seek.</param>
 /// <exception cref="ArgumentNullException"><paramref name="pattern"/> is null.</exception>
 /// <exception cref="FormatException">
 /// The length of <paramref name="pattern"/> is 0 or not equal to this value division by 2.
 /// <para>- Or -</para>
 /// Unexpected char in <paramref name="pattern"/>.
 /// </exception>
 public BytesFinder(string pattern)
 {
     if (pattern == null)
     {
         throw new ArgumentNullException(nameof(pattern), "pattern is null.");
     }
     _mPattInfo = new PatternInfo(pattern.Replace(" ", string.Empty)); //remove placeholder
 }
        public void Assert_ReturnOneIf100()
        {
            PatternInfo info = m_lib.GetPatternInfo(100, 100);

            Assert.AreEqual(1, info.patternCount);
            Assert.AreEqual("O", info.defaultMode);
            Assert.AreEqual("H", info.alternateMode);
        }
Example #9
0
    public static PatternInfo getRandomPattern()
    {
        PatternInfo info = new PatternInfo();

        //  for simplify, NumElementsPerLine must be multiplied by width and height of array
        info.NumElementsPerBlock = 4;
        info.PatternData         = generateRandomPattern();// pattern1;
        return(info);
    }
Example #10
0
            public PatternInfo Build()
            {
                var result = new PatternInfo();

                result.BarsCount    = GetValueOrFail(barsCount, nameof(barsCount));
                result.BeatsPerBar  = GetValueOrFail(beatsPerBar, nameof(beatsPerBar));
                result.SuggestedBpm = GetValueOrFail(suggestedBpm, nameof(suggestedBpm));
                result.UnitsPerBeat = GetValueOrFail(unitsPerBeat, nameof(unitsPerBeat));
                return(result);
            }
Example #11
0
        private void PerformUnregisterPattern(PatternInfo info)
        {
            bus.Unregister(new ObjectPath(info.Path));
            var disposable = info.ProviderWrapper as IDisposable;

            if (disposable != null)
            {
                disposable.Dispose();
            }
        }
Example #12
0
 /// <summary>
 /// Reports the zero-based index of the first occurrence of the specified pattern in the specified bytes source.
 /// The search starts at the specified position and examines a specified number of <see cref="byte"/> positions.
 /// </summary>
 /// <param name="source">The bytes to search for an occurrence.</param>
 /// <param name="pattern">The bytes pattern to seek.</param>
 /// <param name="startIndex">The search starting position.</param>
 /// <param name="count">The number of <see cref="byte"/> positions to examine.</param>
 /// <returns>The zero-based index position of the occurrence if the <paramref name="pattern"/> is found, otherwise, -1.</returns>
 /// <exception cref="ArgumentException">
 /// <paramref name="source"/> is null or empty.
 /// <para>- Or -</para>
 /// <paramref name="pattern"/> is null or empty.
 /// </exception>
 /// <exception cref="ArgumentOutOfRangeException">
 /// <paramref name="startIndex"/> is less than 0.
 /// <para>- Or -</para>
 /// <paramref name="startIndex"/> is greater than or equal to the length of <paramref name="source"/>.
 /// <para>- Or -</para>
 /// <paramref name="count"/> is less than or equal to 0.
 /// <para>- Or -</para>
 /// <paramref name="count"/> is greater than the length of source minus <paramref name="startIndex"/>.
 /// </exception>
 public static int FindIndex(byte[] source, byte[] pattern, int startIndex, int count)
 {
     if (pattern == null || pattern.Length == 0)
     {
         throw new ArgumentException("pattern is null or empty.", nameof(pattern));
     }
     Ensure_source_startIndex_count(source, startIndex, count);
     using (var pattInfo = new PatternInfo(pattern))
     {
         return(InnerFindIndex(source, in pattInfo, startIndex, count));
     }
 }
Example #13
0
 /// <summary>
 /// Reports the zero-based index of the first occurrence of the specified pattern in the specified bytes source.
 /// </summary>
 /// <param name="source">The bytes to search for an occurrence.</param>
 /// <param name="pattern">The bytes pattern to seek.</param>
 /// <returns>The zero-based index position of the occurrence if the <paramref name="pattern"/> is found, otherwise, -1.</returns>
 /// <exception cref="ArgumentException">
 /// <paramref name="source"/> is null or empty.
 /// <para>- Or -</para>
 /// <paramref name="pattern"/> is null or empty.
 /// </exception>
 public static int FindIndex(byte[] source, byte[] pattern)
 {
     if (source == null || source.Length == 0)
     {
         throw new ArgumentException("source is null or empty.", nameof(source));
     }
     if (pattern == null || pattern.Length == 0)
     {
         throw new ArgumentException("pattern is null or empty.", nameof(pattern));
     }
     using (var pattInfo = new PatternInfo(pattern))
     {
         return(InnerFindIndex(source, in pattInfo, 0, source.Length));
     }
 }
Example #14
0
        private void TranslateScript(XElement schSchema, OCLScript oclScript, TranslationSettings translationSettings,
                                     ref Dictionary <PSMClass, List <PatternInfo> > patterns)
        {
            OclCompilerResult compilerResult = oclScript.CompileToAst();

            compilerResult.CompileExpressionsInMessages();
            if (!compilerResult.Errors.HasError)
            {
                XComment comment = new XComment(string.Format("Below follow constraints from OCL script '{0}'. ", oclScript.Name));
                schSchema.Add(comment);

                foreach (ClassifierConstraintBlock classifierConstraintBlock in compilerResult.Constraints.ClassifierConstraintBlocks)
                {
                    PSMClass contextClass = (PSMClass)classifierConstraintBlock.Context.Tag;
                    patterns.CreateSubCollectionIfNeeded(contextClass);
                    string patternName = NameSuggestor <PatternInfo> .SuggestUniqueName(patterns[contextClass], contextClass.Name, p => p.PatternName, true, false);

                    PatternInfo patternInfo = new PatternInfo {
                        PatternName = patternName
                    };
                    XElement patternElement = schSchema.SchematronPattern(patternInfo.PatternName);
                    patterns[contextClass].Add(patternInfo);

                    bool abstractPattern = !contextClass.GeneralizationsAsGeneral.IsEmpty();

                    if (abstractPattern)
                    {
                        patternElement.AddAttributeWithValue("abstract", "true");
                    }

                    string context = !abstractPattern?contextClass.GetXPathFull(true).ToString() : "$" + classifierConstraintBlock.Self.Name;

                    XElement ruleElement = patternElement.SchematronRule(context);
                    patternInfo.ContextVariableName = classifierConstraintBlock.Self.Name;
                    if (!abstractPattern)
                    {
                        ruleElement.SchematronLet(patternInfo.ContextVariableName, @".");
                    }

                    TranslateInvariantsToXPath(classifierConstraintBlock, ruleElement, (PSMBridge)compilerResult.Bridge, translationSettings);
                }
            }
            else
            {
                XComment comment = new XComment(string.Format("OCL script '{0}' contains errors and thus can not be translated. ", oclScript.Name));
                schSchema.Add(comment);
            }
        }
        private void AssertReturnValueWhenTarget(decimal target, int populationSize, PatternInfo returnValue)
        {
            PatternInfo info = m_lib.GetPatternInfo(target, populationSize);

            Assert.AreEqual(returnValue.patternCount, info.patternCount);
            Assert.AreEqual(returnValue.defaultMode, info.defaultMode);
            Assert.AreEqual(returnValue.alternateMode, info.alternateMode);
            if (returnValue.defaultMode.Equals("O"))
            {
                Assert.IsTrue((1 / returnValue.patternCount) <= target);
            }
            else
            {
                Assert.IsTrue((1 - (1 / returnValue.patternCount)) <= target);
            }
        }
        public void Assert_ThrowErrorIfMoreThan100()
        {
            // when
            string error = "";

            try
            {
                PatternInfo info = m_lib.GetPatternInfo((decimal)100.01, 100);
            }
            catch (Exception ex)
            {
                error = ex.Message;
            }
            // then
            Assert.IsFalse(string.IsNullOrEmpty(error));
        }
Example #17
0
        public static Pattern GetRandomClothingPattern(Sim sim)
        {
            ResourceKey reskeyPattern;
            SewingSkill sewingSkill = sim.SkillManager.AddElement(SewingSkill.kSewingSkillGUID) as SewingSkill;

            do
            {
                reskeyPattern = RandomUtil.GetRandomObjectFromList(ObjectLoader.mStoredClothingPattern);

                if (!SewingSkill.HasAlreadyDiscoveredThis(sim.mSimDescription.mSimDescriptionId, reskeyPattern))
                {
                    break;
                }
            }while (true);

            if (reskeyPattern != ResourceKey.kInvalidResourceKey)
            {
                PatternInfo mPatternInfoInit = new PatternInfo();
                mPatternInfoInit.resKeyPattern = reskeyPattern;
                ObjectLoader.sewableSetting sSetting = ObjectLoader.dictSettings[reskeyPattern];
                mPatternInfoInit.fabricsNeeded          = sSetting.typeFabric;
                mPatternInfoInit.IsMagic                = sSetting.isMagicProject;
                mPatternInfoInit.amountOfFabricToRemove = sSetting.amountRemoveFabric;
                mPatternInfoInit.isClothing             = sSetting.isClothing;
                mPatternInfoInit.mClothingName          = sSetting.clothingName;
                mPatternInfoInit.mWasPatternGifted      = false;

                if (mPatternInfoInit.isClothing)
                {
                    mPatternInfoInit.mSimOutfit = new CASPart(mPatternInfoInit.resKeyPattern);
                }

                ResourceKey reskey1 = new ResourceKey(0x19D4F5930F26B2D8, 0x319E4F1D, 0x00000000);
                Pattern.PatternObjectInitParams initData = new Pattern.PatternObjectInitParams(mPatternInfoInit.fabricsNeeded, mPatternInfoInit.IsMagic, mPatternInfoInit.amountOfFabricToRemove, mPatternInfoInit.mSkilllevel, mPatternInfoInit.resKeyPattern, mPatternInfoInit.isClothing, mPatternInfoInit.mSimOutfit, mPatternInfoInit.mClothingName, mPatternInfoInit.mWasPatternGifted);
                Pattern pattern = (Pattern)GlobalFunctions.CreateObjectOutOfWorld(reskey1, null, initData);

                mPatternInfoInit.Name = mPatternInfoInit.mClothingName;
                pattern.NameComponent.SetName(mPatternInfoInit.mClothingName);

                pattern.mPatternInfo = mPatternInfoInit;
                sim.Inventory.TryToAdd(pattern);
                sewingSkill.AddPatternCount(1);

                return(pattern);
            }
            return(null);
        }
Example #18
0
        private static int GetNumberOfPatternsToGenerate()
        {
            ISchedulerLibrary lib = new SchedulerLibrary();

            PatternInfo pattern = lib.GetPatternInfo(m_target.Value, m_populationSize.Value);

            m_isDefaultWorkFromHome = pattern.defaultMode.Equals("H");
            m_default   = pattern.defaultMode;
            m_alternate = pattern.alternateMode;

            Console.WriteLine(string.Format("Number of patterns to generate : {0}", Math.Abs(pattern.patternCount)));
            Console.WriteLine(string.Format("Default working mode is (O for office, H for Home): {0}", m_default));
            decimal effective = m_isDefaultWorkFromHome ? (100 / Math.Abs(pattern.patternCount)) : 100 - (100 / pattern.patternCount);

            Console.WriteLine(string.Format("Max number of people in office will be : {0:N2}%", effective));
            return(Math.Abs(pattern.patternCount));
        }
Example #19
0
 public GridDrawer(Settings settings, PatternInfo patternInfo, int subdivisions, IInstrumentId[] instruments)
 {
     if (patternInfo.UnitsPerBeat.Index % subdivisions != 0)
     {
         throw new ArgumentException("Subdivision not compatible with pattern");
     }
     timeUnitWidth        = (int)Math.Round(settings.BeatWidth / (float)patternInfo.UnitsPerBeat.Index);
     settings.BeatWidth   = timeUnitWidth * patternInfo.UnitsPerBeat.Index;
     this.settings        = settings;
     this.info            = patternInfo;
     this.instruments     = instruments;
     this.subdivisions    = subdivisions;
     this.textPaint       = BuildInstrumentNamePaint();
     this.gridRect        = BuildGridRect();
     this.gridPaints      = BuildGridPaints();
     this.backgroundPaint = BuildBackgroudPaint();
 }
Example #20
0
        public static CrossStitchPatternModel Parse(IElement root, Uri uri)
        {
            var                       model        = new CrossStitchPatternModel();
            var                       id           = GetId(root, uri);
            ItemImage                 image        = GetImageInfo(root, uri);
            PatternAuthor             author       = GetAuthorInfo(root, id.ToString());
            PatternInfo               patternInfo  = GetPatternDescriptionInfo(root);
            PatternPrice              patternPrice = GetPriceInfo(root);
            PatternDistributionStatus status       = GetStatus(root, patternPrice);

            //
            model.PatternId = id;
            model.Image     = image;
            model.Author    = author;
            model.Info      = patternInfo;
            model.PriceInfo = patternPrice;
            model.Status    = status;
            return(model);
        }
Example #21
0
    IEnumerator RunPattern(PatternInfo pattern)
    {
        float elapstedTime = pattern.summonInterval;

        int Count = 0;

        while (pattern.data.Length > Count)
        {
            elapstedTime += Time.deltaTime;
            if (elapstedTime >= pattern.summonInterval)
            {
                SummonWindow(pattern.data[Count]);
                elapstedTime -= pattern.summonInterval;
                ++Count;
            }
            yield return(null);
        }

        yield return(new WaitForSeconds(pattern.coolTime));

        onPatternEnd?.Invoke();
    }
Example #22
0
        /// <summary>
        /// Associates a marker with an identifier so that the identifier can be used to find this
        /// marker after processing the image. 
        /// </summary>
        /// <param name="markerConfigs">A set of parameters that identifies a maker. (e.g., for
        /// ARTag, this parameter would be the marker array name or marker ID)</param>
        /// <returns>An identifier for this marker object</returns>
        public Object AssociateMarker(params Object[] markerConfigs)
        {
            // make sure we are initialized
            if (!initialized)
                throw new MarkerException("ARToolkitTracker is not initialized. Call InitTracker(...)");

            if (!(markerConfigs.Length == 2 || markerConfigs.Length == 5))
                throw new MarkerException(GetAssocMarkerUsage());

            MarkerInfo markerInfo = new MarkerInfo();

            if (markerConfigs.Length == 2)
            {
                string arrayName = "";
                ComputationMethod method = ComputationMethod.Average;

                try
                {
                    arrayName = (String)markerConfigs[0];
                    method = (ComputationMethod)markerConfigs[1];
                }
                catch (Exception)
                {
                    throw new MarkerException(GetAssocMarkerUsage());
                }

                ParseArray(arrayName, ref markerInfo);

                markerInfo.Method = method;
            }
            else
            {
                int pattWidth = 0, pattHeight = 0;
                float pattSize = 0, conf = 0;
                String pattName = "";

                try
                {
                    pattName = (String)markerConfigs[0];
                    pattWidth = (int)markerConfigs[1];
                    pattHeight = (int)markerConfigs[2];
                    pattSize = (float)markerConfigs[3];
                    conf = (float)markerConfigs[4];
                }
                catch (Exception)
                {
                    throw new MarkerException(GetAssocMarkerUsage());
                }

                NyARCode code = new NyARCode(pattWidth, pattHeight);
                code.loadARPatt(new System.IO.StreamReader(TitleContainer.OpenStream(pattName)));
                codes.Add(code);
                pattSizes.Add(pattSize);

                PatternInfo info = new PatternInfo();
                info.ConfidenceThreshold = conf;

                int id = codes.Count - 1;
                markerInfo.PatternInfos.Add(id, info);
                markerInfo.RelativeTransforms.Add(id, Matrix.Identity);
                markerInfo.Method = ComputationMethod.Average;

                markerInfoMap.Add(id, markerInfo);
            }

            markerInfoList.Add(markerInfo);

            // reinitialize the multi marker detector if the programmer adds new marker node
            // after the initialization phase
            if (started)
            {
                multiDetector = new MarkerDetector(param, codes.ToArray(), pattSizes.ToArray(),
                    codes.Count, raster.getBufferType());
                multiDetector.setContinueMode(continuousMode);
            }

            return markerInfo;
        }
Example #23
0
            private bool Match(DynamicBuffer <Pattern> pattern, ref PatternInfo patternInfo,
                               int2 gridPos, NativeArray <int> matchedBlocks)
            {
                var level        = levelBufferLookup[levelInfo.entity];
                var blockToMatch = level[MathHelpers.To1D(gridPos, levelInfo.size.x)];
                var height       = patternInfo.size.y;
                var width        = patternInfo.size.x;
                var matchAll     = true;
                var blockMatched = 0;

                for (int patternY = 0; patternY < height; ++patternY)
                {
                    for (int patternX = 0; patternX < width; ++patternX)
                    {
                        // First : loop on the pattern to get the position in the level
                        //			from which to start the pattern match

                        matchAll     = true;
                        blockMatched = 0;

                        var patternOffset = new int2(patternX, patternY);
                        var levelStart    = gridPos - patternOffset;

                        for (int levelY = 0; levelY < height; ++levelY)
                        {
                            for (int levelX = 0; levelX < width; ++levelX)
                            {
                                // Second : loop on the pattern and level at the same time to check if block match

                                var localPos = new int2(levelX, levelY);
                                var blockPos = levelStart + localPos;

                                if (blockPos.x < 0 || blockPos.x >= levelInfo.size.x ||
                                    blockPos.y < 0 || blockPos.y >= levelInfo.size.y
                                    )
                                {
                                    matchAll = false;
                                    break;
                                }

                                var levelBufferId = MathHelpers.To1D(blockPos, levelInfo.size.x);
                                var block         = level[levelBufferId];
                                var shouldMatch   = pattern[MathHelpers.To1D(localPos, width)].match;
                                var matchThis     = !shouldMatch || block.blockId == blockToMatch.blockId;

                                matchAll = matchAll && matchThis;

                                if (matchThis && shouldMatch)
                                {
                                    matchedBlocks[blockMatched] = levelBufferId + 1;
                                    blockMatched++;
                                }

                                // Debug.Log($"Pos : {blockPos} | Local : {localPos} | Should match ? {shouldMatch} | Match {blockToMatch.blockId} with {block.blockId} | Match this ? {matchThis} | All ? {matchAll}");

                                // TODO break early if no match
                            }
                        }

                        if (matchAll)
                        {
                            break;
                        }
                    }

                    if (matchAll)
                    {
                        break;
                    }
                }

                // Debug.Log($"Match ? {matchAll}");

                return(matchAll);
            }
Example #24
0
        private void ParseArray(string arrayName, ref MarkerInfo markerInfo)
        {
            XElement markerArray = XElement.Load(@"" + arrayName);

            int pattWidth = 0, pattHeight = 0;
            float pattSize = 0, conf = 0;
            String pattName = "";
            Vector3 upperLeftCorner = Vector3.Zero;
            string[] tmp = null;

            foreach (XElement markerElement in markerArray.Elements("marker"))
            {
                try
                {
                    pattName = markerElement.Attribute("patternName").Value;
                    pattWidth = int.Parse(markerElement.Attribute("patternWidth").Value);
                    pattHeight = int.Parse(markerElement.Attribute("patternHeight").Value);
                    pattSize = float.Parse(markerElement.Attribute("patternSize").Value);
                    conf = float.Parse(markerElement.Attribute("confidence").Value);
                    tmp = markerElement.Attribute("upperLeftCorner").Value.Split(',');
                    upperLeftCorner.X = -float.Parse(tmp[0]);
                    upperLeftCorner.Y = float.Parse(tmp[1]);
                }
                catch (Exception exp)
                {
                    throw new MarkerException("Wrong marker array format: " + exp.Message);
                }

                NyARCode code = new NyARCode(pattWidth, pattHeight);
                code.loadARPatt(new System.IO.StreamReader(TitleContainer.OpenStream(pattName)));
                codes.Add(code);
                pattSizes.Add(pattSize);

                PatternInfo info = new PatternInfo();
                info.ConfidenceThreshold = conf;

                int id = codes.Count - 1;
                markerInfo.PatternInfos.Add(id, info);
                markerInfo.RelativeTransforms.Add(id, Matrix.CreateTranslation(upperLeftCorner));

                markerInfoMap.Add(id, markerInfo);
            }
        }
Example #25
0
        private PatternInfo DecodePattern()
        {
            var result = new PatternInfo();

            int level = 0;

            bool flag = true;
            while (flag)
            {
                if (_currentIndex >= _runningDna.Length)
                {
                    lock (_runningMutex)
                    {
                        _state = RunningState.Stoped;
                        return null;
                    }
                }

                if (_runningDna.HasPatternAtPosition(
                    new[]
                        {
                            "C"
                        },
                    _currentIndex))
                {
                    ++_currentIndex;
                    result.AppendBack('I');
                    continue;
                }

                if (_runningDna.HasPatternAtPosition(
                    new[]
                        {
                            "F"
                        },
                    _currentIndex))
                {
                    ++_currentIndex;
                    result.AppendBack('C');
                    continue;
                }

                if (_runningDna.HasPatternAtPosition(
                    new[]
                        {
                            "P"
                        },
                    _currentIndex))
                {
                    ++_currentIndex;
                    result.AppendBack('F');
                    continue;
                }

                if (_runningDna.HasPatternAtPosition(
                    new[]
                        {
                            "IC"
                        },
                    _currentIndex))
                {
                    _currentIndex += 2;
                    result.AppendBack('P');
                    continue;
                }

                if (_runningDna.HasPatternAtPosition(
                    new[]
                        {
                            "IP"
                        },
                    _currentIndex))
                {
                    _currentIndex += 2;
                    int number = DecodeNumber();
                    result.AppendSkip(number);
                    continue;
                }

                if (_runningDna.HasPatternAtPosition(
                    new[]
                        {
                            "IF"
                        },
                    _currentIndex))
                {
                    _currentIndex += 3;
                    string consts = DecodeConsts();
                    result.AppendSearch(consts);
                    continue;
                }

                if (_runningDna.HasPatternAtPosition(
                    new[]
                        {
                            "IIP"
                        },
                    _currentIndex))
                {
                    _currentIndex += 3;
                    ++level;
                    result.IncreaseLevel();
                    continue;
                }

                if (_runningDna.HasPatternAtPosition(
                    new[]
                        {
                            "IIC", "IIF"
                        },
                    _currentIndex))
                {
                    _currentIndex += 3;
                    if (level == 0)
                    {
                        flag = false;
                        continue;
                    }

                    --level;
                    result.DecreaseLevel();
                    continue;
                }

                if (_runningDna.HasPatternAtPosition(
                    new[]
                        {
                            "III"
                        },
                    _currentIndex))
                {
                    string toRna = _runningDna.Substring(_currentIndex + 3, 7).ToString();
                    OutputToRna(toRna);
                    _currentIndex += 10;
                    continue;
                }

                // Else stop.
                lock (_runningMutex)
                {
                    _state = RunningState.Stoped;
                    return null;
                }
            }

            return result;
        }
Example #26
0
		private void PerformUnregisterPattern (PatternInfo info)
		{
			bus.Unregister (new ObjectPath (info.Path));
			var disposable = info.ProviderWrapper as IDisposable;
			if (disposable != null)
				disposable.Dispose ();
		}
        public void Assert_Returns4If79()
        {
            PatternInfo expected = new PatternInfo(4, "O", "H");

            AssertReturnValueWhenTarget((decimal)79.0, 100, expected);
        }
        public void Assert_Returns6If85()
        {
            PatternInfo expected = new PatternInfo(6, "O", "H");

            AssertReturnValueWhenTarget((decimal)85.0, 100, expected);
        }
        private void ParseArray(string arrayName, ref MarkerInfo markerInfo)
        {
            XElement markerArray = XElement.Load(@"" + arrayName);

            float pattSize = 0;
            int pattId;
            Vector3 center = Vector3.Zero;
            string[] tmp = null;

            foreach (XElement markerElement in markerArray.Elements("marker"))
            {
                try
                {
                    pattId = int.Parse(markerElement.Attribute("patternId").Value);
                    pattSize = float.Parse(markerElement.Attribute("patternSize").Value);
                    tmp = markerElement.Attribute("center").Value.Split(',');
                    center.X = -float.Parse(tmp[0]);
                    center.Y = float.Parse(tmp[1]);
                }
                catch (Exception exp)
                {
                    throw new MarkerException("Wrong marker array format: " + exp.Message);
                }

                IdCode code = new IdCode();
                code.Id = pattId;
                code.Size = pattSize;
                code.MID = markerSystem.addNyIdMarker(code.Id, code.Size);
                
                codes.Add(code);
                pattSizes.Add(pattSize);

                PatternInfo info = new PatternInfo();

                markerInfo.PatternInfos.Add(code.MID, info);
                markerInfo.RelativeTransforms.Add(code.MID, Matrix.CreateTranslation(center));
                markerInfo.Method = ComputationMethod.Average;

                markerInfoMap.Add(code.MID, markerInfo);
            }
        }
        public object AssociateMarker(params object[] markerConfigs)
        {
            // make sure we are initialized
            if (!initialized)
                throw new MarkerException("NewNyAR is not initialized. Call InitTracker(...)");

            if (!(markerConfigs.Length == 2 || markerConfigs.Length == 5))
                throw new MarkerException("Problem in AssociateMarker in NewNyAR");

            MarkerInfo markerInfo = new MarkerInfo();
           
            if (markerConfigs.Length == 2)
            {
                string arrayName = "";
                ComputationMethod method = ComputationMethod.Average;

                try
                {
                    arrayName = (String)markerConfigs[0];
                    method = (ComputationMethod)markerConfigs[1];
                }
                catch (Exception exception)
                {
                
                    throw new MarkerException("Problem in AssociateMarker in NewNyAR");
                }

                ParseArray(arrayName, ref markerInfo);

                markerInfo.Method = method;
            }
            else
            {
                float pattSize = 0, conf = 0;
                String pattId = "";

                try
                {
                    pattId = (String)(markerConfigs[0]);
                    pattSize = (float)markerConfigs[3];
                    conf = (float)markerConfigs[4];
                }
                catch (Exception)
                {
                    throw new MarkerException("Problem in AssociateMarker in NewNyAR");
                }

                IdCode code = new IdCode();
                code.Id = int.Parse(pattId);
                code.Size = pattSize;
                code.MID = markerSystem.addNyIdMarker(code.Id, code.Size);
                
                codes.Add(code);
                pattSizes.Add(pattSize);

                PatternInfo info = new PatternInfo();
                info.ConfidenceThreshold = conf;

                markerInfo.PatternInfos.Add(code.MID, info);
                markerInfo.RelativeTransforms.Add(code.MID, Matrix.Identity);
                markerInfo.Method = ComputationMethod.Average;

                markerInfoMap.Add(code.MID, markerInfo);
            }
            
            markerInfoList.Add(markerInfo);
            
            /*
            // reinitialize the multi marker detector if the programmer adds new marker node
            // after the initialization phase
            if (started)
            {
                
            }
             * */
            return markerInfo;
        }
Example #31
0
        public static Pattern DiscoverPattern(Sim actor)
        {
            //int skillLevel = actor.SkillManager.GetSkillLevel(SewingSkill.kSewingSkillGUID);
            ResourceKey getPattern       = GetUnregisteredpattern(actor, false);
            ResourceKey emptyRes         = new ResourceKey(0uL, 0u, 0u);
            PatternInfo mPatternInfoInit = new PatternInfo();
            SewingSkill sewingSkill      = actor.SkillManager.AddElement(SewingSkill.kSewingSkillGUID) as SewingSkill;

            try
            {
                ObjectLoader.sewableSetting sSetting = ObjectLoader.dictSettings[getPattern];

                mPatternInfoInit.resKeyPattern          = getPattern;
                mPatternInfoInit.fabricsNeeded          = sSetting.typeFabric;
                mPatternInfoInit.IsMagic                = sSetting.isMagicProject;
                mPatternInfoInit.amountOfFabricToRemove = sSetting.amountRemoveFabric;
                mPatternInfoInit.isClothing             = sSetting.isClothing;
                mPatternInfoInit.mClothingName          = sSetting.clothingName;
                mPatternInfoInit.mWasPatternGifted      = false;

                //mPatternInfoInit.mSkilllevel              = 0;

                if (mPatternInfoInit.isClothing)
                {
                    mPatternInfoInit.mSimOutfit = new CASPart(mPatternInfoInit.resKeyPattern);
                }

                // Pattern OBJD key.
                ResourceKey reskey1 = new ResourceKey(0x19D4F5930F26B2D8, 0x319E4F1D, 0x00000000);
                Pattern.PatternObjectInitParams initData = new Pattern.PatternObjectInitParams(mPatternInfoInit.fabricsNeeded, mPatternInfoInit.IsMagic, mPatternInfoInit.amountOfFabricToRemove, mPatternInfoInit.mSkilllevel, mPatternInfoInit.resKeyPattern, mPatternInfoInit.isClothing, mPatternInfoInit.mSimOutfit, mPatternInfoInit.mClothingName, mPatternInfoInit.mWasPatternGifted);
                Pattern pattern = (Pattern)GlobalFunctions.CreateObjectOutOfWorld(reskey1, null, initData);

                if (pattern.GetType() == typeof(FailureObject))
                {
                    return(null);
                }

                if (pattern != null)
                {
                    IGameObject getname = (GameObject)GlobalFunctions.CreateObjectOutOfWorld(mPatternInfoInit.resKeyPattern, null, initData);
                    if (getname != null)
                    {
                        // Currently uses the pattern object's name. We need to concatinate the sewable's name here as well. Since EA never made a function to get the name direction from the resource key, we need to do this.
                        mPatternInfoInit.Name = pattern.GetLocalizedName() + ": " + getname.GetLocalizedName();
                        pattern.NameComponent.SetName(pattern.GetLocalizedName() + ": " + getname.GetLocalizedName());

                        // Now we finally got the name and can destroy the object.
                        getname.Destroy();
                    }
                    SimDescription desc = actor.SimDescription;
                    pattern.mPatternInfo = mPatternInfoInit;
                    SewingSkill.AddItemsToDiscoveredList(desc.mSimDescriptionId, mPatternInfoInit.resKeyPattern);

                    actor.Inventory.TryToAdd(pattern);
                    sewingSkill.AddPatternCount(1);
                    return(pattern);
                }
                else if (pattern != null && mPatternInfoInit.isClothing)
                {
                    mPatternInfoInit.Name = mPatternInfoInit.mClothingName;
                    pattern.NameComponent.SetName(mPatternInfoInit.mClothingName);

                    pattern.mPatternInfo = mPatternInfoInit;
                    actor.Inventory.TryToAdd(pattern);
                    sewingSkill.AddPatternCount(1);

                    return(pattern);
                }
                else
                {
                    GlobalOptionsSewingTable.print("Lyralei's Sewing table: \n \n The pattern doesn't exist! Did you delete things from the sewing table .package? Else, contact Lyralei.");
                    return(null);
                }
            }
            catch (Exception ex2)
            {
                GlobalOptionsSewingTable.print("Lyralei's Sewing table: \n \n REPORT THIS TO LYRALEI: " + ex2.ToString());
                return(null);
            }
        }
Example #32
0
            public int Compare(string pattern1, string pattern2)
            {
                PatternInfo info1 = new PatternInfo(pattern1);
                PatternInfo info2 = new PatternInfo(pattern2);

                if (info1.IsLeastSpecific && info2.IsLeastSpecific)
                {
                    return(0);
                }
                else if (info1.IsLeastSpecific)
                {
                    return(1);
                }
                else if (info2.IsLeastSpecific)
                {
                    return(-1);
                }

                bool pattern1EqualsPath = pattern1.Equals(path);
                bool pattern2EqualsPath = pattern2.Equals(path);

                if (pattern1EqualsPath && pattern2EqualsPath)
                {
                    return(0);
                }
                else if (pattern1EqualsPath)
                {
                    return(-1);
                }
                else if (pattern2EqualsPath)
                {
                    return(1);
                }

                if (info1.IsPrefixPattern && info2.DoubleWildcards == 0)
                {
                    return(1);
                }
                else if (info2.IsPrefixPattern && info1.DoubleWildcards == 0)
                {
                    return(-1);
                }

                if (info1.TotalCount != info2.TotalCount)
                {
                    return(info1.TotalCount - info2.TotalCount);
                }

                if (info1.Length != info2.Length)
                {
                    return(info2.Length - info1.Length);
                }

                if (info1.SingleWildcards < info2.SingleWildcards)
                {
                    return(-1);
                }
                else if (info2.SingleWildcards < info1.SingleWildcards)
                {
                    return(1);
                }

                if (info1.UriVars < info2.UriVars)
                {
                    return(-1);
                }
                else if (info2.UriVars < info1.UriVars)
                {
                    return(1);
                }

                return(0);
            }
Example #33
0
		private PatternInfo GetOrCreatePatternInfo (int id, object provider,
		                                     string path,
		                                     CreateWrapperFromProvider wrapperCreator)
		{
			PatternInfo oldInfo;
			if (patternMapping.TryGetValue (id, out oldInfo)) {
				if (oldInfo.Provider == provider)
					return oldInfo;
			}

			object wrapper = wrapperCreator (provider);
			PatternInfo newInfo = new PatternInfo {
				Path = path,
				Provider = provider,
				ProviderWrapper = wrapper
			};
			patternMapping [id] = newInfo;
			bus.Register (new ObjectPath (path), wrapper);

			return newInfo;
		}
Example #34
0
        private void MatchReplace(PatternInfo pattern, TemplateInfo template)
        {
            long index = _currentIndex;
            var environment = new List<StringManager>();
            var counters = new List<int>();

            foreach (PatternItemInfo pat in pattern)
            {
                if (pat.IsBase)
                {
                    if (index >= _runningDna.Length)
                        return;

                    if (_runningDna.HasPatternAtPosition(
                        new[]
                            {
                                new string(pat.Symbol, 1)
                            },
                        (int) index))
                        ++index;
                    else
                        return;
                    continue;
                }

                if (pat.IsSkip)
                {
                    index += pat.SkipCount;
                    if (index >= _runningDna.Length)
                        return;
                    continue;
                }

                if (pat.IsSearch)
                {
                    int patterIndex = _runningDna.IndexOf(pat.SearchPattern, (int) index);
                    if (patterIndex != -1)
                        index = patterIndex + pat.SearchPattern.Length;
                    else
                        return;

                    continue;
                }

                if (pat.IsLevelUp)
                {
                    counters.Insert(0, (int) index);
                    continue;
                }

                if (pat.IsLevelDown)
                {
                    environment.Add(_runningDna.Substring(counters[0], (int) index - counters[0]));
                    counters.RemoveAt(0);
                    continue;
                }
            }

            _currentIndex = (int) index;
            Replace(template, environment);
        }
Example #35
0
            public void ToYaml(MaterialAnim materialAnim, FMAA.AnimationType animType)
            {
                MaterialAnimConfigs = new List <MatAnimConfig>();

                Name       = materialAnim.Name;
                Path       = materialAnim.Path;
                FrameCount = materialAnim.FrameCount;
                Loop       = materialAnim.Loop;

                foreach (var mat in materialAnim.MaterialAnimDataList)
                {
                    MatAnimConfig matConfig = new MatAnimConfig();
                    matConfig.Name = mat.Name;
                    MaterialAnimConfigs.Add(matConfig);

                    foreach (var paramInfo in mat.ParamAnimInfos)
                    {
                        ParamInfo paramCfg = new ParamInfo();
                        paramCfg.Name       = paramInfo.Name;
                        paramCfg.IsConstant = paramInfo.ConstantCount != 0;
                        matConfig.ParamInfos.Add(paramCfg);

                        if (paramInfo.ConstantCount != 0)
                        {
                            paramCfg.Constants = new List <ConstantConfig>();
                            for (int i = 0; i < paramInfo.ConstantCount; i++)
                            {
                                AnimConstant   constant      = mat.Constants[paramInfo.BeginConstant + i];
                                ConstantConfig ConstantValue = new ConstantConfig();
                                ConstantValue.Offset = ConvertParamOffset(constant.AnimDataOffset, animType);
                                ConstantValue.Value  = constant.Value;

                                paramCfg.Constants.Add(ConstantValue);
                            }
                        }

                        if (paramInfo.BeginCurve != ushort.MaxValue)
                        {
                            paramCfg.CurveData = new List <CurveConfig>();
                            for (int i = 0; i < paramInfo.IntCurveCount + paramInfo.FloatCurveCount; i++)
                            {
                                var curve    = mat.Curves[(int)paramInfo.BeginCurve + i];
                                var CurveCfg = new CurveConfig();
                                CurveCfg.Offset = ConvertParamOffset(curve.AnimDataOffset, animType);

                                if (curve.Scale == 0)
                                {
                                    curve.Scale = 1;
                                }

                                for (int f = 0; f < curve.Frames.Length; f++)
                                {
                                    int   frame = (int)curve.Frames[f];
                                    float Value = curve.Offset + curve.Keys[f, 0] * curve.Scale;
                                    CurveCfg.KeyFrames.Add(frame, Value);
                                }

                                paramCfg.CurveData.Add(CurveCfg);
                            }
                        }
                    }

                    foreach (var patternInfo in mat.TexturePatternAnimInfos)
                    {
                        PatternInfo infoCfg = new PatternInfo();
                        infoCfg.Name       = patternInfo.Name;
                        infoCfg.IsConstant = patternInfo.BeginConstant != ushort.MaxValue;
                        matConfig.TexturePatternInfos.Add(infoCfg);

                        if (infoCfg.IsConstant)
                        {
                            infoCfg.ConstantValue = new ConstantTPConfig();
                            int Index = (int)mat.Constants[(int)patternInfo.BeginConstant].Value;
                            infoCfg.ConstantValue.Texture = materialAnim.TextureNames[Index];
                        }
                        if (patternInfo.CurveIndex != ushort.MaxValue)
                        {
                            var curve = mat.Curves[(int)patternInfo.CurveIndex];
                            infoCfg.CurveData = new CurveTPConfig();

                            if (curve.Scale == 0)
                            {
                                curve.Scale = 1;
                            }

                            for (int f = 0; f < curve.Frames.Length; f++)
                            {
                                int frame = (int)curve.Frames[f];
                                int Value = (int)curve.Offset + (int)curve.Keys[f, 0] * (int)curve.Scale;

                                infoCfg.CurveData.KeyFrames.Add(frame, materialAnim.TextureNames[Value]);
                            }
                        }
                    }
                }
            }
        public void Assert_Return5If80()
        {
            PatternInfo expected = new PatternInfo(5, "O", "H");

            AssertReturnValueWhenTarget((decimal)80.0, 100, expected);
        }
        public void Assert_Returns3If34()
        {
            PatternInfo expected = new PatternInfo(3, "H", "O");

            AssertReturnValueWhenTarget((decimal)34.0, 200, expected);
        }