using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.Input; using Syntriax.Engine.Core; using Syntriax.Engine.Core.Debug; using Syntriax.Engine.Integration.MonoGame; using Syntriax.Engine.Network; using Syntriax.Engine.Systems.Input; using Syntriax.Engine.Systems.Time; using Syntriax.Engine.Systems.Tween; namespace Pong.Behaviours; public class PongGameStarter : Behaviour, INetworkEntity, IFirstFrameUpdate, ILoadContent, IPacketListenerServer, IPacketListenerClient { private const float START_COUNTDOWN = 3f; private INetworkCommunicatorServer? networkServer = null; private INetworkCommunicatorClient? networkClient = null; private ITweenManager? tweenManager = null; private PongManager pongManager = null!; private ILogger? logger = null; private Label? label = null; private TickerTimer timer = null!; private SoundEffectInstance? tickSoundEffect = null; private SoundEffectInstance? startSoundEffect = null; public void FirstActiveFrame() { IButtonInputs? buttonInputs = Universe.FindBehaviour>(); buttonInputs?.RegisterOnRelease(Keys.Space, (_, _1) => networkClient?.SendToServer(new RequestStartPacket())); networkClient = Universe.FindBehaviour(); networkServer = Universe.FindBehaviour(); tweenManager = Universe.FindBehaviour(); pongManager = BehaviourController.GetRequiredBehaviourInParent(); label = BehaviourController.GetRequiredBehaviour