Beispiel #1
0
        public async Task <MyTeam> MakeSub(int sub1, int sub1Position, int sub1ElementType, bool isSub1Captain, bool isSub1ViceCaptain, int sub2, int sub2Position, int sub2ElementType)
        {
            HttpClientHandler handler = new HttpClientHandler();

            handler = CreateHandler(handler);

            var response = await _httpClient.GetAuthAsync(handler, $"my-team/{teamId}");

            //look for 404 error here

            response.EnsureSuccessStatusCode();

            var content = await response.Content.ReadAsStringAsync();

            var myTeamJSON = JObject.Parse(content);

            MyTeam myTeam = JsonConvert.DeserializeObject <MyTeam>(myTeamJSON.ToString());

            //myTeam.picks = await AddPlayerSummaryDataToTeam(myTeam.picks, gameweekId);

            var payload = new SubPayload();

            payload.chip = null;

            foreach (var pick in myTeam.picks)
            {
                var subPick = new SubPick {
                    element         = pick.element,
                    element_type    = pick.player.element_type,
                    multiplier      = pick.multiplier,
                    is_captain      = pick.is_captain,
                    is_vice_captain = pick.is_vice_captain
                };

                if (pick.element == sub1)
                {
                    subPick.position = sub2Position;
                    if (isSub1Captain)
                    {
                        subPick.is_captain = false;
                    }
                    if (isSub1ViceCaptain)
                    {
                        subPick.is_vice_captain = false;
                    }
                }
                else if (pick.element == sub2)
                {
                    subPick.position = sub1Position;
                    if (isSub1Captain)
                    {
                        subPick.is_captain = true;
                        subPick.multiplier = 2;
                    }
                    if (isSub1ViceCaptain)
                    {
                        subPick.is_vice_captain = true;
                    }
                }
                else
                {
                    subPick.position = pick.position;
                }

                payload.picks.Add(subPick);
            }

            //need to figure out a way to ensure players get put in correct position, currently subs only work if the pick coming on plays in the same position as the pick coming off

            //var picks = payload.picks.Where(x => x.position < 12).OrderBy(x => x.position).ToList();
            var starter = payload.picks.Find(x => x.element == sub1);
            var sub     = payload.picks.Find(x => x.element == sub2);

            payload.picks = AssignStarterPosition(payload.picks.Where(x => x.multiplier > 0).OrderBy(x => x.position).ToList(), starter, sub);

            var json = JsonConvert.SerializeObject(payload);

            handler = ResetHandler(handler);

            response = await _httpClient.PostAuthAsync(handler, $"my-team/{teamId}/", json);

            response.EnsureSuccessStatusCode();

            content = await response.Content.ReadAsStringAsync();

            return(myTeam);
        }
Beispiel #2
0
        public async Task <IActionResult> Index()
        {
            ViewData["Title"] = "My Team";

            var viewModel = new MyTeamViewModel();

            HttpClientHandler handler = new HttpClientHandler();

            int currentGwId = await GetCurrentGameWeekId();

            if (Request.Cookies["teamId"] == null)
            {
                teamId = await GetTeamId();
            }
            else
            {
                teamId = Convert.ToInt32(Request.Cookies["teamId"]);
            }

            var response = await _httpClient.GetAuthAsync(CreateHandler(handler), $"my-team/{teamId}");

            if (!response.IsSuccessStatusCode)
            {
                return(RedirectToAction("Error", "Home"));
            }

            //look for 404 error here

            response.EnsureSuccessStatusCode();

            var content = await response.Content.ReadAsStringAsync();

            var myTeamJSON = JObject.Parse(content);

            MyTeam myTeam = JsonConvert.DeserializeObject <MyTeam>(myTeamJSON.ToString());

            //var teamPicksJSON = AllChildren(myTeamJSON)
            //    .First(c => c.Type == JTokenType.Array && c.Path.Contains("picks"))
            //    .Children<JObject>();

            //JObject transfersObject = (JObject)myTeamJSON["transfers"];
            //TransferInfo transferInfo = transfersObject.ToObject<TransferInfo>();

            List <Pick>           teamPicks         = new List <Pick>();
            List <Pick>           teamPicksLastWeek = new List <Pick>();
            List <Transfer>       transfers         = new List <Transfer>();
            List <PlayerPosition> positions         = new List <PlayerPosition>();

            //foreach (JObject result in teamPicksJSON)
            //{
            //    Pick p = result.ToObject<Pick>();
            //    teamPicks.Add(p);
            //}

            if (currentGwId > 1)
            {
                teamPicksLastWeek = await GetLastWeeksTeam(teamPicksLastWeek, teamId, currentGwId);

                foreach (var p in myTeam.picks)
                {
                    if (teamPicksLastWeek.FindAll(x => x.element == p.element).Count == 0)
                    {
                        p.IsNewTransfer = true;
                    }
                }
            }

            int gameweekId  = currentGwId;
            var eventStatus = await GetEventStatus();

            var lastEvent       = eventStatus.status.LastOrDefault();
            var isEventFinished = false;

            if (lastEvent != null)
            {
                if (lastEvent.bonus_added && eventStatus.leagues != "Updating")
                {
                    isEventFinished = true;
                }
            }

            transfers = await GetTeamTransfers(teamId);

            positions = await GetPlayerPositionInfo();

            myTeam.picks = await AddPlayerSummaryDataToTeam(myTeam.picks, gameweekId);

            myTeam.picks = await AddPlayerGameweekDataToTeam(myTeam.picks, gameweekId);

            myTeam.picks = await CalculateTotalPointsContributed(myTeam.picks, transfers, gameweekId);

            myTeam.picks = myTeam.picks.OrderBy(x => x.position).ToList();
            FPLTeam teamDetails = await GetTeamInfo(teamId);

            var entryHistory = await GetEntryHistory(teamId, currentGwId);

            var completeEntryHistory = new CompleteEntryHistory();

            completeEntryHistory = await GetCompleteEntryHistory(completeEntryHistory, teamId);

            entryHistory = await AddExtraDatatoEntryHistory(entryHistory, completeEntryHistory);

            entryHistory.BuyingPower = CalculateTeamBuyingPower(myTeam.picks, entryHistory);

            viewModel.MyTeam      = myTeam;
            viewModel.CurrentGwId = gameweekId;
            //viewModel.Picks = teamPicks;
            viewModel.Team        = teamDetails;
            viewModel.Positions   = positions;
            viewModel.TotalPoints = teamDetails.summary_overall_points ?? 0;
            //viewModel.TransferInfo = transferInfo;
            viewModel.IsEventFinished      = isEventFinished;
            viewModel.EntryHistory         = entryHistory;
            viewModel.CompleteEntryHistory = completeEntryHistory;
            viewModel.EventStatus          = eventStatus;

            return(View(viewModel));
        }
Beispiel #3
0
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            if (context.Request.Params["action"] == null || context.Request.Params["action"].Trim() == "")
            {
                context.Response.Redirect("~/login.aspx");
            }
            HttpRequest request = context.Request;

            switch (request.Params["action"].ToLower())
            {
            default:
                context.Response.Redirect("~/login.aspx");
                break;

            case "login":
                context.Response.Write(com.Utils.login(request.Form["loginname"], request.Form["pwd"], request.Form["language"]));
                break;

            //case "getmyteamlist":
            //    context.Response.Write(Dao.DataTableToJSON(MyTeam.GetMyTeamList()));
            //    break;
            case "gettree":
                context.Response.Write(Dao.DataTableToJSON(MyTeam.GetMyTeamList(request.Form["UserType"])));
                break;

            case "getdevicesbyuserid":
                context.Response.Write(Dao.DataTableToJSON(MyTeam.getDevicesList(request.Form["UserID"], request.Form["imei"], request.Form["LowerDevice"])));
                break;

            //case "getdevicesbyserialnumber":
            //    context.Response.Write(Dao.DataTableToJSON(MyTeam.getDeviceBySerialNumber(request.Form["SerialNumber"])));
            //    break;
            case "tracking":     //实时跟踪
                context.Response.Write(Dao.DataTableToJSON(MyTeam.Tracking(request.Form["deviceid"], request.Form["userid"])));
                break;

            case "addgeofences":
                context.Response.Write(MyTeam.addGeofences(request.Form["pointData"], request.Form["name"], request.Form["userid"], request.Form["deviceid"], request.Form["south_west"], request.Form["north_east"], request.Form["type"]));
                break;

            case "getgeofencepolygon":
                context.Response.Write(Dao.DataTableToJSON(MyTeam.GetPolygonDetail(request.Params["GID"])));
                break;

            case "getdeviceinfo":
                context.Response.Write(Dao.DataTableToJSON(MyTeam.getDeviceByDeviceID(request.Form["DeviceID"])));
                break;

            case "deletegeofencesbyid":
                context.Response.Write(MyTeam.DeleteGeofences(request.Form["GeofenceID"]));
                break;

            case "getplay":
                String call     = request.Params["callback"];
                String callBack = call + "(\"" + MyTeam.getPlayBack(request.Params["deviceid"], request.Params["startDate"], request.Params["endDate"]) + "\")";
                context.Response.Write(callBack);
                break;

            case "getlushu":
                context.Response.Write(Dao.DataTableToJSON(MyTeam.getPlayBack(request.Form["deviceid"], request.Form["startDate"], request.Form["endDate"], "")));
                break;

            case "alarmtime":     //定时刷新报警信息
                context.Response.Write(Dao.DataTableToJSON(MyTeam.alarmTime(request.Form["userid"], request.Form["lower"])));
                break;

            case "alarm":     // 报警信息列表
                context.Response.Write(com.Dao.DataTableToJSON(MyTeam.getAlarmList(request.Form["userid"], request.Form["lower"], request.Form["status"])));
                break;

            case "allreadonly":
                context.Response.Write(com.MyTeam.AlarmAllReadonly(request.Form["userid"], request.Form["ExceptionID"]));
                break;

            case "remainview":       //运行总览
                context.Response.Write(Dao.DataTableToJSON(MyTeam.GetRemainView(request.Form["u"], request.Form["st"], request.Form["et"])));
                break;

            case "get_statistics_alarmlist":     //统计报表》报警消息
                string UserID    = request.Form["userid"];
                string Model     = request.Form["model"];
                string MsgType   = request.Form["msgtype"];
                string StartTime = request.Form["starttime"];
                string EndTime   = request.Form["endtime"];
                context.Response.Write(Dao.DataTableToJSON(com.MyTeam.GetMessageList(UserID, Model, MsgType, StartTime, EndTime)));
                break;

            case "getdevices":
                context.Response.Write(MyTeam.GetDevicesList(request.Form["u"]));
                break;

            case "searchuserinfo":
                context.Response.Write(Dao.DataTableToJSON(MyTeam.SearchUserInfo(request.Form["userid"])));
                break;

            case "savedeviceuserinfo":
                context.Response.Write(MyTeam.UpdateDeviceUserInfo(request.Form["data"]));
                break;

            case "isplay":     //历史轨迹
                MyTeam.SetIsPlay(request.Form["play"]);
                context.Response.Write("success");
                break;

            case "isexistfence":
                context.Response.Write(MyTeam.IsExistFence(request.Form["deviceid"]));
                break;

            case "lowermsg":
                MyTeam.setLowerMsg(request.Form["LowerMsg"]);
                context.Response.Write("success");
                break;

            //case "getdevicesdetailbydeviceid":
            //    context.Response.Write(Dao.DataTableToJSON(MyTeam.GetDevicesDetailByDeviceID(request.Form["d"])));
            //    break;
            case "getmileage":
                context.Response.Write(Dao.DataTableToJSON(MyTeam.GetMileage(request.Form["yh"], request.Form["dn"], request.Form["st"], request.Form["et"])));
                break;

            case "getspeedreport":     //停留列表,查询SpeedReport表的数据
                context.Response.Write(Dao.DataTableToJSON(MyTeam.GetSpeedReport(request.Form["st"], request.Form["et"], request.Form["dn"])));
                break;

            case "getspeedreportecharts":     // 停留折线图,查询历史轨迹数据,然后算出停留点
                #region 停留详单
                MyTeam    myteam   = new MyTeam();
                string    deviceID = "";
                DataTable dt       = MyTeam.GetSpeedReport(request.Form["st"], request.Form["et"], request.Form["dn"], ref deviceID, request.Form["filter"], " and Speed >= 10 order by DeviceTime");
                if (string.IsNullOrWhiteSpace(request.Form["et"]))     // 结束时间为空就是查询停留折线图数据。
                {
                    context.Response.Write(Dao.DataTableToJSON(dt));
                    break;
                }
                else
                {
                    context.Response.Write(Dao.DataTableToJSON(dt));
                }
                #endregion
                break;

            case "getstopdetail":    //停留详单
                context.Response.Write(Dao.ToJson(MyTeam.GetStopDetail(request.Form["userid"], request.Form["deviceid"], request.Form["starttime"], request.Form["endtime"], request.Form["stopday"], request.Form["wireless"], request.Form["laststop"])));
                break;

            case "getexception":
                context.Response.Write(Dao.DataTableToJSON(MyTeam.GetExceptionAll(request.Form["st"], request.Form["et"], request.Form["dn"])));
                break;

            case "exceptioncount":
                context.Response.Write(Dao.DataTableToJSON(MyTeam.GetExceptionView(request.Form["st"], request.Form["et"], request.Form["dn"])));
                break;

            case "getexceptiontype":
                context.Response.Write(Dao.DataTableToJSON(MyTeam.GetExceptionType()));
                break;

            case "getexctptiondetail":
                context.Response.Write(Dao.DataTableToJSON(MyTeam.GetExctptionDetail(request.Form["st"], request.Form["et"], request.Form["t"], request.Form["dn"])));
                break;

            case "getfencesview":
                context.Response.Write(Dao.DataTableToJSON(MyTeam.GetFencesView(request.Form["st"], request.Form["et"], request.Form["dn"])));
                break;

            case "getcurrentuserdevicesname":
                context.Response.Write(Dao.DataTableToJSON(MyTeam.GetCurrentUserDeviceName(request.Form["userid"])));
                break;

            case "getuserinfobyuserid":
                context.Response.Write(Dao.DataTableToJSON(MyTeam.GetUserInfoByUserID(request.Form["UserID"])));
                break;

            case "updateuserinfo":
                context.Response.Write(MyTeam.UpdateUserInfo(request.Form["data"]));
                break;

            case "importexcel":     //导出excel
                //context.Response.Write(MyTeam.ImportExcel(request.Form["type"], request.Form["st"], request.Form["et"], request.Form["dn"], request.Form["emtype"], request.Form["yh"], request.Form["userid"]));
                context.Response.Write(MyTeam.ImportExcel(context));
                break;

            case "alldevicemodel":
                context.Response.Write(Dao.DataTableToJSON(MyTeam.GetDeviceModel()));
                break;

            case "getuserdeviceinfo":     //设备统计
                context.Response.Write(MyTeam.GetUserDeviceInfo(request.Params["model"], request.Params["st"], request.Params["et"]));
                break;

            case "getonlinedevicelist":     //离线设备统计
                context.Response.Write(Dao.ToJson(MyTeam.GetOnlineDeviceList(request.Form["userid"], request.Form["starttime"], request.Form["endtime"], request.Form["hour"])));
                break;

            case "getdevicehireexpire":
                context.Response.Write(MyTeam.GetDeviceHireExpire(request.Params["day"], request.Params["uid"], request.Params["t"], request.Params["current"], request.Params["rowCount"], request.Form["sortBy"] + " " + request.Params["sortDir"], request.Params["searchPhrase"], request.Params["byUser"]));
                break;

            case "getofflinedevice":
                context.Response.Write(Dao.DataTableToJSON(MyTeam.GetOfflineDeviceList(request.Form["uid"], request.Form["model"], request.Form["stime"], request.Form["et"], request.Form["t"], request.Params["current"], request.Params["rowCount"], request.Params[""], request.Params["searchPhrase"])));
                break;

            case "getusersofflinedeviccount":
                context.Response.Write(Dao.DataTableToJSON(MyTeam.GetUsersOffLineDevicCount()));
                break;

            case "newgroup":
                context.Response.Write(MyTeam.NewGroup(request.Form["groupName"], request.Form["userid"]));
                break;

            case "delgroup":
                context.Response.Write(MyTeam.DelGroup(request.Form["GroupID"]));
                break;

            case "updategroup":
                context.Response.Write(MyTeam.UpdateGroup(request.Form["GroupID"], request.Form["GroupName"]));
                break;

            case "updatedevicegroupid":
                context.Response.Write(MyTeam.UpdateDeviceGroupID(request.Form["toGroupID"], request.Form["SerialNumber"]));
                break;

            case "getdeviceinfobyserialnumber":      // 根据deviceid获取设备信息
                context.Response.Write(Dao.DataTableToJSON(MyTeam.GetDeviceInfoBySerialNumber(request.Form["DeviceID"])));
                break;

            case "upload":     //导入excel文件(导入设备,导入SIM卡等)
                context.Response.Write(MyTeam.UploadFile(context));
                break;

            case "savedeviceinfo":
                context.Response.Write(MyTeam.UpdateDevicInfo(request.Form["UpdateData"]));
                break;

            case "sendcommand":      //发送指令
                context.Response.Write(MyTeam.SendCommand(request.Form["data"]));
                break;

            case "getresponse":     //获取发送密令的返回结果
                context.Response.Write(MyTeam.GetCommandResponse(request.Form["CommandID"], request.Form["TimeZones"]));
                break;

            case "resetpwd":
                context.Response.Write(MyTeam.ResetDevicePassword(request.Form["deviceid"]));
                break;

            case "deletedevice":      //删除设备
                context.Response.Write(MyTeam.DeleteDevice(request.Form["deviceid"], request.Form["Destroy"]));
                break;

            case "recoverydevices":     //恢复已删除的设备
                context.Response.Write(MyTeam.RecoveryDevices(request.Form["data"], request.Form["isClaerAll"]));
                break;

            case "deviceshiftorexpire":
                if (request.Form["operType"] == "shift")
                {
                    context.Response.Write(MyTeam.DeviceShiftOrExpire(request.Form["devices"], toUserID: request.Form["toUserID"]));
                }
                else
                {
                    context.Response.Write(MyTeam.DeviceShiftOrExpire(request.Form["devices"], day: request.Form["day"]));
                }
                break;

            case "deleteuser":
                context.Response.Write(MyTeam.DeleteUsers(request.Form["UserID"]));
                break;

            case "adddevice":
                context.Response.Write(MyTeam.AddDevice(request.Form["data"]));
                break;

            case "clearallmessage":
                context.Response.Write(MyTeam.ClearAllMessage(request.Form["UserID"]));
                break;

            case "updatepassword":
                context.Response.Write(MyTeam.UpdatePassword(request.Form["NewPassword"], request.Form["OldPassword"]));
                break;

            case "searchdevices":
                context.Response.Write(Dao.DataTableToJSON(MyTeam.SearchDevices(request.Form["SearchText"])));
                break;

            case "searchusers":
                context.Response.Write(Dao.DataTableToJSON(MyTeam.SearchUsers(request.Form["SearchText"])));
                break;

            case "settingmsgtype":
                context.Response.Write(MyTeam.SettingShowExceptionMsgType(request.Form["MsgID"], request.Form["UserID"]));
                break;

            case "getsettingmsgtype":
                context.Response.Write(MyTeam.GetSettingShowExceptionMsgType(request.Form["UserID"]));
                break;

            case "getaddressbylatlng":
                context.Response.Write(MyTeam.GetAddressByLatlng(request.Form["lat"], request.Form["lng"]));
                break;

            case "downloadgooglekml":
                context.Response.Write(MyTeam.DownloadLocation(request.Form["DeviceID"], request.Form["Date"]));
                break;

            case "addusers":
                context.Response.Write(MyTeam.addUsers(context));
                break;

            case "shiftusers":
                context.Response.Write(MyTeam.ShiftUsers(request.Form["UserID"], request.Form["toUserID"]));
                break;

            case "getcommandlist":
                context.Response.Write(Dao.DataTableToJSON(MyTeam.GetCommandList(request.Form["DeviceID"])));
                break;

            case "imeibatch":
                Utils.strImeiBatch = request.Form["Imeis"];
                context.Response.Write("");
                break;

            case "getdeleteddevices":
                context.Response.Write(MyTeam.GetDeletedDevices(request["current"], request["rowCount"], request.Form["sortBy"] + " " + request.Params["sortDir"], request["searchPhrase"]));
                break;

            case "renewalsexport":
                string date = request["date"];
                context.Response.Write(MyTeam.GetRenewalsExport(request["userid"], date.Split('~')[0].Trim(), date.Split('~')[1].Trim(), Convert.ToInt32(request["current"]), request["rowcount"], request.Form["sortBy"] + " " + request.Params["sortDir"], request["searchphrase"]));
                break;

            case "getgroups":
                context.Response.Write(Dao.DataTableToJSON(MyTeam.GetGroups(request.Form["uid"])));
                break;

            case "getexceptionmessagecount":
                context.Response.Write(Dao.DataTableToJSON(MyTeam.GetExceptionMessageCount(request.Form["deviceid"], request.Form["st"], request.Form["et"])));
                break;

            case "adddevicegps":
                //设备列表上面的添加设备功能(实际上是把这次添加的几台设备快速分到新建的分组里面)
                context.Response.Write(MyTeam.AddDevicesList(request["carnum"], request["carusername"], request["cellphone"], request["description"], request["devicelist"]));
                break;

            case "mgoologin":     //江西赣州登录接口
                callBack = request.Params["callback"];
                string loginname = request.Params["loginname"];
                string pwd       = request.Params["pwd"];
                string language  = request.Params["language"];
                string reulst    = callBack + "('" + com.Utils.mgooLogin(loginname, pwd, language) + "')";
                context.Response.Write(reulst);
                break;
            }
        }
 public async Task CreateTeam(MyTeam team)
 {
     _context.Add(team);
     await _context.SaveChangesAsync();
 }
 public AllegianceType GetAllegiance(AgentController otherController)
 {
     return(HasTeam && otherController.HasTeam ? MyTeam.GetAllegiance(otherController) : DiplomacyFlags[otherController.ControllerID]);
 }
Beispiel #6
0
    public void SyncGame()
    {
        string[] inputs;

        inputs = Console.ReadLine().Split(' ');
        MyTeam.Update(int.Parse(inputs[0]), int.Parse(inputs[1]));

        inputs = Console.ReadLine().Split(' ');
        OpponentTeam.Update(int.Parse(inputs[0]), int.Parse(inputs[1]));

        SetSnaffleStillExistToFalse();

        int nb_entities = int.Parse(Console.ReadLine());         // number of entities still in game

        for (int i = 0; i < nb_entities; i++)
        {
            inputs = Console.ReadLine().Split(' ');

            int     entityId   = int.Parse(inputs[0]);
            string  entityType = inputs[1];                     // "WIZARD", "OPPONENT_WIZARD" or "SNAFFLE" or "BLUDGER"
            Vector2 position   = new Vector2(int.Parse(inputs[2]), int.Parse(inputs[3]));
            Vector2 velocity   = new Vector2(int.Parse(inputs[4]), int.Parse(inputs[5]));
            int     state      = int.Parse(inputs[6]);

            Entity actualElement = this.Entities.Find(e => e.Id == entityId);
            switch (entityType)
            {
            case "WIZARD":
                if (actualElement is Wizard e)
                {
                    e.Update(position, velocity, Convert.ToBoolean(state));
                }
                else
                {
                    this.Entities.Add(
                        new Wizard(entityId, entityType, position, velocity,
                                   Convert.ToBoolean(state)));
                }
                break;

            case "OPPONENT_WIZARD":
                if (actualElement is Wizard oe)
                {
                    oe.Update(position, velocity, Convert.ToBoolean(state));
                }
                else
                {
                    this.Entities.Add(
                        new Wizard(entityId, entityType, position, velocity, Convert.ToBoolean(state)));
                }
                break;

            case "SNAFFLE":
                if (actualElement is Snaffle s)
                {
                    s.Update(position, velocity, Convert.ToBoolean(state));
                }
                else
                {
                    this.Entities.Add(
                        new Snaffle(entityId, entityType, position, velocity, Convert.ToBoolean(state)));
                }
                break;

            case "BLUDGER":
                if (actualElement is Bludger b)
                {
                    b.Update(position, velocity, state);
                }
                else
                {
                    this.Entities.Add(
                        new Bludger(entityId, entityType, position, velocity, state));
                }
                break;

            default:
                break;
            }
        }
        this.Entities = this.Entities.OrderBy(e => e.Id).ToList();
        ComputeAdditionalInfos();
    }
Beispiel #7
0
        public void Move(Car self, World world, Game game, Move move)
        {
            TimerStart();
            MyStrategy.world = world;
            Const.Game       = game;
            this.move        = move;
            this.self        = self;
            Initialize();

#if DEBUG
            while (Visualizer.Pause)
            {
                // pause here
            }
            Visualizer.CreateForm(world.Cars.Count(x => x.IsTeammate));
#endif
            if (!self.IsFinishedTrack)
            {
                All    = null;
                MyTeam = null;

                _move();

                if (OpponentsCars != null)
                {
                    var myTeam = new List <ACar[]>();
                    if (!ComputedPath.ContainsKey(self.Id))
                    {
                        ComputedPath[self.Id] = new int[MagicConst.OpponentsTicksPrediction].Select(x => new ACar(self)).ToArray();
                    }
                    myTeam.Add(ComputedPath[self.Id]);
                    if (TeammateCar != null)
                    {
                        myTeam.Add(TeammateCar);
                    }
                    MyTeam = myTeam.ToArray();

                    All = MyTeam.Concat(OpponentsCars).ToArray();

                    TimerStart();
                    if (CheckUseProjectile())
                    {
                        move.IsThrowProjectile = true;
                    }
                    if (CheckUseOil())
                    {
                        move.IsSpillOil = true;
                    }

                    TimerEndLog("CheckUseProjectile", 2);
                }
            }
            else if (_finishTime == Infinity)
            {
                _finishTime = world.Tick;
            }
            if (_finishTime < Infinity)
            {
                Log(_finishTime);
            }

#if DEBUG
            if (move.IsBrake)
            {
                Visualizer.CircleFillQueue.Add(new Tuple <Brush, ACircularUnit>(Brushes.Red,
                                                                                new ACircularUnit {
                    X = self.X, Y = self.Y, Radius = 30
                }));
            }


            TimerEndLog("All");

            if (Brutes != null)
            {
                for (var i = 0; i < Brutes.Length; i++)
                {
                    var info = Brutes[i].GetMaxTicksInfo();
                    if (info == null)
                    {
                        continue;
                    }
                    Console.Write(i + ": ");
                    foreach (var a in info)
                    {
                        Console.Write(" " + a);
                    }
                    Console.WriteLine("(" + Brutes[i].SelectedCount + ")");
                }
            }
            Console.WriteLine();
            Visualizer.Draw();
            Thread.Sleep(12);
#endif
        }