예제 #1
0
        private void Form1_Load(object sender, EventArgs e)
        {
            logTools.OnError += LogTools_OnError;
            logTools.OnInfo  += LogTools_OnInfo;

            configMgr.PCRRegion = PCRRegion.Taiwan;

            AdbTools.GetInstance().ConnectToMumuAdbServer();


            var es = EmptyScript.GetInstance();

            CaptureMumu();
            var unit     = PCRUnit.FromUnitName("妹弓", 3);
            var unitList = new List <PCRUnit>()
            {
                unit
            };

            //var isok = es.IsBattleSceneUnitUBReady(viewportMat, viewportRect, 1);
            //es.GetBattleSceneUnitsStatus(viewportMat, viewportRect);
            //es.SelectBattleTeam(viewportMat, viewportRect, unitList);
            //var units = es.GetBattleTeamInfo(viewportMat, viewportRect);
            //es.SelectBattleTeam(viewportMat, viewportRect, units);
            RunScript();
            //var r = es.GetBattleLeftTime(viewportMat, viewportRect);
        }
예제 #2
0
        public PCRUnit GetBattleTeamInfoByIndex(Mat viewportMat, RECT viewportRect, int index)
        {
            var key              = $"Battle_Team_Slot_{index}";
            var rectRate         = GetMatchSourceRectRate(key);
            var threshold        = GetMatchTemplateThreshold("Battle_Team_Slot");
            var matchSourceMat   = viewportMat.GetChildMatByRectRate(rectRate);
            var unitIDs          = PCRUnit.GetAllUnitIDs();
            var templateWidth    = configMgr.UnitAvatarTemplateSize.Width;
            var getByAvatarLevel = new Func <string, PCRAvatarLevel, PCRUnit>((unitID, avatarLevel) =>
            {
                if (unitID == PCRUnit.UnknownUnitID)
                {
                    return(null);
                }
                Mat avatarPartial;
                lock (getUnitAvatarPartialLock)
                {
                    avatarPartial = GetUnitAvatarPartial(unitID, avatarLevel, templateWidth);
                }
                var matchRes = opencvTools.MatchImage(matchSourceMat, avatarPartial, threshold);
                if (matchRes.Success)
                {
                    return(PCRUnit.FromUnitID(unitID, avatarLevel.GetRequiredStars()));
                }
                else
                {
                    return(null);
                }
            });
            var getByAvatarLevelNoEx = new Func <string, PCRAvatarLevel, PCRUnit>((unitID, avatarLevel) =>
            {
                try { return(getByAvatarLevel(unitID, avatarLevel)); }
                catch { return(null); }
            });

            foreach (var unitID in unitIDs)
            {
                PCRUnit unit;
                unit = getByAvatarLevelNoEx(unitID, PCRAvatarLevel.Level3);
                if (unit != null)
                {
                    return(unit);
                }
                unit = getByAvatarLevelNoEx(unitID, PCRAvatarLevel.Level1);
                if (unit != null)
                {
                    return(unit);
                }
                unit = getByAvatarLevelNoEx(unitID, PCRAvatarLevel.Level6);
                if (unit != null)
                {
                    return(unit);
                }
            }
            return(null);
        }
예제 #3
0
        protected Mat GetUnitAvatarPartial(string unitID, PCRAvatarLevel avatarLevel, int templateWidth)
        {
            var key = $"{unitID}_{avatarLevel}_{templateWidth}";

            if (unitAvatarPartialDict.ContainsKey(key))
            {
                return(unitAvatarPartialDict[key]);
            }
            var unit          = PCRUnit.FromUnitID(unitID, avatarLevel.GetRequiredStars());
            var avatar        = unit.GetResizedAvatar(avatarLevel, templateWidth);
            var avatarPartial = avatar.GetChildMatByRectRate(unitAvatarPartialRectRate);

            unitAvatarPartialDict[key] = avatarPartial;
            return(avatarPartial);
        }