コード例 #1
0
    public int DebugSkillUpDown(string kaitou, bool log = true)
    {
        int u  = 0;
        int d  = 0;
        int u1 = 0;
        int d1 = 0;
        int u2 = 0;
        int d2 = 0;
        int u3 = 0;
        int d3 = 0;

        foreach (var m in NeedFixRecords)
        {
            if (m.GetSpeedType() == SpeedChangeType.SkillUp)
            {
                u3++;
            }
            else if (m.GetSpeedType() == SpeedChangeType.SkillDown)
            {
                d3++;
            }
        }
        foreach (var m in HistoryRecords)
        {
            if (m.GetSpeedType() == SpeedChangeType.SkillUp)
            {
                u1++;
            }
            else if (m.GetSpeedType() == SpeedChangeType.SkillDown)
            {
                d1++;
            }
        }

        if (CurMagicRecord.GetSpeedType() == SpeedChangeType.SkillUp)
        {
            u++;
        }
        else if (CurMagicRecord.GetSpeedType() == SpeedChangeType.SkillDown)
        {
            d++;
        }

        foreach (var m in FutureExeMoves)
        {
            if (m.GetSpeedType() == SpeedChangeType.SkillUp)
            {
                u2++;
            }
            else if (m.GetSpeedType() == SpeedChangeType.SkillDown)
            {
                d2++;
            }
        }
        if (log)
        {
            DebugConsole.LogWarning(kaitou + " UPDOWN:History(" + u1 + ":" + d1 + ") " + "Future(" + u2 + ":" + d2 + ") " + "Now(" + u + ":" + d + ") " + "Fix(" + u3 + ":" + d3 + ") " + "Sum(" + (u + u1 + u2 + u3) + ":" + (d + d1 + d2 + d3) + ")");
        }
        return((u + u1 + u2 + u3) - (d + d1 + d2 + d3));
    }
コード例 #2
0
    /// <summary>
    ///
    /// </summary>
    /// <param name="add"></param>
    /// <returns>真正意义上的前一个mmr</returns>
    private MagicMoveRecord AddRecord(MagicMoveRecord add)
    {
        //需要判断一下是否可以加入,因为有的时候会有两个连续的转向命令,但是在同一个拐点只能接受第1个命令,后来的要抛弃,加速减速也可能会有这个问题,但是如果是提前设置的减速点和拐点重合,那么可以add成功
        List <MagicMoveRecord> equalList = new List <MagicMoveRecord>();

        if (add.GetSpeedType() == SpeedChangeType.None)
        {
            foreach (var r in Records.Reverse <MagicMoveRecord>())
            {
                if (r.GetTime() == add.GetTime())
                {
                    equalList.Add(r);
                }
                else if (r.GetTime() < add.GetTime())
                {
                    break;
                }
            }
            foreach (var e in equalList)
            {
                if (e.GetSpeedType() == add.GetSpeedType())
                {
                    Log("mutli SpeedChangeType.None :" + add.ToString());
                    return(null);
                }
            }
        }


        {
            Records.Add(add);
            Records.Sort(moveRecordComparator);
            var idx = Records.IndexOf(add) - 1;
            if (idx < 0)
            {
                Log("if(idx < 0):" + idx);
                return(null);
            }
//          MagicMoveRecord l = null;
//          foreach (var r in Records)
//          {
//              if (l != null && l.GetTime() == r.GetTime())
//              {
//                  bool a = false;
//                  while(a)
//                  {
//
//                  }
//              }
//              l = r;
//          }
            return(Records[idx]);
        }
    }
コード例 #3
0
    private void FixMMRs(MagicMoveRecord first)
    {
        Log("FixMMRs Enter:");
        int firstIdx = Records.IndexOf(first);

        if (firstIdx < 0)
        {
            while (true)
            {
                Log("if(firstIdx < 0)");
            }
            return;
        }
        MagicMoveRecord previous = Records[firstIdx];

        Log("Fix Begin:");
        for (int i = firstIdx + 1; i < Records.Count; i++)
        {
            MagicMoveRecord tmp = Records[i];
            CalcNextMMR(previous, tmp.GetDir().x, tmp.GetDir().z, tmp.GetSpeedType(), tmp.GetCMDTime(), tmp.GetCMDIndex(), tmp);
            previous = tmp;
        }
        Log("Fix End:");
        Log("FixMMRs Leave:");
    }
コード例 #4
0
    private MagicMoveRecord FixMMRs(MagicMoveRecord first)
    {
        MagicMoveRecord last = first;

        for (int i = 0; i < NeedFixRecords.Count;)
        {
            if (last != null)
            {
                MagicMoveRecord tmp   = NeedFixRecords[i];
                var             temp2 = CalcNextMMR(last, tmp.GetDir().x, tmp.GetDir().z, tmp.GetSpeedType(), tmp.GetTime(), tmp.GetCMDIndex(), tmp);
                if (temp2 != null)
                {
                    i++;
                }
                else
                {
                    if (last == first && first.GetCMDIndex() > tmp.GetCMDIndex())
                    {
                        first = tmp;
                    }
                    else
                    {
                        Log("if(last==first && first.GetCMDIndex() > tmp.GetCMDIndex())@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@22");
                    }
                    NeedFixRecords.RemoveAt(i);
                    Log("discard:" + tmp.ToString());
                }
                last = tmp;
            }
        }
        return(first);
    }
コード例 #5
0
    public void TestAddMoveCtrlCommand(long time, float dirX, float dirZ, SpeedChangeType speedType, int index)
    {
        DebugSkillUpDown("Before ADD");
        //检查是否是合法参数
        //如果这个时间点比服务器时间更早
        //if(time <= CurMagicRecord.GetTime())
        //{
        // throw new Exception("这个时间点比服务器时间更早:" + time + "@" + NowTime_Ms_Long );
        //}
        //先找到该时间点前一个MagicMoveRecord是哪个,可能是当前的MagicMoveRecord,也可能是缓存队列里某一个,所以遍历一下
        //上边已经排除了一个不可能的情况,现在看其他情况
        {
            NeedFixRecords.Clear();

            MagicMoveRecord cmdLastRecord = null;
            FindCMDType     find          = FindCMDType.None;
            int             findIdx       = -1;
            if (HistoryRecords.Count > 0)
            {
                for (int i = HistoryRecords.Count - 1; i >= 0; i--)
                {
                    MagicMoveRecord tmp = HistoryRecords[i];
                    if (tmp.GetTime() <= time && tmp.GetCMDTime() <= time)
                    {
                        cmdLastRecord = tmp;
                        break;
                    }
                    else
                    {
                        findIdx = i;
                        find    = FindCMDType.History;
                    }
                }
            }

            {
                if (find == FindCMDType.None)
                {
                    if (CurMagicRecord != null && CurMagicRecord.GetTime() <= time && CurMagicRecord.GetCMDTime() <= time)
                    {
                        cmdLastRecord = CurMagicRecord;
                        //Log("CurMagicRecord:" + CurMagicRecord.ToString());
                    }
                    else
                    {
                        find = FindCMDType.Now;
                    }
                }
                if (find == FindCMDType.None)
                {
                    if (FutureExeMoves.Count > 0)
                    {
                        foreach (var tmp in FutureExeMoves)
                        {
                            //Log("FutureExeMoves:" + tmp.ToString());
                            if (tmp.GetTime() <= time && tmp.GetCMDTime() <= time)
                            {
                                cmdLastRecord = tmp;
                            }
                            else
                            {
                                findIdx = FutureExeMoves.IndexOf(tmp);
                                find    = FindCMDType.Future;
                                //这是个优先权队列,所以一旦发现不满足了就都不用检查了
                                break;
                            }
                        }
                    }
                }
            }

            Log("LastMoveCmd:" + cmdLastRecord.ToString());
            //根据上一个关键节点计算这个关键节点
            if (dirX == 0 && dirZ == 0 && speedType == SpeedChangeType.None)
            {
                Log("dirX == 0 && dirZ == 0");
                return;
            }
            SkillVector3 curDir   = cmdLastRecord.GetDir();
            float        curSpeed = cmdLastRecord.GetSpeed();
            if (curDir.x == dirX && curDir.z == dirZ && speedType == SpeedChangeType.None)
            {
                Log("curDir.x == dirX && curDir.z == dirZ && speedType == SpeedChangeType.None");
                return;
            }
            MagicMoveRecord newRecord = CalcNextMMR(cmdLastRecord, dirX, dirZ, speedType, time, index);
            Log(" find ret :" + find);
            //速度改变的情况
            //if (speedType != SpeedChangeType.None)
            {
                switch (find)
                {
                case FindCMDType.Future:
                {
                    if (FutureExeMoves.Count > findIdx)
                    {
                        NeedFixRecords.AddRange(FutureExeMoves.GetRange(findIdx, FutureExeMoves.Count - findIdx));
                        FutureExeMoves.RemoveRange(findIdx, FutureExeMoves.Count - findIdx);
                    }
                }
                break;

                case FindCMDType.History:
                {
                    if (HistoryRecords.Count > findIdx)
                    {
                        NeedFixRecords.AddRange(HistoryRecords.GetRange(findIdx, HistoryRecords.Count - findIdx));
                        HistoryRecords.RemoveRange(findIdx, HistoryRecords.Count - findIdx);
                    }

                    if (findIdx == 0)
                    {
                        throw new Exception("findIdx == 0");
                    }

                    NeedFixRecords.Add(CurMagicRecord);
                    CurMagicRecord = HistoryRecords[findIdx - 1];
                    HistoryRecords.RemoveAt(findIdx - 1);

                    if (FutureExeMoves.Count > 0)
                    {
                        NeedFixRecords.AddRange(FutureExeMoves);
                        FutureExeMoves.Clear();
                    }
                }
                break;

                case FindCMDType.Now:
                {
                    NeedFixRecords.Add(CurMagicRecord);
                    if (HistoryRecords.Count == 0)
                    {
                        throw new Exception("HistoryRecords.Count() == 0");
                    }
                    CurMagicRecord = HistoryRecords[HistoryRecords.Count - 1];
                    HistoryRecords.RemoveAt(HistoryRecords.Count - 1);
                    if (FutureExeMoves.Count > 0)
                    {
                        NeedFixRecords.AddRange(FutureExeMoves);
                        FutureExeMoves.Clear();
                    }
                }
                break;
                }

                newRecord = FixMMRs(newRecord);
                //Log(index + " Speed Changed : " + curSpeed + "---->>>----" + speed + " BeginPos:" + beginPos.ToString() + " NowPos:" + NextPos.ToString());
            }
            if (newRecord.GetTime() > cmdLastRecord.GetTime() || (newRecord.GetTime() == cmdLastRecord.GetTime() && newRecord.GetSpeedType() != SpeedChangeType.None))
            {
                bool bAdd = true;
                foreach (var tmp in FutureExeMoves)
                {
                    if (tmp.GetTime() == newRecord.GetTime() && tmp.GetSpeedType() == SpeedChangeType.None && newRecord.GetSpeedType() == SpeedChangeType.None)
                    {
                        bAdd = false;
                    }
                }
                if (CurMagicRecord != null && CurMagicRecord.GetTime() == newRecord.GetTime() && CurMagicRecord.GetSpeedType() == SpeedChangeType.None && newRecord.GetSpeedType() == SpeedChangeType.None)
                {
                    bAdd = false;
                }
                if (bAdd)
                {
                    AddFutureExeMoves(newRecord);
                    if (newRecord.GetSpeedType() == SpeedChangeType.SkillUp)
                    {
                        skillupcount++;
                    }
                    else if (newRecord.GetSpeedType() == SpeedChangeType.SkillDown)
                    {
                        skilldowncount++;
                    }
                }
                else
                {
                    Log("abandon 222 " + newRecord.ToString());
                }
            }
            else
            {
                Log("abandon " + newRecord.ToString());
                if (newRecord.GetSpeedType() != SpeedChangeType.None)
                {
                    DebugConsole.LogError("SDFEARYTHRTHGFHGDSFSDFSDFSDAF");
                }
            }
        }
        {
            FixToFuture();
        }
        DebugSkillUpDown("After ADD");
    }