public static AreaDataContainer CreateFromXml(XElement dataSource) { AreaDataContainer container = new AreaDataContainer( dataSource.Attribute("name").Value, dataSource.Attribute("selection-texture").Value, dataSource.Attribute("difficulty-tag").Value, (int)dataSource.Attribute("speed-step"), (int)dataSource.Attribute("level-count")); if (dataSource.Attribute("last-level") != null) { container.LastSelectedLevel = (int)dataSource.Attribute("last-level"); } if (dataSource.Attribute("locked") != null) { container.Locked = (bool)dataSource.Attribute("locked"); } if (dataSource.Attribute("no-race") != null) { container.DoesNotHaveRaceCourse = (bool)dataSource.Attribute("no-race"); } if (dataSource.Element("completion-unlockables") != null) { container.SetAreaCompletionUnlockables(dataSource.Element("completion-unlockables")); } if ((dataSource.Element("scores") != null) && (dataSource.Element("scores").Elements("score") != null)) { foreach (XElement s in dataSource.Element("scores").Elements("score")) { container.LevelScores.Add((int)s); } } if ((dataSource.Element("rankings") != null) && (dataSource.Element("rankings").Elements("rank") != null)) { foreach (XElement r in dataSource.Element("rankings").Elements("rank")) { Definitions.SurvivalRank rank = (Definitions.SurvivalRank)Enum.Parse(typeof(Definitions.SurvivalRank), r.Value); container.LevelRanks.Add(rank); } } if (dataSource.Element("tickets-from-level") != null) { container.SetCollectedTicketsFromLevel(dataSource.Element("tickets-from-level")); } if (dataSource.Element("tickets-from-crates") != null) { container.SetCollectedTicketsFromCrates(dataSource.Element("tickets-from-crates")); } return(container); }
public Definitions.SurvivalRank GetRankForLevel(SurvivalLevelData levelData) { Definitions.SurvivalRank rank = Definitions.SurvivalRank.C; if ((levelData.CandyCollectionFraction >= levelData.RankACandyFraction) && (levelData.AttemptsAtLevel < Rank_A_Lives_Used)) { rank = Definitions.SurvivalRank.A; } else if ((levelData.CandyCollectionFraction >= levelData.RankBCandyFraction) && (levelData.AttemptsAtLevel < Rank_B_Lives_Used)) { rank = Definitions.SurvivalRank.B; } return(rank); }
public void DisplayRanking(Definitions.SurvivalRank rank) { _rankingLetter.FrameOffset = (int)rank; switch (rank) { case Definitions.SurvivalRank.A: DisplayForRankA(); break; case Definitions.SurvivalRank.B: DisplayForRankB(); break; default: DisplayForRankC(); break; } Visible = true; _rankingStars[0].Activate(); }
public void UpdateCurrentLevelResults(int score, Definitions.SurvivalRank rank) { while (LevelScores.Count <= LastSelectedLevel) { LevelScores.Add(0); } LevelScores[LastSelectedLevel] = score; while (LevelRanks.Count <= LastSelectedLevel) { LevelRanks.Add(Definitions.SurvivalRank.NotSet); } if ((LevelRanks[LastSelectedLevel] == Definitions.SurvivalRank.NotSet) || ((int)LevelRanks[LastSelectedLevel] > (int)rank)) { LevelRanks[LastSelectedLevel] = rank; } }
private void HandleLevelCleared() { StatusDisplay.FreezeDisplayedScore = true; _rankingCoordinator.LevelCompleted = true; Definitions.SurvivalRank rank = _rankingCoordinator.GetRankForLevel(_levelData); Profile.CurrentAreaData.UpdateCurrentLevelResults(_levelData.PointsScoredThisLevel, rank); Profile.Save(); if (Profile.CurrentAreaData.Name == "Tutorial") { CloseCurrentLevel(); } else { _rankingCoordinator.DisplayRanking(rank); } }
private void DrawCurrentLevelSelection(SpriteBatch spriteBatch) { int rankValue = 0; float rankingSpace = Star_Dest_Frame_Side_Length; if ((Data.Profile.CurrentAreaData.Name != "Tutorial") && (Data.Profile.CurrentAreaData.LevelRanks != null) && (Data.Profile.CurrentAreaData.LevelRanks.Count > Data.Profile.CurrentAreaData.LastSelectedLevel)) { Definitions.SurvivalRank rank = Data.Profile.CurrentAreaData.LevelRanks[Data.Profile.CurrentAreaData.LastSelectedLevel]; rankValue = rank < 0 ? 0 : 3 - (int)rank; rankingSpace = rank < 0 ? Star_Dest_Frame_Side_Length : ((rankValue + 0.5f) * Star_Dest_Frame_Side_Length * 2.0f); } string currentLevelText = Translator.Translation("Level [N]").Replace("[N]", (Data.Profile.CurrentAreaData.LastSelectedLevel + 1).ToString()); float currentLevelTextWidth = TextWriter.CalculateTextDimensions(currentLevelText, 0.75f).X; string availableLevelsText = Translator.Translation("([N] unlocked)").Replace("[N]", Data.Profile.CurrentAreaData.UnlockedLevelCount.ToString()); float totalWidth = currentLevelTextWidth + TextWriter.CalculateTextDimensions(availableLevelsText, 0.75f).X + rankingSpace; float leftSideX = Definitions.Back_Buffer_Center.X - (totalWidth / 2.0f); float starsX = leftSideX + currentLevelTextWidth + (Star_Dest_Frame_Side_Length / 2.0f); TextWriter.Write(currentLevelText, spriteBatch, new Vector2(leftSideX, WorldPosition.Y + 350.0f), TransitionTint(_textTint), TransitionTint(Color.Black), 3.0f, 0.75f, 0.1f, TextWriter.Alignment.Left); TextWriter.Write(availableLevelsText, spriteBatch, new Vector2(Definitions.Back_Buffer_Center.X + (totalWidth / 2.0f), WorldPosition.Y + 350.0f), TransitionTint(_textTint), TransitionTint(Color.Black), 3.0f, 0.75f, 0.1f, TextWriter.Alignment.Right); Vector2 topLeft = GameBase.ScreenPosition(starsX, WorldPosition.Y + 365.0f); Rectangle destination = new Rectangle((int)(topLeft.X), (int)(topLeft.Y), Star_Dest_Frame_Side_Length * rankValue, Star_Dest_Frame_Side_Length); Rectangle source = new Rectangle(0, 0, Star_Source_Frame_Side_Length * rankValue, Star_Source_Frame_Side_Length); spriteBatch.Draw(TextureManager.Textures["ranking-stars"], destination, source, TransitionTint(_textTint), 0.0f, Vector2.Zero, SpriteEffects.None, 0.1f); }