public void Read(System.IO.BinaryReader inFile) { PlayerRecords.Clear(); StageRecords.Clear(); ushort version = inFile.ReadUInt16(); int playerCount = inFile.ReadInt32(); for (int playerIndex = 0; playerIndex < playerCount; ++playerIndex) { PlayerRecord playerRec = new PlayerRecord(); playerRec.Read(inFile, version); PlayerRecords.Add(playerRec.Player_ID, playerRec); } int stageCount = inFile.ReadInt32(); for (int stageIndex = 0; stageIndex < stageCount; ++stageIndex) { StageData stageData = new StageData(); stageData.Read(inFile, version); StageRecords.Add(stageData); } if (version == 1) { foreach (PlayerRecord rec in PlayerRecords.Values) { if (rec.Draft_Class == 0 && rec.Entries.Count > 0) { rec.Draft_Class = StageRecords[rec.Entries[0].StageIndex].Season; } } } }
private void CalculatePositionRating(PlayerListData data) { PlayerRecord rec = m_ProgressData.PlayerRecords[data.ID]; string position = rec.Entries[0].Position; if (position == "LS") { return; } CalculateCombineRating(data, position); DataReader.DraftWeights.GlobalWeightData globalData = m_Weights.GlobalWeights; DataReader.DraftWeights.PositionWeights posWeights = null; if (rec.Solecismic != 0 && rec.Dash != 0.0 && rec.Strength != 0 && rec.Agility != 0.0 && rec.Jump != 0) { posWeights = m_Weights.GetPositionWeight(position); } else { posWeights = m_Weights.GetNoCombinePositionWeight(position); } double attributesFactor = 0.0; int[] attributeIndices = m_FOFData.PositionGroupAttributes[rec.Entries[0].Position_Group]; for (int attNum = 0; attNum < attributeIndices.Length; ++attNum) { int attIndex = attributeIndices[attNum]; if (rec.DraftLowBars[attIndex] == 255 || rec.DraftHighBars[attIndex] == 255) { continue; } switch (globalData.WhichAttributesToUse) { case DataReader.DraftWeights.AttributeUsage.UseMin: { attributesFactor += ((double)(rec.DraftLowBars[attIndex] * posWeights.Attributes[attNum])) * 0.01; } break; case DataReader.DraftWeights.AttributeUsage.UseAverage: { attributesFactor += ((double)((rec.DraftLowBars[attIndex] + rec.DraftHighBars[attIndex]) * posWeights.Attributes[attNum])) * 0.005; } break; case DataReader.DraftWeights.AttributeUsage.UseMax: { attributesFactor += ((double)(rec.DraftHighBars[attIndex] * posWeights.Attributes[attNum])) * 0.01; } break; } } data.AttributeScore = attributesFactor; data.PositionWeight = posWeights.Weight; data.OverallScore = data.CombineScore + data.AttributeScore; }
private void CalculateCombineRating(PlayerListData data, string position) { PlayerRecord rec = m_ProgressData.PlayerRecords[data.ID]; data.SolecismicRating = 0.0; data.FortyRating = 0.0; data.AgilityRating = 0.0; data.BenchRating = 0.0; data.BroadJumpRating = 0.0; data.PositionDrillRating = 0.0; SolidColorBrush foreground; string positionGroup = m_FOFData.PositionToPositionGroupMap[position]; int positionIndex = m_FOFData.PositionGroupOrderMap[positionGroup]; ColorCombine(data.CombineSolecismic, (int)DataReader.FOFData.CombineOrder.Solecismic, positionIndex, out foreground); data.SolecismicForeground = foreground; ColorCombine(data.CombineAgility, (int)DataReader.FOFData.CombineOrder.Agility, positionIndex, out foreground); data.AgilityForeground = foreground; ColorCombine(data.CombineBench, (int)DataReader.FOFData.CombineOrder.Bench, positionIndex, out foreground); data.BenchForeground = foreground; ColorCombine(data.CombineBroadJump, (int)DataReader.FOFData.CombineOrder.BroadJump, positionIndex, out foreground); data.BroadJumpForeground = foreground; ColorCombine(data.CombineForty, (int)DataReader.FOFData.CombineOrder.Dash, positionIndex, out foreground); data.FortyForeground = foreground; ColorCombine(data.CombinePositionDrill, (int)DataReader.FOFData.CombineOrder.PositionDrill, positionIndex, out foreground); data.PositionDrillForeground = foreground; if (rec.Solecismic == Byte.MaxValue) { // Do nothing, no combines, leave at 0 } else if (rec.Solecismic != 0 && rec.Dash != 0.0 && rec.Strength != 0 && rec.Agility != 0.0 && rec.Jump != 0) { DataReader.DraftWeights.PositionWeights posWeights = m_Weights.GetPositionWeight(position); int combineIndex = (int)DataReader.FOFData.CombineOrder.Solecismic; ushort threshold = m_FOFData.CombineThresholds[positionIndex, combineIndex]; double average = m_FOFData.CombineAverages[positionIndex, combineIndex]; double stdDev = m_FOFData.CombineStandardDeviations[positionIndex, combineIndex]; if (threshold > 0 && rec.Solecismic < threshold) { data.SolecismicRating = m_Weights.GlobalWeights.CombineThresholdPenalty; } else { data.SolecismicRating = ((((double)rec.Solecismic) - average) / stdDev) * posWeights.Solecismic; } combineIndex = (int)DataReader.FOFData.CombineOrder.Dash; threshold = m_FOFData.CombineThresholds[positionIndex, combineIndex]; average = m_FOFData.CombineAverages[positionIndex, combineIndex]; stdDev = -m_FOFData.CombineStandardDeviations[positionIndex, combineIndex]; if (threshold > 0 && rec.Dash > threshold) { data.FortyRating = m_Weights.GlobalWeights.CombineThresholdPenalty; } else { data.FortyRating = ((((double)rec.Dash / 100.0) - average) / stdDev) * posWeights.Dash; } combineIndex = (int)DataReader.FOFData.CombineOrder.Bench; threshold = m_FOFData.CombineThresholds[positionIndex, combineIndex]; average = m_FOFData.CombineAverages[positionIndex, combineIndex]; stdDev = m_FOFData.CombineStandardDeviations[positionIndex, combineIndex]; if (threshold > 0 && rec.Strength < threshold) { data.BenchRating = m_Weights.GlobalWeights.CombineThresholdPenalty; } else { data.BenchRating = ((((double)rec.Strength) - average) / stdDev) * posWeights.Bench; } combineIndex = (int)DataReader.FOFData.CombineOrder.Agility; threshold = m_FOFData.CombineThresholds[positionIndex, combineIndex]; average = m_FOFData.CombineAverages[positionIndex, combineIndex]; stdDev = -m_FOFData.CombineStandardDeviations[positionIndex, combineIndex]; if (threshold > 0 && rec.Agility > threshold) { data.AgilityRating = m_Weights.GlobalWeights.CombineThresholdPenalty; } else { data.AgilityRating = ((((double)rec.Agility / 100.0) - average) / stdDev) * posWeights.Agility; } combineIndex = (int)DataReader.FOFData.CombineOrder.BroadJump; threshold = m_FOFData.CombineThresholds[positionIndex, combineIndex]; average = m_FOFData.CombineAverages[positionIndex, combineIndex]; stdDev = m_FOFData.CombineStandardDeviations[positionIndex, combineIndex]; if (threshold > 0 && rec.Jump < threshold) { data.BenchRating = m_Weights.GlobalWeights.CombineThresholdPenalty; } else { data.BroadJumpRating = ((((double)rec.Jump) - average) / stdDev) * posWeights.BroadJump; } combineIndex = (int)DataReader.FOFData.CombineOrder.PositionDrill; threshold = m_FOFData.CombineThresholds[positionIndex, combineIndex]; average = m_FOFData.CombineAverages[positionIndex, combineIndex]; stdDev = m_FOFData.CombineStandardDeviations[positionIndex, combineIndex]; if (stdDev != 0.0) { if (threshold > 0 && rec.Position_Specific < threshold) { data.PositionDrillRating = m_Weights.GlobalWeights.CombineThresholdPenalty; } else { data.PositionDrillRating = ((((double)rec.Position_Specific) - average) / stdDev) * posWeights.PositionDrill; } } } else { int combineIndex = (int)DataReader.FOFData.CombineOrder.Solecismic; ushort threshold = m_FOFData.CombineThresholds[positionIndex, combineIndex]; double average = m_FOFData.CombineAverages[positionIndex, combineIndex]; double stdDev = m_FOFData.CombineStandardDeviations[positionIndex, combineIndex]; DataReader.DraftWeights.PositionWeights posWeights = m_Weights.GetNoCombinePositionWeight(position); if (stdDev != 0.0 && rec.Solecismic != 0) { if (threshold > 0 && rec.Solecismic < threshold) { data.SolecismicRating = m_Weights.GlobalWeights.CombineThresholdPenalty; } else { data.SolecismicRating = ((((double)rec.Solecismic) - average) / stdDev) * posWeights.Solecismic; } } combineIndex = (int)DataReader.FOFData.CombineOrder.PositionDrill; threshold = m_FOFData.CombineThresholds[positionIndex, combineIndex]; average = m_FOFData.CombineAverages[positionIndex, combineIndex]; stdDev = m_FOFData.CombineStandardDeviations[positionIndex, combineIndex]; if (stdDev != 0.0 && rec.Position_Specific != 0) { if (threshold > 0 && rec.Position_Specific < threshold) { data.PositionDrillRating = m_Weights.GlobalWeights.CombineThresholdPenalty; } else { data.PositionDrillRating = ((((double)rec.Position_Specific) - average) / stdDev) * posWeights.PositionDrill; } } } data.CombineScore = data.SolecismicRating + data.FortyRating + data.AgilityRating + data.BenchRating + data.BroadJumpRating + data.PositionDrillRating; }