public Button(string text, Vector2 position, Texture2D buttonSprite, SpriteFont font, IPostOfficeService postOffice, PostOfficeEventArgs args) { // Initialise local variables _clickReady = false; _guid = Guid.NewGuid(); _canUpdate = true; // Store local variables passed in _text = text; _position = position; _buttonSprite = buttonSprite; _font = font; _postOffice = postOffice; _args = args; // Register at the post office _postOffice.RegisterClient(this, _guid.ToString()); // Measure and center text var textRadii = _font.MeasureString(_text) / 2; var buttonCenter = new Vector2(_buttonSprite.Width / 2, _buttonSprite.Height / 2); var textOffset = buttonCenter - textRadii; _textPosition = _position + textOffset; // Set up rectangles for collision. _buttonCollisionRectangle = new Rectangle((int)_position.X, (int)_position.Y, _buttonSprite.Width, _buttonSprite.Height); }
/// <summary> /// LoadContent will be called once per game and is the place to load /// all of your content. /// </summary> protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. _spriteBatch = new SpriteBatch(GraphicsDevice); // Load textures and fonts _font = Content.Load <SpriteFont>("BlackChancery"); _buttonTexture = Content.Load <Texture2D>("WoodButton"); var squirrel1 = Content.Load <Texture2D>("squirrel1"); var gateLevel = Content.Load <Texture2D>("gate_level"); var upgradeBar = new Texture2D(GraphicsDevice, GraphicsDevice.PresentationParameters.Bounds.Width, 100); var colorData = new Color[100 * GraphicsDevice.PresentationParameters.Bounds.Width]; for (int i = 0; i < 100 * GraphicsDevice.PresentationParameters.Bounds.Width; i++) { colorData[i] = Color.DarkSlateGray; } upgradeBar.SetData(colorData); var stone = new Texture2D(GraphicsDevice, 10, 10); var stoneColors = new Color[100]; for (int i = 0; i < 100; i++) { stoneColors[i] = Color.Black; } stone.SetData(stoneColors); // Create Objects var gate = new Gate(); // Create factories var buttonFactory = new ButtonFactory(_buttonTexture, _font, _postOffice); var textFactory = new TextFactory(_font); var squirrelFactory = new SquirrelFactory(squirrel1, gate); // Create Managers var leaderboardManager = new LeaderboardManager(); var playerMetaDataManager = new PlayerMetaDataManager(_postOffice); var moneyManager = new MoneyManager(_postOffice); var statsManager = new StatsManager(_postOffice, moneyManager); // Register states to the state manager _stateManager.RegisterState(new MenuState(buttonFactory, textFactory)); var nameInputState = new NameInputState(buttonFactory, textFactory, _postOffice, GraphicsDevice.PresentationParameters.Bounds); _stateManager.RegisterState(nameInputState); _stateManager.RegisterState(new LeaderboardState(buttonFactory, textFactory, leaderboardManager)); _stateManager.RegisterState(new ExitState(this)); var playState = new PlayState(_postOffice, squirrelFactory, buttonFactory, textFactory, statsManager, moneyManager, gateLevel, GraphicsDevice.PresentationParameters.Bounds, upgradeBar, stone, gate); _stateManager.RegisterState(playState); var loseState = new LoseState(buttonFactory, textFactory, _postOffice, leaderboardManager); _stateManager.RegisterState(loseState); var flavourText = new FlavourTextState(buttonFactory, textFactory); _stateManager.RegisterState(flavourText); // Register clients to the post office _postOffice.RegisterClient((ILetterbox)_stateManager, "StateManager"); _postOffice.RegisterClient((ILetterbox)playerMetaDataManager, playerMetaDataManager.LetterboxName); _postOffice.RegisterClient((ILetterbox)nameInputState, nameInputState.StateRegisterName); _postOffice.RegisterClient((ILetterbox)statsManager, statsManager.LetterboxName); _postOffice.RegisterClient((ILetterbox)playState, playState.LetterboxName); _postOffice.RegisterClient((ILetterbox)moneyManager, moneyManager.LetterboxName); _postOffice.RegisterClient((ILetterbox)gate, "Gate"); _postOffice.RegisterClient((ILetterbox)loseState, loseState.StateRegisterName); // Set the initial state to the menu _postOffice.SendMail("Null", new PostOfficeEventArgs() { SendAddress = "StateManager", MessageName = "SetInitialState", Data = Encoding.ASCII.GetBytes("Menu") }); // TODO: use this.Content to load your game content here }