// handles context displays, selected units, resource counters, public Hud(ref Engine engine, ref Map map, Texture2D boxSelect, Texture2D HPbar) { this.engine = engine; this.map = map; this.boxSelect = boxSelect; this.HPbar = HPbar; this.currentPlayer = engine.players[0]; selectedUnits = new List<Unit>(); startRect = new Vector2(); endRect = new Vector2(); // initialize m = Mouse.GetState(); m2 = Mouse.GetState(); lastButtonPressed = "None"; }
/// <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); debugFont = Content.Load<SpriteFont>("debug_font"); SpriteFont bigFont = Content.Load<SpriteFont>("Arial Big"); Texture2D buttonTexture = Content.Load<Texture2D>("ButtonNormal"); Texture2D buttonHover = Content.Load<Texture2D>("ButtonHover"); Texture2D buttonActive = Content.Load<Texture2D>("ButtonActive"); Vector2 size = new Vector2(80, 32); // UIObjects #region Buttons // New Game Button //Button newButton = new Button(buttonTexture, buttonHover, buttonActive, new Vector2(150, 117), "New", bigFont); //newButton.OnPress += newButton_OnPress; //newButton.Clicked += newButton_Clicked; //// Load Game Button //Button loadButton = new Button(buttonTexture, buttonHover, buttonActive, new Vector2(150, 217), "Load", bigFont); //loadButton.OnPress += loadButton_OnPress; //loadButton.Clicked += loadButton_Clicked; //// Settings/Options Button //// main menu Exit Button //Button mmExitButton = new Button(buttonTexture, buttonHover, buttonActive, new Vector2(150, 317), "Exit", bigFont); //mmExitButton.OnPress += mmExitButton_OnPress; //mmExitButton.Clicked += mmExitButton_Clicked; //// Back Button for ingame screen //Button backButton = new Button(buttonTexture, buttonHover, buttonActive, new Vector2(1250, 27), "Back", bigFont, size); //backButton.OnPress += backButton_OnPress; //backButton.Clicked += backButton_Clicked; //// Go Button for New Game screen //Button goButton = new Button(buttonTexture, buttonHover, buttonActive, new Vector2(600, 500), "Go", bigFont); //goButton.OnPress += goButton_OnPress; //goButton.Clicked += goButton_Clicked; //// back button for new game //Button ngbackButton = new Button(buttonTexture, buttonHover, buttonActive, new Vector2(20, 675), "Back", bigFont); //ngbackButton.OnPress += ngbackButton_OnPress; //ngbackButton.Clicked += ngbackButton_Clicked; //Button igBuildTown = new Button(buttonTexture, buttonHover, buttonActive, new Vector2(240, 660), "Build Town", bigFont, size); //igBuildTown.OnPress += igBuildTown_OnPress; //igBuildTown.Clicked += igBuildTown_Clicked; //Button igBuildMine = new Button(buttonTexture, buttonHover, buttonActive, new Vector2(240, 700), "Build Mine", bigFont, size); //igBuildMine.OnPress += igBuildMine_OnPress; //igBuildMine.Clicked += igBuildMine_Clicked; //Button igProduceKnight = new Button(buttonTexture, buttonHover, buttonActive, new Vector2(320, 660), "Produce Knight", bigFont, size); //igProduceKnight.OnPress += igProduceKnight_OnPress; //igProduceKnight.Clicked += igProduceKnight_Clicked; //Button igProduceArcher = new Button(buttonTexture, buttonHover, buttonActive, new Vector2(320, 700), "Produce Archer", bigFont, size); //igProduceArcher.OnPress += igProduceArcher_OnPress; //igProduceArcher.Clicked += igProduceArcher_Clicked; //Button igProducePeasant = new Button(buttonTexture, buttonHover, buttonActive, new Vector2(400, 660), "Produce Peasant", bigFont, size); //igProducePeasant.OnPress += igProducePeasant_OnPress; //igProducePeasant.Clicked += igProducePeasant_Clicked; //Button igAttack = new Button(buttonTexture, buttonHover, buttonActive, new Vector2(80, 700), "Attack", bigFont, size); //igAttack.OnPress += igAttack_OnPress; //igAttack.Clicked += igAttack_Clicked; //Button igMove = new Button(buttonTexture, buttonHover, buttonActive, new Vector2(80, 660), "Move", bigFont, size); //igMove.OnPress += igMove_OnPress; //igMove.Clicked += igMove_Clicked; //Button igGather = new Button(buttonTexture, buttonHover, buttonActive, new Vector2(160, 660), "Gather", bigFont, size); //igGather.OnPress += igGather_OnPress; //igGather.Clicked += igGather_Clicked; //Button igStop = new Button(buttonTexture, buttonHover, buttonActive, new Vector2(160, 700), "Stop", bigFont, size); //igStop.OnPress += igStop_OnPress; //igStop.Clicked += igStop_Clicked; #endregion #region TextDisplays // testTextDisplay //Texture2D blackTextBackground = Content.Load<Texture2D>("BlackTextBackground"); SpriteFont font = Content.Load<SpriteFont>("Arial"); //TextDisplay testTextDisplay = new TextDisplay(blackTextBackground, new Vector2(300, 300), font, Color.Green); #endregion #region TextInputs Texture2D textInBackground = Content.Load<Texture2D>("TextInBackground"); Texture2D textInBackgroundActive = Content.Load<Texture2D>("TextInBackgroundActive"); TextInput testTextInput = new TextInput(textInBackground, textInBackgroundActive, new Vector2(100, 50), font); //testTextInput.newInput += new EventHandler(testTextInput_newInput); Texture2D Biomeback = Content.Load<Texture2D>("BiomeB"); Texture2D BiomeBackActive = Content.Load<Texture2D>("BiomeBA"); TextInput numOcean = new TextInput(Biomeback, BiomeBackActive, new Vector2(700, 100), font); TextInput numPlain = new TextInput(Biomeback, BiomeBackActive, new Vector2(850, 100), font); TextInput numForest = new TextInput(Biomeback, BiomeBackActive, new Vector2(1000, 100), font); TextInput numMountain = new TextInput(Biomeback, BiomeBackActive, new Vector2(700, 200), font); TextInput numDesert = new TextInput(Biomeback, BiomeBackActive, new Vector2(850, 200), font); TextInput numTundra = new TextInput(Biomeback, BiomeBackActive, new Vector2(1000, 200), font); TextInput numDreadland = new TextInput(Biomeback, BiomeBackActive, new Vector2(775, 300), font); TextInput numResource = new TextInput(Biomeback, BiomeBackActive, new Vector2(925, 300), font); //testTextInput.newInput += new EventHandler(testTextInput_newInput); numOcean.SetText("2"); numPlain.SetText("2"); numForest.SetText("2"); numMountain.SetText("2"); numDesert.SetText("2"); numTundra.SetText("2"); numDreadland.SetText("2"); numResource.SetText("500"); #endregion #region Menus Texture2D mainBackground = Content.Load<Texture2D>("MainBackground"); Texture2D hudBackground = Content.Load<Texture2D>("Hud"); //List<UiObject> mainControls = new List<UiObject>(); //mainControls.Add(newButton); //mainControls.Add(loadButton); //mainControls.Add(mmExitButton); //mainControls.Add(testTextDisplay); //Menu mainMenu = new Menu(hudBackground, new Vector2(0, 0), mainControls, Color.White, 0); Texture2D blankBackground = Content.Load<Texture2D>("BlankBackground"); Texture2D oceanTexture = Content.Load<Texture2D>("Terrain\\Ocean"); Texture2D plainsTexture = Content.Load<Texture2D>("Terrain\\Plains1"); Texture2D plains2Texture = Content.Load<Texture2D>("Terrain\\Plains2"); Texture2D plains3Texture = Content.Load<Texture2D>("Terrain\\Plains3"); Texture2D mountainsTexture = Content.Load<Texture2D>("Terrain\\Mountain1"); Texture2D mountains2Texture = Content.Load<Texture2D>("Terrain\\Mountain2"); Texture2D mountains3Texture = Content.Load<Texture2D>("Terrain\\Mountain3"); Texture2D desertTexture = Content.Load<Texture2D>("Terrain\\Desert1"); Texture2D desert2Texture = Content.Load<Texture2D>("Terrain\\Desert2"); Texture2D desert3Texture = Content.Load<Texture2D>("Terrain\\Desert3"); Texture2D dreadTexture = Content.Load<Texture2D>("Terrain\\Spoopy1"); Texture2D dread2Texture = Content.Load<Texture2D>("Terrain\\Spoopy2"); Texture2D dread3Texture = Content.Load<Texture2D>("Terrain\\Spoopy3"); Texture2D tundraTexture = Content.Load<Texture2D>("Terrain\\Tundra1"); Texture2D tundra2Texture = Content.Load<Texture2D>("Terrain\\Tundra2"); Texture2D tundra3Texture = Content.Load<Texture2D>("Terrain\\Tundra3"); Texture2D forestTexture = Content.Load<Texture2D>("Terrain\\Forest1"); Texture2D forest2Texture = Content.Load<Texture2D>("Terrain\\Forest2"); Texture2D forest3Texture = Content.Load<Texture2D>("Terrain\\Forest3"); Texture2D coastTexture = Content.Load<Texture2D>("Terrain\\CoastStraight"); Texture2D coastBendTexture = Content.Load<Texture2D>("Terrain\\CoastBend"); Texture2D coastCoveTexture = Content.Load<Texture2D>("Terrain\\CoastCove"); Texture2D riverStraightTexture = Content.Load<Texture2D>("Terrain\\RiverStraight"); Texture2D riverBendTexture = Content.Load<Texture2D>("Terrain\\RiverBend"); Texture2D riverThreeTexture = Content.Load<Texture2D>("Terrain\\River3"); Texture2D riverFourTexture = Content.Load<Texture2D>("Terrain\\River4"); Texture2D goldTexture = Content.Load<Texture2D>("Terrain\\Gold"); Texture2D ironTexture = Content.Load<Texture2D>("Terrain\\Iron"); Texture2D manaTexture = Content.Load<Texture2D>("Terrain\\Mana"); // Create initial TileTypes engine.tileTypes.Add(new TileType("Ocean", texture: oceanTexture, biome: TileType.Biome.Ocean, movementCost: 7d)); engine.tileTypes.Add(new TileType("Plain", texture: plainsTexture, biome: TileType.Biome.Plain)); engine.tileTypes.Add(new TileType("Plain2", texture: plains2Texture, biome: TileType.Biome.Plain)); engine.tileTypes.Add(new TileType("Plain3", texture: plains3Texture, biome: TileType.Biome.Plain)); engine.tileTypes.Add(new TileType("Mountain", texture: mountainsTexture, biome: TileType.Biome.Mountain)); engine.tileTypes.Add(new TileType("Mountain2", texture: mountains2Texture, biome: TileType.Biome.Mountain)); engine.tileTypes.Add(new TileType("Mountain3", texture: mountains3Texture, biome: TileType.Biome.Mountain)); engine.tileTypes.Add(new TileType("Forest", texture: forestTexture, biome: TileType.Biome.Forest)); engine.tileTypes.Add(new TileType("Forest2", texture: forest2Texture, biome: TileType.Biome.Forest)); engine.tileTypes.Add(new TileType("Forest3", texture: forest3Texture, biome: TileType.Biome.Forest)); engine.tileTypes.Add(new TileType("Dreadlands", texture: dreadTexture, biome: TileType.Biome.Dreadlands)); engine.tileTypes.Add(new TileType("Dreadlands2", texture: dread2Texture, biome: TileType.Biome.Dreadlands)); engine.tileTypes.Add(new TileType("Dreadlands3", texture: dread3Texture, biome: TileType.Biome.Dreadlands)); engine.tileTypes.Add(new TileType("Desert", texture: desertTexture, biome: TileType.Biome.Desert)); engine.tileTypes.Add(new TileType("Desert2", texture: desert2Texture, biome: TileType.Biome.Desert)); engine.tileTypes.Add(new TileType("Desert3", texture: desert3Texture, biome: TileType.Biome.Desert)); engine.tileTypes.Add(new TileType("Tundra", texture: tundraTexture, biome: TileType.Biome.Tundra)); engine.tileTypes.Add(new TileType("Tundra2", texture: tundra2Texture, biome: TileType.Biome.Tundra)); engine.tileTypes.Add(new TileType("Tundra3", texture: tundra3Texture, biome: TileType.Biome.Tundra)); engine.tileTypes.Add(new TileType("Gold", texture: goldTexture, biome: TileType.Biome.Gold, resourceType: TileType.ResourceType.Gold)); engine.tileTypes.Add(new TileType("Iron", texture: ironTexture, biome: TileType.Biome.Iron, resourceType: TileType.ResourceType.Iron)); engine.tileTypes.Add(new TileType("ManaCrystals", texture: manaTexture, biome: TileType.Biome.ManaCrystals, resourceType: TileType.ResourceType.ManaCrystals)); engine.tileTypes.Add(new TileType("Coast Land on North", texture: coastTexture, biome: TileType.Biome.Shore, rotation: (float)Math.PI * 1.0f, movementCost: 7d)); // Clockwise radians engine.tileTypes.Add(new TileType("Coast Land on East", texture: coastTexture, biome: TileType.Biome.Shore, rotation: (float)Math.PI * 1.5f, movementCost: 7d)); engine.tileTypes.Add(new TileType("Coast Land on South", texture: coastTexture, biome: TileType.Biome.Shore, rotation: (float)Math.PI * 0.0f, movementCost: 7d)); engine.tileTypes.Add(new TileType("Coast Land on West", texture: coastTexture, biome: TileType.Biome.Shore, rotation: (float)Math.PI * 0.5f, movementCost: 7d)); engine.tileTypes.Add(new TileType("Coast Land on North and East", texture: coastBendTexture, biome: TileType.Biome.Shore, rotation: (float)Math.PI * 1.5f, movementCost: 7d)); // Clockwise radians engine.tileTypes.Add(new TileType("Coast Land on East and South", texture: coastBendTexture, biome: TileType.Biome.Shore, rotation: (float)Math.PI * 0.0f, movementCost: 7d)); engine.tileTypes.Add(new TileType("Coast Land on South and West", texture: coastBendTexture, biome: TileType.Biome.Shore, rotation: (float)Math.PI * 0.5f, movementCost: 7d)); engine.tileTypes.Add(new TileType("Coast Land on West and North", texture: coastBendTexture, biome: TileType.Biome.Shore, rotation: (float)Math.PI * 1.0f, movementCost: 7d)); engine.tileTypes.Add(new TileType("Coast Ocean on North", texture: coastCoveTexture, biome: TileType.Biome.Shore, rotation: (float)Math.PI * 0.5f, movementCost: 7d)); // Clockwise radians engine.tileTypes.Add(new TileType("Coast Ocean on East", texture: coastCoveTexture, biome: TileType.Biome.Shore, rotation: (float)Math.PI * 1.0f, movementCost: 7d)); engine.tileTypes.Add(new TileType("Coast Ocean on South", texture: coastCoveTexture, biome: TileType.Biome.Shore, rotation: (float)Math.PI * 1.5f, movementCost: 7d)); engine.tileTypes.Add(new TileType("Coast Ocean on West", texture: coastCoveTexture, biome: TileType.Biome.Shore, rotation: (float)Math.PI * 0.0f, movementCost: 7d)); engine.tileTypes.Add(new TileType("River Straight Vertical", texture: riverStraightTexture, biome: TileType.Biome.River, rotation: (float)Math.PI * 0.0f, movementCost: 2d)); engine.tileTypes.Add(new TileType("River Straight Horizontal", texture: riverStraightTexture, biome: TileType.Biome.River, rotation: (float)Math.PI * 0.5f, movementCost: 2d)); engine.tileTypes.Add(new TileType("River East and South", texture: riverBendTexture, biome: TileType.Biome.River, rotation: (float)Math.PI * 1.5f, movementCost: 2d)); engine.tileTypes.Add(new TileType("River West and South", texture: riverBendTexture, biome: TileType.Biome.River, rotation: (float)Math.PI * 0.0f, movementCost: 2d)); engine.tileTypes.Add(new TileType("River West and North", texture: riverBendTexture, biome: TileType.Biome.River, rotation: (float)Math.PI * 0.5f, movementCost: 2d)); engine.tileTypes.Add(new TileType("River East and North", texture: riverBendTexture, biome: TileType.Biome.River, rotation: (float)Math.PI * 1.0f, movementCost: 2d)); engine.tileTypes.Add(new TileType("River Land on North", texture: riverThreeTexture, biome: TileType.Biome.River, rotation: (float)Math.PI * 0.0f, movementCost: 2d)); engine.tileTypes.Add(new TileType("River Land on East", texture: riverThreeTexture, biome: TileType.Biome.River, rotation: (float)Math.PI * 0.5f, movementCost: 2d)); engine.tileTypes.Add(new TileType("River Land on South", texture: riverThreeTexture, biome: TileType.Biome.River, rotation: (float)Math.PI * 1.0f, movementCost: 2d)); engine.tileTypes.Add(new TileType("River Land on West", texture: riverThreeTexture, biome: TileType.Biome.River, rotation: (float)Math.PI * 1.5f, movementCost: 2d)); engine.tileTypes.Add(new TileType("River Four", texture: riverFourTexture, biome: TileType.Biome.River, rotation: (float)Math.PI * 0.0f, movementCost: 2d)); //Map m = new Map(Vector2.Zero, width, height, ref engine, GraphicsDevice); Map m = new Map(Vector2.Zero, width, height, ref engine, GraphicsDevice, numDreadland.GetTextAsInt(), numDesert.GetTextAsInt(), numPlain.GetTextAsInt(), numMountain.GetTextAsInt(), numTundra.GetTextAsInt(), numForest.GetTextAsInt(), numOcean.GetTextAsInt(), numResource.GetTextAsInt()); //List<UiObject> gameControls = new List<UiObject>(); Texture2D gameBackground = Content.Load<Texture2D>("gameBackground"); // hud Texture2D boxSelect = Content.Load<Texture2D>("BoxSelect"); Texture2D HPbar = Content.Load<Texture2D>("HPbar"); Hud hud = new Hud(ref engine, ref m, boxSelect, HPbar); //gameControls.Add(m); //gameControls.Add(backButton); //gameControls.Add(igBuildTown); //gameControls.Add(igBuildMine); //gameControls.Add(igProduceKnight); //gameControls.Add(igProduceArcher); //gameControls.Add(igProducePeasant); //gameControls.Add(igAttack); //gameControls.Add(igMove); //gameControls.Add(igGather); //gameControls.Add(igStop); //gameControls.Add(hud); //Menu gameMenu = new Menu(hudBackground, new Vector2(0, 0), gameControls, Color.White, 1); // --- // //List<UiObject> newGameControls = new List<UiObject>(); //newGameControls.Add(testTextInput); //newGameControls.Add(goButton); //newGameControls.Add(ngbackButton); //newGameControls.Add(numOcean); //newGameControls.Add(numForest); //newGameControls.Add(numPlain); //newGameControls.Add(numMountain); //newGameControls.Add(numDesert); //newGameControls.Add(numTundra); //newGameControls.Add(numDreadland); //newGameControls.Add(numResource); /*Texture2D swordUnitTexture = Content.Load<Texture2D>("Units\\Kbase"); Texture2D swordUnitAttackTexture = Content.Load<Texture2D>("Units\\Kbaseatk"); Texture2D archerUnitTexture = Content.Load<Texture2D>("Units\\Arcbase"); Texture2D mageUnitTexture = Content.Load<Texture2D>("Units\\Wbase"); Texture2D baseTown = Content.Load<Texture2D>("basictownbase"); Texture2D baseGoldMine = Content.Load<Texture2D>("goldminebase");*/ engine.unitTypes.Add(UnitType.LoadFromFile("config/Knight.xml", Content)); engine.unitTypes.Add(UnitType.LoadFromFile("config/Archer.xml", Content)); engine.unitTypes.Add(UnitType.LoadFromFile("config/Peasant.xml", Content)); engine.unitTypes.Add(UnitType.LoadFromFile("config/Town.xml", Content)); engine.unitTypes.Add(UnitType.LoadFromFile("config/Mine.xml", Content)); /*(engine.unitTypes.Add(new UnitType(name: "Swordsman", idleTextures: new[] { swordUnitTexture }, moveTextures: new[] { swordUnitTexture }, attackTextures: new[] { swordUnitAttackTexture }, actions: new List<UnitType.Action> { UnitType.Action.Attack, UnitType.Action.Move }, attackStrength: 15, defense: 2, gatherRate: 2, goldCost: 100)); engine.unitTypes.Add(new UnitType(name: "Archer", idleTextures: new[] { archerUnitTexture }, moveTextures: new[] { archerUnitTexture }, attackTextures: new[] { archerUnitTexture }, actions: new List<UnitType.Action> { UnitType.Action.Attack, UnitType.Action.Move }, attackStrength: 10, attackRange: 5, defense: 0, gatherRate: 2, goldCost: 100)); engine.unitTypes.Add(new UnitType(name: "Peasent", idleTextures: new[] { mageUnitTexture }, moveTextures: new[] { mageUnitTexture }, attackTextures: new[] { mageUnitTexture }, actions: new List<UnitType.Action> { UnitType.Action.Attack, UnitType.Action.Gather, UnitType.Action.Move, UnitType.Action.Build, UnitType.Action.Produce }, attackStrength: 2, defense: 0, gatherRate: 2, goldCost: 50)); engine.unitTypes.Add(new UnitType(name: "Town", idleTextures: new[] { baseTown }, moveTextures: new[] { baseTown }, attackTextures: new[] { baseTown }, actions: new List<UnitType.Action> { UnitType.Action.Produce }, movementSpeed: 0, movementType: UnitType.MovementType.None, maxHealth: 1000, attackStrength: 0, defense: 10, gatherRate: 15, goldCost: 1000)); engine.unitTypes.Add(new UnitType(name: "GoldMine", idleTextures: new[] { baseGoldMine }, moveTextures: new[] { baseGoldMine }, attackTextures: new[] { baseGoldMine }, actions: new List<UnitType.Action> { UnitType.Action.Gather }, movementSpeed: 0, movementType: UnitType.MovementType.None, maxHealth: 500, attackStrength: 0, defense: 10, gatherRate: 50, goldCost: 500));*/ //Menu newGameMenu = new Menu(hudBackground, Vector2.Zero, newGameControls, Color.White, 2); #endregion SoundEngine.backgroundMusic = Content.Load<Song>("Audio\\RTS_BGM"); // list of all UI objects to be drawn/updated userInterface = new List<UiObject>(); //userInterface.Add(mainMenu); //userInterface.Add(gameMenu); //userInterface.Add(newGameMenu); //mainMenu.Activate(); // activate the main menu first userInterface = ContentLoader.ParseUI("Config.txt", Content, this, font); // force these Menu mainMenuScreen = (Menu)userInterface[0]; Menu inGameScreen = (Menu)userInterface[1]; Menu newGameScreen = (Menu)userInterface[2]; inGameScreen.controls.Insert(0, m); inGameScreen.controls.Add(hud); mainMenuScreen.Activate(); foreach (UiObject u in userInterface) { u.ChangeFont(font); } // TODO: use this.Content to load your game content here }