Wavecounter¶
Doelstelling¶
Het doel van deze userstory was om het aantal waves dat de speler heeft overleefd te tonen op het scherm. Dit was nodig om de speler een visuele indicatie te geven hoe ver hij is in het spel.
Toegepaste oplossing¶
Als eerst heb ik een nieuwe system class gemaakt genaamd WaveCounter die de wavecounter bijhoudt. Deze class heeft 2 protected variabelen, state en game. State is een instance van de StateManager class en game is een instance van de GameState class.
De WaveCounter class heeft ook een TextGameObject variabele genaamd waveNumberText. Deze variabele houdt de wavecounter bij en wordt getekend op het scherm. In de Initialize functie wordt de state variabele geinitialiseerd en wordt de waveNumberText geinitialiseerd. public override void Initialize(App app, SystemHandler handler)
{
base.Initialize(app, handler);
state = handler.GetSystem<StateManager>();
waveNumberText = new TextGameObject("Fonts/SpriteFont");
waveNumberText.Text = waveNumber.ToString();
waveNumberText.Position = new Vector2(390, 25);
waveNumberText.Color = Color.White;
handler
.GetSystem<EventBus>()
.Subscribe((WaveStartEvent e) => {
waveNumberText.Text = e.waveNumber.ToString();
});
}
EventBus
De EventBus is een systeem die events afhandelt en doorstuurt naar de juiste systemen. In dit geval wordt er een event geabonneerd die de wavecounter bijhoudt. Als de event wordt getriggerd dan wordt de wavecounter geupdate. Dit zorgt ervoor dat de wavecounter altijd up-to-date is maar ook dat de wavecounter alleen wordt geupdate als de wavecounter wordt getriggerd.
In de LoadContent functie wordt de game variabele geinitialiseerd door de state te vragen naar de huidige state.
In de Draw functie wordt de waveNumberText getekend op het scherm, hij tekent alleen de wavecounter als de currentstat gelijk is aan Game. Als de huidige state niet gelijk is aan de game state dan wordt de waveNumberText niet getekend. In de EventBus wordt een event geabonneerd die de wavecounter bijhoudt. Als de event wordt getriggerd dan wordt de wavecounter geupdate.
public override void Draw(GameTime gameTime, SpriteBatch spriteBatch)
{
if (state.currentState != game)
return;
waveNumberText.Draw(gameTime, spriteBatch);
}
State check
Deze check is nodig om ervoor te zorgen dat de wavecounter niet in andere states wordt getekend, zoals de main menu of de pauze menu.
Bronnen¶
- C# documentation. (z.d.) learn.microsoft.com.
Laatst geraadpleegd op 16 april 2024, van https://learn.microsoft.com/en-uk/dotnet/csharp/ - Monogame documentation. (z.d.) monogame.net.
Laatst geraadpleegd op 16 april 2024, van https://monogame.net/articles
Gecreëerd: June 4, 2024