public new void Enter(IemStateManager.StateManager sm) { TargetPracticeStateManager gsm = (TargetPracticeStateManager)sm; // this is a fresh game at pregame if (gsm.eg.level == -1) { gsm.eg.level++; } else { // level has already been started, and this is a rerun of the level // reset level vals if (gsm.eg.gamelevels[gsm.eg.level].Started && !gsm.eg.gamelevels[gsm.eg.level].Ended) { gsm.eg.gamelevels[gsm.eg.level].Reset(); } else { // this is a new level gsm.eg.level++; } } // get the properties of this game level TPGameLevel gamelevel = gsm.eg.gamelevels[gsm.eg.level]; EntitiesTakingDamage += gsm.eg.PlayerImmortal; // reset the player score for this level gsm.eg.iemPlayer.Score = 0; IemUI.CreateGameBanner(gsm.eg.player, "Level " + (gsm.eg.level + 1) + " - targets remaining " + (gamelevel.Targets - gsm.eg.iemPlayer.Score)); IemUtils.GameTimer.CreateTimerPaused(gsm.eg.player, gamelevel.Timer, () => { if (!gsm.eg.CheckLevelComplete()) { IemUI.ConfirmCancel(gsm.eg.player, "Level was not completed!\nYou can play this level again, or return to the map", "Play Again", "Quit", gsm.eg.wasConfirmed, gsm.eg.wasCancelled); } }); // log the score EntitiesTakingDamage += gsm.eg.ScorePlayerHit; // refill magazines in weapons on belt container IemUtils.RefillBeltMagazines(gsm.eg.player); foreach (var target in gsm.eg.targets) { if (target != null) { target.ResetTarget(); var health = knockdownHealth.GetValue(target); knockdownHealth.SetValue(target, 100f); } } RunWeaponFired += gsm.eg.TPWeaponFired; IemUtils.PlaySound(gsm.eg.player); }