/// <summary> /// Section "Camp Supremacy" /// </summary> /// <param name="oImage"></param> /// <param name="oGraphics"></param> /// <param name="oMatch"></param> /// <param name="oWeek"></param> /// <returns></returns> private string RenderCampSupremacy(ref Image oImage, ref Graphics oGraphics, Model.Database.Match oMatch, Model.Database.Week oWeek) { string cRetVal = "x"; Dictionary<short, long> oDictCountCampFlipsByWorldID = null; List<short> oLstWorldsOrder; RectangleF oRectangleFlipsFirstName; RectangleF oRectangleFlipsFirstValue; RectangleF oRectangleFlipsSecondName; RectangleF oRectangleFlipsSecondValue; RectangleF oRectangleFlipsThirdName; RectangleF oRectangleFlipsThirdValue; RectangleF oRectangleFlipsTotal; RectangleF oRectanglePossessionFirstName; RectangleF oRectanglePossessionFirstValue; RectangleF oRectanglePossessionSecondName; RectangleF oRectanglePossessionSecondValue; RectangleF oRectanglePossessionThirdName; RectangleF oRectanglePossessionThirdValue; RectangleF oRectanglePossessionAverage; RectangleF oRectangleMostCampsFlipped; RectangleF oRectangleMostCampsFlippedValue; StringFormat oFormatFlips; StringFormat oFormatPossession; StringFormat oFormatMostCampsFlipped; Dictionary<short, List<Model.Timespans.ObjectiveTimespan>> oDictTimespans; List<Model.Additional.Objective_Owner_Change_Extended> oLstOwnerChanges; Dictionary<short, List<TimeSpan>> oDictTimespansProWelt; Dictionary<short, double> oDictAverageSeconds; Dictionary<short, TimeSpan> oDictAverageTimespans; Model.Timespans.ObjectiveTimespan oTimespan; TimeSpan oTimespanAll; int nAnzTimespans = 0; Model.Additional.CountObjectiveID oTopCamp; try { SetLoadingLabelCurrents("Camp Supremacy...", 4, ANZ_SCHRITTE); oDictCountCampFlipsByWorldID = DBWRAPPER.GetCampsFuerMatchID(oMatch.ID); oLstWorldsOrder = oDictCountCampFlipsByWorldID.Keys.OrderByDescending(x => oDictCountCampFlipsByWorldID[x]).ToList(); //Flips oRectangleFlipsFirstName = new RectangleF(163, m_oDictWelten[oLstWorldsOrder[0]].NAME.Length > 17 ? 1763 : 1760, 790, 100); oRectangleFlipsFirstValue = new RectangleF(158, 1800, 790, 100); oRectangleFlipsSecondName = new RectangleF(163, m_oDictWelten[oLstWorldsOrder[1]].NAME.Length > 17 ? 1843 : 1840, 790, 100); oRectangleFlipsSecondValue = new RectangleF(158, 1880, 790, 100); oRectangleFlipsThirdName = new RectangleF(163, m_oDictWelten[oLstWorldsOrder[2]].NAME.Length > 17 ? 1923 : 1920, 790, 100); oRectangleFlipsThirdValue = new RectangleF(158, 1960, 790, 100); oRectangleFlipsTotal = new RectangleF(158, 1993, 790, 100); oFormatFlips = new StringFormat(); oFormatFlips.Alignment = StringAlignment.Far; oGraphics.DrawString(m_oDictWelten[oLstWorldsOrder[0]].NAME, new Font("Caviar Dreams", m_oDictWelten[oLstWorldsOrder[0]].NAME.Length > 17 ? 30 : 40, FontStyle.Regular), Brushes.White, oRectangleFlipsFirstName, oFormatFlips); oGraphics.DrawString(string.Format("{0} camp{1} captured", oDictCountCampFlipsByWorldID[oLstWorldsOrder[0]], oDictCountCampFlipsByWorldID[oLstWorldsOrder[0]] == 1 ? "" : "s"), new Font("Caviar Dreams", 25, FontStyle.Regular), Brushes.White, oRectangleFlipsFirstValue, oFormatFlips); oGraphics.DrawString(m_oDictWelten[oLstWorldsOrder[1]].NAME, new Font("Caviar Dreams", m_oDictWelten[oLstWorldsOrder[1]].NAME.Length > 17 ? 30 : 40, FontStyle.Regular), Brushes.White, oRectangleFlipsSecondName, oFormatFlips); oGraphics.DrawString(string.Format("{0} camp{1} captured", oDictCountCampFlipsByWorldID[oLstWorldsOrder[1]], oDictCountCampFlipsByWorldID[oLstWorldsOrder[1]] == 1 ? "" : "s"), new Font("Caviar Dreams", 25, FontStyle.Regular), Brushes.White, oRectangleFlipsSecondValue, oFormatFlips); oGraphics.DrawString(m_oDictWelten[oLstWorldsOrder[2]].NAME, new Font("Caviar Dreams", m_oDictWelten[oLstWorldsOrder[1]].NAME.Length > 17 ? 30 : 40, FontStyle.Regular), Brushes.White, oRectangleFlipsThirdName, oFormatFlips); oGraphics.DrawString(string.Format("{0} camp{1} captured", oDictCountCampFlipsByWorldID[oLstWorldsOrder[2]], oDictCountCampFlipsByWorldID[oLstWorldsOrder[2]] == 1 ? "" : "s"), new Font("Caviar Dreams", 25, FontStyle.Regular), Brushes.White, oRectangleFlipsThirdValue, oFormatFlips); oGraphics.DrawString(string.Format("{0} camp{1} captured in total", oLstWorldsOrder.Sum(x => oDictCountCampFlipsByWorldID[x]), oDictCountCampFlipsByWorldID[oLstWorldsOrder[2]] == 1 ? "" : "s"), new Font("Caviar Dreams", 25, FontStyle.Bold), Brushes.White, oRectangleFlipsTotal, oFormatFlips); //Possession oLstOwnerChanges = DBWRAPPER.GetObjectiveOwnerChangesFuerObjectiveType(oMatch.ID, 5); //oLstOwnerChanges = oLstOwnerChanges.OrderBy(x => x.TIME).ToList(); Dictionary<short, List<Model.Additional.Objective_Owner_Change_Extended>> oDictOwnerChanges = oLstOwnerChanges.GroupBy(x => x.OBJECTIVE_ID).ToDictionary(k => k.Key, y => y.ToList()); oDictTimespans = new Dictionary<short, List<Model.Timespans.ObjectiveTimespan>>(); foreach (KeyValuePair<short, List<Model.Additional.Objective_Owner_Change_Extended>> oKVPObjective in oDictOwnerChanges) { foreach (Model.Additional.Objective_Owner_Change_Extended oChange in oKVPObjective.Value) { if (!oDictTimespans.ContainsKey(oChange.OBJECTIVE_ID)) { oDictTimespans.Add(oChange.OBJECTIVE_ID, new List<Model.Timespans.ObjectiveTimespan>()); } if (oKVPObjective.Value.IndexOf(oChange) == 0) { //Erster oTimespan = new Model.Timespans.ObjectiveTimespan(); oTimespan.Anfang = oChange.TIME; oTimespan.Owner = m_oDictWelten[oChange.WORLD_ID]; oTimespan.Objective = m_oLstObjectives.Single(x => x.ID == oChange.OBJECTIVE_ID); oDictTimespans[oChange.OBJECTIVE_ID].Add(oTimespan); } else if (oChange != oKVPObjective.Value.Last()) { //Alle außer letzter oDictTimespans[oChange.OBJECTIVE_ID][oKVPObjective.Value.IndexOf(oChange) - 1].Ende = oChange.TIME; oTimespan = new Model.Timespans.ObjectiveTimespan(); oTimespan.Anfang = oChange.TIME; oTimespan.Objective = m_oLstObjectives.Single(x => x.ID == oChange.OBJECTIVE_ID); oTimespan.Owner = m_oDictWelten[oChange.WORLD_ID]; oDictTimespans[oChange.OBJECTIVE_ID].Add(oTimespan); } else { //Letzer oDictTimespans[oChange.OBJECTIVE_ID][oKVPObjective.Value.IndexOf(oChange) - 1].Ende = oChange.TIME; oTimespan = new Model.Timespans.ObjectiveTimespan(); oTimespan.Anfang = oChange.TIME; oTimespan.Objective = m_oLstObjectives.Single(x => x.ID == oChange.OBJECTIVE_ID); oTimespan.Owner = m_oDictWelten[oChange.WORLD_ID]; oTimespan.Ende = oWeek.END_TIME; oDictTimespans[oChange.OBJECTIVE_ID].Add(oTimespan); } } } foreach (KeyValuePair<short, List<Model.Timespans.ObjectiveTimespan>> oKVPObjective in oDictTimespans) { oKVPObjective.Value.RemoveAll(x => x.Dauer.TotalSeconds < 290); } oDictTimespansProWelt = new Dictionary<short, List<TimeSpan>>(); foreach (KeyValuePair<short, List<Model.Timespans.ObjectiveTimespan>> oKVPObjective in oDictTimespans) { foreach (Model.Timespans.ObjectiveTimespan oTimespanObjective in oKVPObjective.Value) { if (!oDictTimespansProWelt.ContainsKey(oTimespanObjective.Owner.ID)) { oDictTimespansProWelt.Add(oTimespanObjective.Owner.ID, new List<TimeSpan>()); } oDictTimespansProWelt[oTimespanObjective.Owner.ID].Add(oTimespanObjective.Dauer); } } oDictAverageSeconds = new Dictionary<short, double>(); oDictAverageTimespans = new Dictionary<short, TimeSpan>(); oTimespanAll = new TimeSpan(); foreach (KeyValuePair<short, List<TimeSpan>> oKVPWorld in oDictTimespansProWelt) { oDictAverageSeconds.Add(oKVPWorld.Key, 0); oDictAverageTimespans.Add(oKVPWorld.Key, new TimeSpan()); foreach (TimeSpan oTimespanInDict in oKVPWorld.Value) { oDictAverageSeconds[oKVPWorld.Key] += oTimespanInDict.TotalSeconds; oTimespanAll += oTimespanInDict; nAnzTimespans++; } oDictAverageTimespans[oKVPWorld.Key] = new TimeSpan(0, 0, Convert.ToInt32(Math.Floor(oDictAverageSeconds[oKVPWorld.Key] / oKVPWorld.Value.Count))); } oDictAverageTimespans = oDictAverageTimespans.OrderByDescending(x => x.Value).ToDictionary(k => k.Key, v => v.Value); oLstWorldsOrder = oDictAverageTimespans.Keys.ToList(); oRectanglePossessionFirstName = new RectangleF(58, m_oDictWelten[oLstWorldsOrder[0]].NAME.Length > 17 ? 1763 : 1760, 800, 100); oRectanglePossessionFirstValue = new RectangleF(60, 1800, 800, 100); oRectanglePossessionSecondName = new RectangleF(58, m_oDictWelten[oLstWorldsOrder[1]].NAME.Length > 17 ? 1843 : 1840, 800, 100); oRectanglePossessionSecondValue = new RectangleF(60, 1880, 800, 100); oRectanglePossessionThirdName = new RectangleF(58, m_oDictWelten[oLstWorldsOrder[2]].NAME.Length > 17 ? 1923 : 1920, 800, 100); oRectanglePossessionThirdValue = new RectangleF(60, 1960, 800, 100); oRectanglePossessionAverage = new RectangleF(60, 1993, 800, 100); oFormatPossession = new StringFormat(); oFormatPossession.Alignment = StringAlignment.Near; oGraphics.DrawString(m_oDictWelten[oLstWorldsOrder[0]].NAME, new Font("Caviar Dreams", m_oDictWelten[oLstWorldsOrder[0]].NAME.Length > 17 ? 30 : 40, FontStyle.Regular), Brushes.Black, oRectanglePossessionFirstName, oFormatPossession); oGraphics.DrawString(GetTimespanAsString(oDictAverageTimespans[oLstWorldsOrder[0]]), new Font("Caviar Dreams", 25, FontStyle.Regular), Brushes.Black, oRectanglePossessionFirstValue, oFormatPossession); oGraphics.DrawString(m_oDictWelten[oLstWorldsOrder[1]].NAME, new Font("Caviar Dreams", m_oDictWelten[oLstWorldsOrder[1]].NAME.Length > 17 ? 30 : 40, FontStyle.Regular), Brushes.Black, oRectanglePossessionSecondName, oFormatPossession); oGraphics.DrawString(GetTimespanAsString(oDictAverageTimespans[oLstWorldsOrder[1]]), new Font("Caviar Dreams", 25, FontStyle.Regular), Brushes.Black, oRectanglePossessionSecondValue, oFormatPossession); oGraphics.DrawString(m_oDictWelten[oLstWorldsOrder[2]].NAME, new Font("Caviar Dreams", m_oDictWelten[oLstWorldsOrder[2]].NAME.Length > 17 ? 30 : 40, FontStyle.Regular), Brushes.Black, oRectanglePossessionThirdName, oFormatPossession); oGraphics.DrawString(GetTimespanAsString(oDictAverageTimespans[oLstWorldsOrder[2]]), new Font("Caviar Dreams", 25, FontStyle.Regular), Brushes.Black, oRectanglePossessionThirdValue, oFormatPossession); oGraphics.DrawString(GetTimespanAsString(new TimeSpan(0, 0, Convert.ToInt32(oTimespanAll.TotalSeconds / nAnzTimespans))) + " average", new Font("Caviar Dreams", 25, FontStyle.Bold), Brushes.Black, oRectanglePossessionAverage, oFormatPossession); //Most flipped oTopCamp = DBWRAPPER.GetTopCamp(oMatch.ID); oRectangleMostCampsFlipped = new RectangleF(0, 2163, 1000, 100); oRectangleMostCampsFlippedValue = new RectangleF(0, 2218, 1000, 100); oFormatMostCampsFlipped = new StringFormat(); oFormatMostCampsFlipped.Alignment = StringAlignment.Center; oGraphics.DrawString(m_oLstObjectives.Single(x => x.ID == oTopCamp.OBJECTIVE_ID).ALT_NAME, new Font("Caviar Dreams", 50, FontStyle.Regular), Brushes.White, oRectangleMostCampsFlipped, oFormatMostCampsFlipped); oGraphics.DrawString(string.Format("flipped {0} times over the course of the week", oTopCamp.COUNT), new Font("Caviar Dreams", 25, FontStyle.Regular), Brushes.White, oRectangleMostCampsFlippedValue, oFormatMostCampsFlipped); cRetVal = string.Empty; } catch (Exception oEx) { LOGWRITER.WriteMessage(oEx.ToString(), LogWriter.MESSAGE_TYPE.Error); cRetVal = "x"; } return cRetVal; }
/// <summary> /// Schreibt die Steinnebel-Sektion /// </summary> /// <param name="oImage"></param> /// <param name="oGraphics"></param> /// <param name="oMatch"></param> /// <param name="oWeek"></param> /// <returns></returns> private string RenderSMC(ref Image oImage, ref Graphics oGraphics, Model.Database.Match oMatch, Model.Database.Week oWeek) { string cRetVal = "x"; List<Model.Timespans.ObjectiveTimespan> oLstTimespans; List<Model.Additional.Objective_Owner_Change_Extended> oLstOwnerChanges; List<KeyValuePair<short, TimeSpan>> oLstTimespansOrdered; Dictionary<short, TimeSpan> oDictTimespansProWelt; Model.Database.Objective oObjectiveSM; Model.Timespans.ObjectiveTimespan oTimespan; RectangleF oRectangleFirstName; RectangleF oRectangleFirstValue; RectangleF oRectangleSecondName; RectangleF oRectangleSecondValue; RectangleF oRectangleThirdName; RectangleF oRectangleThirdValue; StringFormat oFormat; try { SetLoadingLabelCurrents("King of Stonemist Castle...", 2, ANZ_SCHRITTE); //SM bestimmen oObjectiveSM = m_oLstObjectives.Single(x => x.SCORE == 35); //Changes für SM laden oLstOwnerChanges = DBWRAPPER.GetObjectiveOwnerChanges(oMatch.ID, oObjectiveSM.ID); //oLstOwnerChanges = oLstOwnerChanges.OrderBy(x => x.TIME).ToList(); oLstTimespans = new List<Model.Timespans.ObjectiveTimespan>(); foreach (Model.Additional.Objective_Owner_Change_Extended oChange in oLstOwnerChanges) { if (oLstOwnerChanges.IndexOf(oChange) == 0) { //Erster oTimespan = new Model.Timespans.ObjectiveTimespan(); oTimespan.Anfang = oChange.TIME; oTimespan.Owner = m_oDictWelten[oChange.WORLD_ID]; oTimespan.Objective = oObjectiveSM; oLstTimespans.Add(oTimespan); } else if (oChange != oLstOwnerChanges.Last()) { //Alle außer letzter oLstTimespans[oLstOwnerChanges.IndexOf(oChange) - 1].Ende = oChange.TIME; oTimespan = new Model.Timespans.ObjectiveTimespan(); oTimespan.Anfang = oChange.TIME; oTimespan.Objective = oObjectiveSM; oTimespan.Owner = m_oDictWelten[oChange.WORLD_ID]; oLstTimespans.Add(oTimespan); } else { //Letzer oLstTimespans[oLstOwnerChanges.IndexOf(oChange) - 1].Ende = oChange.TIME; oTimespan = new Model.Timespans.ObjectiveTimespan(); oTimespan.Anfang = oChange.TIME; oTimespan.Objective = oObjectiveSM; oTimespan.Owner = m_oDictWelten[oChange.WORLD_ID]; oTimespan.Ende = oWeek.END_TIME; oLstTimespans.Add(oTimespan); } } oDictTimespansProWelt = new Dictionary<short, TimeSpan>(); foreach (Model.Timespans.ObjectiveTimespan oTimespanObjective in oLstTimespans) { if (!oDictTimespansProWelt.ContainsKey(oTimespanObjective.Owner.ID)) { oDictTimespansProWelt.Add(oTimespanObjective.Owner.ID, new TimeSpan(0, 0, 0)); } oDictTimespansProWelt[oTimespanObjective.Owner.ID] += oTimespanObjective.Dauer; } oLstTimespansOrdered = oDictTimespansProWelt.ToList().OrderByDescending(x => x.Value).ToList(); //Anzeige oRectangleFirstName = new RectangleF(160, 750, 800, 100); oRectangleFirstValue = new RectangleF(160, 820, 790, 100); oRectangleSecondName = new RectangleF(160, 860, 800, 100); oRectangleSecondValue = new RectangleF(160, 930, 790, 100); oRectangleThirdName = new RectangleF(160, 970, 800, 100); oRectangleThirdValue = new RectangleF(160, 1040, 790, 100); oFormat = new StringFormat(); oFormat.Alignment = StringAlignment.Far; oGraphics.DrawString(m_oDictWelten[oLstTimespansOrdered[0].Key].NAME, new Font("Caviar Dreams", 60, FontStyle.Regular), Brushes.Black, oRectangleFirstName, oFormat); oGraphics.DrawString(GetTimespanAsString(oLstTimespansOrdered[0].Value), new Font("Caviar Dreams", 25, FontStyle.Regular), Brushes.Black, oRectangleFirstValue, oFormat); oGraphics.DrawString(m_oDictWelten[oLstTimespansOrdered[1].Key].NAME, new Font("Caviar Dreams", 60, FontStyle.Regular), Brushes.Black, oRectangleSecondName, oFormat); oGraphics.DrawString(GetTimespanAsString(oLstTimespansOrdered[1].Value), new Font("Caviar Dreams", 25, FontStyle.Regular), Brushes.Black, oRectangleSecondValue, oFormat); oGraphics.DrawString(m_oDictWelten[oLstTimespansOrdered[2].Key].NAME, new Font("Caviar Dreams", 60, FontStyle.Regular), Brushes.Black, oRectangleThirdName, oFormat); oGraphics.DrawString(GetTimespanAsString(oLstTimespansOrdered[2].Value), new Font("Caviar Dreams", 25, FontStyle.Regular), Brushes.Black, oRectangleThirdValue, oFormat); cRetVal = string.Empty; } catch (Exception oEx) { LOGWRITER.WriteMessage(oEx.ToString(), LogWriter.MESSAGE_TYPE.Error); cRetVal = "x"; } return cRetVal; }
/// <summary> /// Section "In Battle" /// </summary> /// <param name="oImage"></param> /// <param name="oGraphics"></param> /// <param name="oMatch"></param> /// <param name="oWeek"></param> /// <returns></returns> private string RenderInBattle(ref Image oImage, ref Graphics oGraphics, Model.Database.Match oMatch, Model.Database.Week oWeek) { string cRetVal = "x"; RectangleF oRectangleFlipsFirstName; RectangleF oRectangleFlipsFirstValue; RectangleF oRectangleFlipsSecondName; RectangleF oRectangleFlipsSecondValue; RectangleF oRectangleFlipsThirdName; RectangleF oRectangleFlipsThirdValue; RectangleF oRectanglePossessionFirstName; RectangleF oRectanglePossessionFirstValue; RectangleF oRectanglePossessionSecondName; RectangleF oRectanglePossessionSecondValue; RectangleF oRectanglePossessionThirdName; RectangleF oRectanglePossessionThirdValue; RectangleF oRectangleTickFirstName; RectangleF oRectangleTickFirstValue; RectangleF oRectangleTickSecondName; RectangleF oRectangleTickSecondValue; RectangleF oRectangleTickThirdName; RectangleF oRectangleTickThirdValue; RectangleF oRectangleStompsFirstName; RectangleF oRectangleStompsFirstValue; RectangleF oRectangleStompsSecondName; RectangleF oRectangleStompsSecondValue; RectangleF oRectangleStompsThirdName; RectangleF oRectangleStompsThirdValue; StringFormat oFormatLeftNames; StringFormat oFormatLeftValues; StringFormat oFormatRightNames; StringFormat oFormatRightValues; Dictionary<short, long> oDictFlips; List<short> oLstWorldOrder; Dictionary<short, List<Model.Timespans.ObjectiveTimespan>> oDictTimespans; List<Model.Additional.Objective_Owner_Change_Extended> oLstOwnerChanges; Dictionary<short, List<TimeSpan>> oDictTimespansProWelt; Dictionary<short, double> oDictAverageSeconds; Dictionary<short, TimeSpan> oDictAverageTimespans; Model.Timespans.ObjectiveTimespan oTimespan; TimeSpan oTimespanAll; int nAnzTimespans = 0; Dictionary<short, long> oDictPointsNotFromTick; Dictionary<short, long> oDictPointsTotal; Dictionary<short, long> oDictPointsFromTick; Model.Database.Score oLetzterScore; try { SetLoadingLabelCurrents("In Battle...", 5, ANZ_SCHRITTE); //Flips oDictFlips = DBWRAPPER.GetObjectivesFuerMatchID(oMatch.ID); oDictFlips = oDictFlips.OrderByDescending(x => x.Value).ToDictionary(k => k.Key, v => v.Value); oLstWorldOrder = oDictFlips.Keys.ToList(); oRectangleFlipsFirstName = new RectangleF(5, 2460, 950, 60); oRectangleFlipsFirstValue = new RectangleF(0, 2510, 950, 100); oRectangleFlipsSecondName = new RectangleF(5, 2540, 950, 60); oRectangleFlipsSecondValue = new RectangleF(0, 2590, 950, 100); oRectangleFlipsThirdName = new RectangleF(5, 2620, 950, 60); oRectangleFlipsThirdValue = new RectangleF(0, 2670, 950, 100); oFormatRightNames = new StringFormat(); oFormatRightNames.Alignment = StringAlignment.Far; oFormatRightNames.LineAlignment = StringAlignment.Center; oFormatRightValues = new StringFormat(); oFormatRightValues.Alignment = StringAlignment.Far; oFormatLeftNames = new StringFormat(); oFormatLeftNames.Alignment = StringAlignment.Near; oFormatLeftNames.LineAlignment = StringAlignment.Center; oFormatLeftValues = new StringFormat(); oFormatLeftValues.Alignment = StringAlignment.Near; oGraphics.DrawString(m_oDictWelten[oLstWorldOrder[0]].NAME, new Font("Caviar Dreams", m_oDictWelten[oLstWorldOrder[0]].NAME.Length > 17 ? 40 : 50, FontStyle.Regular), Brushes.White, oRectangleFlipsFirstName, oFormatRightNames); oGraphics.DrawString(string.Format("captured {0} objectives", oDictFlips[oLstWorldOrder[0]]), new Font("Caviar Dreams", 20, FontStyle.Regular), Brushes.White, oRectangleFlipsFirstValue, oFormatRightValues); oGraphics.DrawString(m_oDictWelten[oLstWorldOrder[1]].NAME, new Font("Caviar Dreams", m_oDictWelten[oLstWorldOrder[1]].NAME.Length > 17 ? 40 : 50, FontStyle.Regular), Brushes.White, oRectangleFlipsSecondName, oFormatRightNames); oGraphics.DrawString(string.Format("captured {0} objectives", oDictFlips[oLstWorldOrder[1]]), new Font("Caviar Dreams", 20, FontStyle.Regular), Brushes.White, oRectangleFlipsSecondValue, oFormatRightValues); oGraphics.DrawString(m_oDictWelten[oLstWorldOrder[2]].NAME, new Font("Caviar Dreams", m_oDictWelten[oLstWorldOrder[2]].NAME.Length > 17 ? 40 : 50, FontStyle.Regular), Brushes.White, oRectangleFlipsThirdName, oFormatRightNames); oGraphics.DrawString(string.Format("captured {0} objectives", oDictFlips[oLstWorldOrder[2]]), new Font("Caviar Dreams", 20, FontStyle.Regular), Brushes.White, oRectangleFlipsThirdValue, oFormatRightValues); //Average Possession oLstOwnerChanges = DBWRAPPER.GetObjectiveOwnerChangesFuerMatchID(oMatch.ID); //oLstOwnerChanges = oLstOwnerChanges.OrderBy(x => x.TIME).ToList(); Dictionary<short, List<Model.Additional.Objective_Owner_Change_Extended>> oDictOwnerChanges = oLstOwnerChanges.GroupBy(x => x.OBJECTIVE_ID).ToDictionary(k => k.Key, y => y.ToList()); oDictTimespans = new Dictionary<short, List<Model.Timespans.ObjectiveTimespan>>(); foreach (KeyValuePair<short, List<Model.Additional.Objective_Owner_Change_Extended>> oKVPObjective in oDictOwnerChanges) { foreach (Model.Additional.Objective_Owner_Change_Extended oChange in oKVPObjective.Value) { if (!oDictTimespans.ContainsKey(oChange.OBJECTIVE_ID)) { oDictTimespans.Add(oChange.OBJECTIVE_ID, new List<Model.Timespans.ObjectiveTimespan>()); } if (oKVPObjective.Value.IndexOf(oChange) == 0) { //Erster oTimespan = new Model.Timespans.ObjectiveTimespan(); oTimespan.Anfang = oChange.TIME; oTimespan.Owner = m_oDictWelten[oChange.WORLD_ID]; oTimespan.Objective = m_oLstObjectives.Single(x => x.ID == oChange.OBJECTIVE_ID); oDictTimespans[oChange.OBJECTIVE_ID].Add(oTimespan); } else if (oChange != oKVPObjective.Value.Last()) { //Alle außer letzter oDictTimespans[oChange.OBJECTIVE_ID][oKVPObjective.Value.IndexOf(oChange) - 1].Ende = oChange.TIME; oTimespan = new Model.Timespans.ObjectiveTimespan(); oTimespan.Anfang = oChange.TIME; oTimespan.Objective = m_oLstObjectives.Single(x => x.ID == oChange.OBJECTIVE_ID); oTimespan.Owner = m_oDictWelten[oChange.WORLD_ID]; oDictTimespans[oChange.OBJECTIVE_ID].Add(oTimespan); } else { //Letzer oDictTimespans[oChange.OBJECTIVE_ID][oKVPObjective.Value.IndexOf(oChange) - 1].Ende = oChange.TIME; oTimespan = new Model.Timespans.ObjectiveTimespan(); oTimespan.Anfang = oChange.TIME; oTimespan.Objective = m_oLstObjectives.Single(x => x.ID == oChange.OBJECTIVE_ID); oTimespan.Owner = m_oDictWelten[oChange.WORLD_ID]; oTimespan.Ende = oWeek.END_TIME; oDictTimespans[oChange.OBJECTIVE_ID].Add(oTimespan); } } } foreach (KeyValuePair<short, List<Model.Timespans.ObjectiveTimespan>> oKVPObjective in oDictTimespans) { oKVPObjective.Value.RemoveAll(x => x.Dauer.TotalSeconds < 290); } oDictTimespansProWelt = new Dictionary<short, List<TimeSpan>>(); foreach (KeyValuePair<short, List<Model.Timespans.ObjectiveTimespan>> oKVPObjective in oDictTimespans) { foreach (Model.Timespans.ObjectiveTimespan oTimespanObjective in oKVPObjective.Value) { if (!oDictTimespansProWelt.ContainsKey(oTimespanObjective.Owner.ID)) { oDictTimespansProWelt.Add(oTimespanObjective.Owner.ID, new List<TimeSpan>()); } oDictTimespansProWelt[oTimespanObjective.Owner.ID].Add(oTimespanObjective.Dauer); } } oDictAverageSeconds = new Dictionary<short, double>(); oDictAverageTimespans = new Dictionary<short, TimeSpan>(); oTimespanAll = new TimeSpan(); foreach (KeyValuePair<short, List<TimeSpan>> oKVPWorld in oDictTimespansProWelt) { oDictAverageSeconds.Add(oKVPWorld.Key, 0); oDictAverageTimespans.Add(oKVPWorld.Key, new TimeSpan()); foreach (TimeSpan oTimespanInDict in oKVPWorld.Value) { oDictAverageSeconds[oKVPWorld.Key] += oTimespanInDict.TotalSeconds; oTimespanAll += oTimespanInDict; nAnzTimespans++; } oDictAverageTimespans[oKVPWorld.Key] = new TimeSpan(0, 0, Convert.ToInt32(Math.Floor(oDictAverageSeconds[oKVPWorld.Key] / oKVPWorld.Value.Count))); } oDictAverageTimespans = oDictAverageTimespans.OrderByDescending(x => x.Value).ToDictionary(k => k.Key, v => v.Value); oLstWorldOrder = oDictAverageTimespans.Keys.ToList(); oRectanglePossessionFirstName = new RectangleF(5, 2810, 950, 60); oRectanglePossessionFirstValue = new RectangleF(0, 2860, 950, 100); oRectanglePossessionSecondName = new RectangleF(5, 2890, 950, 60); oRectanglePossessionSecondValue = new RectangleF(0, 2940, 950, 100); oRectanglePossessionThirdName = new RectangleF(5, 2970, 950, 60); oRectanglePossessionThirdValue = new RectangleF(0, 3020, 950, 100); oGraphics.DrawString(m_oDictWelten[oLstWorldOrder[0]].NAME, new Font("Caviar Dreams", m_oDictWelten[oLstWorldOrder[0]].NAME.Length > 17 ? 40 : 50, FontStyle.Regular), Brushes.White, oRectanglePossessionFirstName, oFormatRightNames); oGraphics.DrawString(string.Format("{0} average", GetTimespanAsString(oDictAverageTimespans[oLstWorldOrder[0]])), new Font("Caviar Dreams", 20, FontStyle.Regular), Brushes.White, oRectanglePossessionFirstValue, oFormatRightValues); oGraphics.DrawString(m_oDictWelten[oLstWorldOrder[1]].NAME, new Font("Caviar Dreams", m_oDictWelten[oLstWorldOrder[1]].NAME.Length > 17 ? 40 : 50, FontStyle.Regular), Brushes.White, oRectanglePossessionSecondName, oFormatRightNames); oGraphics.DrawString(string.Format("{0} average", GetTimespanAsString(oDictAverageTimespans[oLstWorldOrder[1]])), new Font("Caviar Dreams", 20, FontStyle.Regular), Brushes.White, oRectanglePossessionSecondValue, oFormatRightValues); oGraphics.DrawString(m_oDictWelten[oLstWorldOrder[2]].NAME, new Font("Caviar Dreams", m_oDictWelten[oLstWorldOrder[2]].NAME.Length > 17 ? 40 : 50, FontStyle.Regular), Brushes.White, oRectanglePossessionThirdName, oFormatRightNames); oGraphics.DrawString(string.Format("{0} average", GetTimespanAsString(oDictAverageTimespans[oLstWorldOrder[2]])), new Font("Caviar Dreams", 20, FontStyle.Regular), Brushes.White, oRectanglePossessionThirdValue, oFormatRightValues); //Points from tick oDictPointsNotFromTick = DBWRAPPER.GetPointsNotFromTick(oMatch); oDictPointsTotal = new Dictionary<short, long>(); oLetzterScore = DBWRAPPER.GetLatestScore(oMatch.ID); oDictPointsTotal.Add(oMatch.RED_WORLD_ID, Convert.ToInt32(oLetzterScore.FULL_SCORE.Split('/')[0])); oDictPointsTotal.Add(oMatch.BLUE_WORLD_ID, Convert.ToInt32(oLetzterScore.FULL_SCORE.Split('/')[1])); oDictPointsTotal.Add(oMatch.GREEN_WORLD_ID, Convert.ToInt32(oLetzterScore.FULL_SCORE.Split('/')[2])); oDictPointsFromTick = new Dictionary<short, long>(); oDictPointsFromTick.Add(oMatch.RED_WORLD_ID, oDictPointsTotal[oMatch.RED_WORLD_ID] - oDictPointsNotFromTick[oMatch.RED_WORLD_ID]); oDictPointsFromTick.Add(oMatch.GREEN_WORLD_ID, oDictPointsTotal[oMatch.GREEN_WORLD_ID] - oDictPointsNotFromTick[oMatch.GREEN_WORLD_ID]); oDictPointsFromTick.Add(oMatch.BLUE_WORLD_ID, oDictPointsTotal[oMatch.BLUE_WORLD_ID] - oDictPointsNotFromTick[oMatch.BLUE_WORLD_ID]); oDictPointsFromTick = oDictPointsFromTick.OrderByDescending(x => x.Value).ToDictionary(x => x.Key, y => y.Value); oLstWorldOrder = oDictPointsFromTick.Keys.ToList(); oRectangleTickFirstName = new RectangleF(45, 2460, 950, 60); oRectangleTickFirstValue = new RectangleF(50, 2510, 950, 100); oRectangleTickSecondName = new RectangleF(45, 2540, 950, 60); oRectangleTickSecondValue = new RectangleF(50, 2590, 950, 100); oRectangleTickThirdName = new RectangleF(45, 2620, 950, 60); oRectangleTickThirdValue = new RectangleF(50, 2670, 950, 100); oGraphics.DrawString(m_oDictWelten[oLstWorldOrder[0]].NAME, new Font("Caviar Dreams", m_oDictWelten[oLstWorldOrder[0]].NAME.Length > 17 ? 40 : 50, FontStyle.Regular), Brushes.Black, oRectangleTickFirstName, oFormatLeftNames); oGraphics.DrawString(string.Format(CultureInfo.GetCultureInfo("en-AU"), "{0:0,0} points from tick", oDictPointsFromTick[oLstWorldOrder[0]]), new Font("Caviar Dreams", 20, FontStyle.Regular), Brushes.Black, oRectangleTickFirstValue, oFormatLeftValues); oGraphics.DrawString(m_oDictWelten[oLstWorldOrder[1]].NAME, new Font("Caviar Dreams", m_oDictWelten[oLstWorldOrder[1]].NAME.Length > 17 ? 40 : 50, FontStyle.Regular), Brushes.Black, oRectangleTickSecondName, oFormatLeftNames); oGraphics.DrawString(string.Format(CultureInfo.GetCultureInfo("en-AU"), "{0:0,0} points from tick", oDictPointsFromTick[oLstWorldOrder[1]]), new Font("Caviar Dreams", 20, FontStyle.Regular), Brushes.Black, oRectangleTickSecondValue, oFormatLeftValues); oGraphics.DrawString(m_oDictWelten[oLstWorldOrder[2]].NAME, new Font("Caviar Dreams", m_oDictWelten[oLstWorldOrder[2]].NAME.Length > 17 ? 40 : 50, FontStyle.Regular), Brushes.Black, oRectangleTickThirdName, oFormatLeftNames); oGraphics.DrawString(string.Format(CultureInfo.GetCultureInfo("en-AU"), "{0:0,0} points from tick", oDictPointsFromTick[oLstWorldOrder[2]]), new Font("Caviar Dreams", 20, FontStyle.Regular), Brushes.Black, oRectangleTickThirdValue, oFormatLeftValues); //Not from tick oDictPointsNotFromTick = oDictPointsNotFromTick.OrderByDescending(x => Convert.ToDouble(x.Value) / oDictPointsTotal[x.Key] * 100).ToDictionary(x => x.Key, x => x.Value); oLstWorldOrder = oDictPointsNotFromTick.Keys.ToList(); oRectangleStompsFirstName = new RectangleF(45, 2810, 950, 60); oRectangleStompsFirstValue = new RectangleF(50, 2860, 950, 100); oRectangleStompsSecondName = new RectangleF(45, 2890, 950, 60); oRectangleStompsSecondValue = new RectangleF(50, 2940, 950, 100); oRectangleStompsThirdName = new RectangleF(45, 2970, 950, 60); oRectangleStompsThirdValue = new RectangleF(50, 3020, 950, 100); oGraphics.DrawString(m_oDictWelten[oLstWorldOrder[0]].NAME, new Font("Caviar Dreams", m_oDictWelten[oLstWorldOrder[0]].NAME.Length > 17 ? 40 : 50, FontStyle.Regular), Brushes.White, oRectangleStompsFirstName, oFormatLeftNames); oGraphics.DrawString(string.Format(CultureInfo.GetCultureInfo("en-AU"), "{0:0,0} points not from tick ({1}%)", oDictPointsNotFromTick[oLstWorldOrder[0]], Math.Round(Convert.ToDouble(oDictPointsNotFromTick[oLstWorldOrder[0]]) / oDictPointsTotal[oLstWorldOrder[0]] * 100, 1)), new Font("Caviar Dreams", 20, FontStyle.Regular), Brushes.White, oRectangleStompsFirstValue, oFormatLeftValues); oGraphics.DrawString(m_oDictWelten[oLstWorldOrder[1]].NAME, new Font("Caviar Dreams", m_oDictWelten[oLstWorldOrder[1]].NAME.Length > 17 ? 40 : 50, FontStyle.Regular), Brushes.White, oRectangleStompsSecondName, oFormatLeftNames); oGraphics.DrawString(string.Format(CultureInfo.GetCultureInfo("en-AU"), "{0:0,0} points not from tick ({1}%)", oDictPointsNotFromTick[oLstWorldOrder[1]], Math.Round(Convert.ToDouble(oDictPointsNotFromTick[oLstWorldOrder[1]]) / oDictPointsTotal[oLstWorldOrder[1]] * 100, 1)), new Font("Caviar Dreams", 20, FontStyle.Regular), Brushes.White, oRectangleStompsSecondValue, oFormatLeftValues); oGraphics.DrawString(m_oDictWelten[oLstWorldOrder[2]].NAME, new Font("Caviar Dreams", m_oDictWelten[oLstWorldOrder[2]].NAME.Length > 17 ? 40 : 50, FontStyle.Regular), Brushes.White, oRectangleStompsThirdName, oFormatLeftNames); oGraphics.DrawString(string.Format(CultureInfo.GetCultureInfo("en-AU"), "{0:0,0} points not from tick ({1}%)", oDictPointsNotFromTick[oLstWorldOrder[2]], Math.Round(Convert.ToDouble(oDictPointsNotFromTick[oLstWorldOrder[2]]) / oDictPointsTotal[oLstWorldOrder[2]] * 100, 1)), new Font("Caviar Dreams", 20, FontStyle.Regular), Brushes.White, oRectangleStompsThirdValue, oFormatLeftValues); cRetVal = string.Empty; } catch (Exception oEx) { LOGWRITER.WriteMessage(oEx.ToString(), LogWriter.MESSAGE_TYPE.Error); cRetVal = "x"; } return cRetVal; }