예제 #1
0
 void SensorFound(Sensor sensorfounded)
 {
     bulletTrigger = new TriggerFilter <Bullet>(
         sensorfounded,
         BulletReceived,
         Layers.PLAYER_BULLET,
         TriggerFilter <Bullet> .TriggerType._2D);
 }
예제 #2
0
    public override void Init()
    {
        canmove      = true;
        shoot        = new Shoot <Bullet>(Bullet.Activar, Bullet.Desactivar, Bullet.SetPoolObj, point_to_fire, 5f, bullet_model, BulletDamage);
        enemyTrigger = new TriggerFilter <Bullet>(enemySensor, HitWithBUllet, Layers.ENEMY_BULLET, TriggerFilter <Bullet> .TriggerType._2D);
        Life         = 100;

        gameObject.FindAndLink <Animator>(AnimatorFound);
    }
예제 #3
0
        public async Task <ICollection <Trigger> > PageAsync(TriggerFilter filter)
        {
            var triggerList = await ApplyFilters(filter)
                              .ApplyPagination(filter)
                              .ProjectTo <Trigger>()
                              .ToListAsync();

            foreach (var trigger in triggerList)
            {
                trigger.HasDependents = await HasDependentsAsync(trigger.Id);
            }

            return(triggerList);
        }
예제 #4
0
        public async Task <ICollection <Trigger> > PageAsync(TriggerFilter filter)
        {
            var triggerList = await ApplyFilters(filter)
                              .OrderBy(_ => _.Name)
                              .ApplyPagination(filter)
                              .ProjectTo <Trigger>(_mapper.ConfigurationProvider)
                              .ToListAsync();

            foreach (var trigger in triggerList)
            {
                var dependents = await DependentTriggers(trigger.Id);

                trigger.HasDependents = dependents?.Count > 1;
            }

            return(triggerList);
        }
예제 #5
0
        private IQueryable <Model.Trigger> ApplyFilters(TriggerFilter filter)
        {
            var triggerList = DbSet
                              .AsNoTracking()
                              .Where(_ => !_.IsDeleted && _.SiteId == filter.SiteId);

            if (filter.SystemIds?.Any() == true)
            {
                triggerList = triggerList.Where(_ => filter.SystemIds.Contains(_.RelatedSystemId));
            }

            if (filter.BranchIds?.Any() == true)
            {
                triggerList = triggerList.Where(_ => filter.BranchIds.Contains(_.RelatedBranchId));
            }

            if (filter.UserIds?.Any() == true)
            {
                triggerList = triggerList.Where(_ => filter.UserIds.Contains(_.CreatedBy));
            }

            if (filter.ProgramIds?.Any() == true)
            {
                triggerList = triggerList
                              .Where(_ => filter.ProgramIds.Any(p => p == _.LimitToProgramId));
            }

            if (!string.IsNullOrWhiteSpace(filter.Search))
            {
                triggerList = triggerList.Where(_ => _.Name.Contains(filter.Search) ||
                                                _.SecretCode.Contains(filter.Search));
            }

            if (filter.SecretCodesOnly == true)
            {
                triggerList = triggerList.Where(_ => !string.IsNullOrWhiteSpace(_.SecretCode));
            }

            return(triggerList);
        }
예제 #6
0
 // honors site id, skip, and take
 public async Task <int> CountAsync(TriggerFilter filter)
 {
     return(await ApplyFilters(filter)
            .CountAsync());
 }
예제 #7
0
        public async Task <IActionResult> Index(string search,
                                                int?systemId, int?branchId, bool?mine, int?programId, int page = 1)
        {
            var filter = new TriggerFilter(page);

            if (!string.IsNullOrWhiteSpace(search))
            {
                filter.Search = search;
            }

            if (mine == true)
            {
                filter.UserIds = new List <int> {
                    GetId(ClaimType.UserId)
                };
            }
            else if (branchId.HasValue)
            {
                filter.BranchIds = new List <int> {
                    branchId.Value
                };
            }
            else if (systemId.HasValue)
            {
                filter.SystemIds = new List <int> {
                    systemId.Value
                };
            }

            if (programId.HasValue)
            {
                if (programId.Value > 0)
                {
                    filter.ProgramIds = new List <int?> {
                        programId.Value
                    };
                }
                else
                {
                    filter.ProgramIds = new List <int?> {
                        null
                    };
                }
            }

            var triggerList = await _triggerService.GetPaginatedListAsync(filter);

            var paginateModel = new PaginateViewModel
            {
                ItemCount    = triggerList.Count,
                CurrentPage  = page,
                ItemsPerPage = filter.Take.Value
            };

            if (paginateModel.PastMaxPage)
            {
                return(RedirectToRoute(
                           new
                {
                    page = paginateModel.LastPage ?? 1
                }));
            }

            foreach (var trigger in triggerList.Data)
            {
                trigger.AwardBadgeFilename =
                    _pathResolver.ResolveContentPath(trigger.AwardBadgeFilename);
                var graEvent = (await _eventService.GetRelatedEventsForTriggerAsync(trigger.Id))
                               .FirstOrDefault();
                if (graEvent != null)
                {
                    trigger.RelatedEventId   = graEvent.Id;
                    trigger.RelatedEventName = graEvent.Name;
                }
            }

            var systemList = (await _siteService.GetSystemList())
                             .OrderByDescending(_ => _.Id == GetId(ClaimType.SystemId)).ThenBy(_ => _.Name);

            var viewModel = new TriggersListViewModel
            {
                Triggers      = triggerList.Data,
                PaginateModel = paginateModel,
                Search        = search,
                SystemId      = systemId,
                BranchId      = branchId,
                ProgramId     = programId,
                Mine          = mine,
                SystemList    = systemList,
                ProgramList   = await _siteService.GetProgramList()
            };

            if (mine == true)
            {
                viewModel.BranchList = (await _siteService.GetBranches(GetId(ClaimType.SystemId)))
                                       .OrderByDescending(_ => _.Id == GetId(ClaimType.BranchId))
                                       .ThenBy(_ => _.Name);
                viewModel.ActiveNav = "Mine";
            }
            else if (branchId.HasValue)
            {
                var branch = await _siteService.GetBranchByIdAsync(branchId.Value);

                viewModel.BranchName = branch.Name;
                viewModel.SystemName = systemList
                                       .SingleOrDefault(_ => _.Id == branch.SystemId)?.Name;
                viewModel.BranchList = (await _siteService.GetBranches(branch.SystemId))
                                       .OrderByDescending(_ => _.Id == GetId(ClaimType.BranchId))
                                       .ThenBy(_ => _.Name);
                viewModel.ActiveNav = "Branch";
            }
            else if (systemId.HasValue)
            {
                viewModel.SystemName = systemList
                                       .SingleOrDefault(_ => _.Id == systemId.Value)?.Name;
                viewModel.BranchList = (await _siteService.GetBranches(systemId.Value))
                                       .OrderByDescending(_ => _.Id == GetId(ClaimType.BranchId))
                                       .ThenBy(_ => _.Name);
                viewModel.ActiveNav = "System";
            }
            else
            {
                viewModel.BranchList = (await _siteService.GetBranches(GetId(ClaimType.SystemId)))
                                       .OrderByDescending(_ => _.Id == GetId(ClaimType.BranchId))
                                       .ThenBy(_ => _.Name);
                viewModel.ActiveNav = "All";
            }
            if (programId.HasValue)
            {
                if (programId.Value > 0)
                {
                    viewModel.ProgramName =
                        (await _siteService.GetProgramByIdAsync(programId.Value)).Name;
                }
                else
                {
                    viewModel.ProgramName = "Not Limited";
                }
            }

            return(View(viewModel));
        }
예제 #8
0
        /// <summary>
        /// Checks to see if the string supplied contains at least one substring that is a trigger.
        /// The supplied string will be broken apart by a static internal logic to perform this
        /// check.
        /// </summary>
        /// <param name="input">
        /// The input string to search for triggers.
        /// </param>
        /// <param name="firstMatchCategory">
        /// The category of the first discovered trigger. Will be -1 on failure.
        /// </param>
        /// <param name="rebuildAndTestFragments">
        /// If no match is found from a single substring fragment, and this parameter is set to true,
        /// the function will begin reconstructing new ordered sentences dynamically from all
        /// extracted fragments to see if a combination of substrings forms a trigger.
        /// </param>
        /// <param name="maxRebuildLen">
        /// If the rebuildAndTestFragments parameter is set to true, this can be set to the maximum
        /// number of substrings to combine in search for a match. By leaving the parameter at its
        /// default value, -1, every possible combination in every length will be tried. For example,
        /// if you're only wanting to match 3 works like "I dont care", you would set this parameter
        /// to a value of 3.
        ///
        /// Note that there are contraints on how long these combinations can be, so regardless of
        /// what the value is here, strings created from joins internally will be skipped when they
        /// exceed internal database column limits.
        /// </param>
        /// <returns>
        /// True if the supplied text contained one or more substrings that were indentified as a
        /// trigger.
        /// </returns>
        public bool ContainsTrigger(string input, out short firstMatchCategory, out string matchedTrigger, Func <short, bool> categoryAppliesCb, bool rebuildAndTestFragments = false, int maxRebuildLen = -1)
        {
            firstMatchCategory = -1;
            matchedTrigger     = null;

            if (!m_hasTriggers)
            {
                return(false);
            }

            var split = Split(input);

            /*using (FileStream debugStream = new FileStream(@"C:\ProgramData\CloudVeil\textTriggerDebug.txt", FileMode.Append))
             * using (StreamWriter writer = new StreamWriter(debugStream))*/
            using (var myConn = new SqliteConnection(m_connection.ConnectionString))
            {
                myConn.Open();

                int itr = 0;

                SqliteCommand triggerCommand = null;

                using (var tsx = myConn.BeginTransaction())
                    using (var cmd = myConn.CreateCommand())
                    {
                        cmd.CommandText = @"SELECT * from FirstWordIndex where FirstWordText = $trigger";

                        var domainSumParam = new SqliteParameter("$trigger", System.Data.DbType.String);
                        cmd.Parameters.Add(domainSumParam);

                        bool skippingTags   = false;
                        bool skippingScript = false;
                        bool quoteReached   = false;
                        bool collectingImportantAttributes = false;
                        bool isClosingTag = false;

                        List <string>         newSplit  = new List <string>();
                        List <List <string> > wordLists = new List <List <string> >();

                        List <List <string> > listsToRemove = new List <List <string> >(maxRebuildLen);

                        foreach (var s in split)
                        {
                            // Completely skip closing tags.
                            if (s.Length > 2 && s[0] == '<' && s[1] == '/' && s[s.Length - 1] == '>')
                            {
                                isClosingTag = true;
                            }

                            // We require some more complex determinations for opening tags as they may have important
                            // text inside them.
                            if (s.Length >= 2 && s[0] == '<' && s[1] != '/' && s.Length > 1 && s.Length < 10)
                            {
                                skippingTags = true;
                            }

                            switch (s.ToLower())
                            {
                            case "<script":
                            case "<style":
                                skippingScript = true;
                                break;

                            case "</script>":
                            case "</style>":
                                skippingScript = false;
                                break;

                            case ">":
                                skippingTags = false;
                                break;

                            case "alt":
                            case "title":
                            case "href":
                                collectingImportantAttributes = true;
                                break;

                            case "\"":
                            case "\'":
                                quoteReached = !quoteReached;
                                if (!quoteReached)
                                {
                                    collectingImportantAttributes = false;
                                }

                                break;
                            }

                            if (isClosingTag)
                            {
                                isClosingTag = false;
                                continue;
                            }

                            if (collectingImportantAttributes)
                            {
                                newSplit.Add(s);
                                itr++;
                            }
                            else if (!skippingTags && !skippingScript && s != ">")
                            {
                                newSplit.Add(s);
                                itr++;
                            }

                            if (skippingTags && !collectingImportantAttributes)
                            {
                                continue;
                            }

                            listsToRemove.Clear();

                            // Check word lists.
                            foreach (var list in wordLists)
                            {
                                if (list.Count >= maxRebuildLen)
                                {
                                    listsToRemove.Add(list);
                                }
                                else
                                {
                                    list.Add(s);
                                }
                            }

                            foreach (var l in listsToRemove)
                            {
                                wordLists.Remove(l);
                            }

                            // Check word lists.
                            foreach (var list in wordLists)
                            {
                                string triggerCandidate = string.Join(" ", list);

                                if (!TriggerFilter.Contains(triggerCandidate))
                                {
                                    continue;
                                }

                                if (triggerCommand == null)
                                {
                                    triggerCommand             = myConn.CreateCommand();
                                    triggerCommand.CommandText = "SELECT * FROM TriggerIndex WHERE TriggerText = $trigger";
                                    var wholeTriggerDomainSumParam = new SqliteParameter("$trigger", System.Data.DbType.String);
                                    wholeTriggerDomainSumParam.Value = input.ToLower();
                                    triggerCommand.Parameters.Add(wholeTriggerDomainSumParam);
                                }

                                triggerCommand.Parameters[0].Value = triggerCandidate;
                                using (var triggerReader = triggerCommand.ExecuteReader())
                                {
                                    while (triggerReader.Read())
                                    {
                                        var thisCat = triggerReader.GetInt16(1);
                                        if (categoryAppliesCb(thisCat))
                                        {
                                            firstMatchCategory = thisCat;
                                            matchedTrigger     = string.Join(" ", list);

                                            return(true);
                                        }
                                    }
                                }
                            }

                            // TODO: Apply bloom filters to this problem.
                            // We need a bloom filter for first words and a bloom filter for triggers for maximum effect.
                            if (!FirstWordFilter.Contains(s))
                            {
                                continue;
                            }

                            cmd.Parameters[0].Value = s;
                            using (var reader = cmd.ExecuteReader())
                            {
                                if (!reader.HasRows)
                                {
                                    continue;
                                }

                                while (reader.Read())
                                {
                                    var isWholeTrigger = reader.GetInt16(1);

                                    if (isWholeTrigger > 0)
                                    {
                                        var thisCat = reader.GetInt16(2);
                                        if (categoryAppliesCb(thisCat))
                                        {
                                            firstMatchCategory = thisCat;
                                            matchedTrigger     = s;
                                            return(true);
                                        }
                                    }
                                    else
                                    {
                                        var newList = new List <string>(maxRebuildLen);
                                        newList.Add(s);
                                        wordLists.Add(newList);

                                        break;
                                    }
                                }
                            }
                        }

                        tsx.Commit();
                    }
            }

            return(false);
        }
예제 #9
0
 public async Task <DataWithCount <ICollection <Trigger> > > GetPaginatedListAsync(TriggerFilter filter)
 {
     VerifyManagementPermission();
     filter.SiteId = GetCurrentSiteId();
     return(new DataWithCount <ICollection <Trigger> >
     {
         Data = await _triggerRepository.PageAsync(filter),
         Count = await _triggerRepository.CountAsync(filter)
     });
 }
예제 #10
0
 private void SensorFound(Sensor obj)
 {
     filter = new TriggerFilter <Player>(obj, PlayerFound, Layers.PLAYER, TriggerFilter <Player> .TriggerType._2D);
 }
예제 #11
0
 private void SensorFound(Sensor _sensorFounded)
 {
     filter = new TriggerFilter <GameObject>(_sensorFounded, ChocoPared, Layers.WORLD, TriggerFilter <GameObject> .TriggerType._2D);
 }
예제 #12
0
 public TriggerFilter2Csv(TriggerFilter original)
 {
     Type  = original.type;
     Key   = original.parameter.Find("arg0").GetValue;
     Value = original.parameter.Find("arg1").GetValue;
 }