public void AddImage(GameObject gameObject) { // If the object is large enough, just add a smaller copy to the sensors screen if (gameObject.Bounds.Width > 80 || gameObject.Bounds.Height > 150) { Image sensorImage; if (gameObject.Data != null) { sensorImage = new Image( gameObject.Data.TextureAsset, gameObject.Position / (Camera2D.BackgroundMultiplier), new Vector2(1 / Camera2D.BackgroundMultiplier, 1 / Camera2D.BackgroundMultiplier), gameObject.Data.Name, gameObject.Rotation); sensorImage.SetHoverInfoText(sensorImage.Name); } else { string[] strings = gameObject.DataAsset.Split('/'); sensorImage = new Image( gameObject.DataAsset, gameObject.Position / (Camera2D.BackgroundMultiplier), new Vector2(1 / Camera2D.BackgroundMultiplier, 1 / Camera2D.BackgroundMultiplier), strings.Last(), gameObject.Rotation); } sensorImage.SetTexture(gameObject.Texture); SensorImages.Add(gameObject, sensorImage); AddScreenUIElement(sensorImage); } else { string imageAsset = "Object"; if (gameObject as EnemyShip != null) { imageAsset = "Enemy"; } else if (gameObject as PlayerShip != null) { imageAsset = "Player"; } Image sensorImage = new Image( "", ScreenManager.ScreenCentre + gameObject.Position / (Camera2D.BackgroundMultiplier), "Sensor Image"); if (gameObject.Data != null) { sensorImage.SetHoverInfoText(gameObject.Data.Name); } sensorImage.SetTexture(Thumbnails[imageAsset]); AddScreenUIElement(sensorImage); SensorImages.Add(gameObject, sensorImage); } }
private void DisplayShieldInformation(string shieldName) { CurrentObjectInfoPanel.Clear(); ShieldData shieldData = ScreenManager.Content.Load<ShieldData>("XML/Shields/" + shieldName); if (shieldData != null) { Image shieldImage = new Image( shieldData.TextureAsset, new Vector2(-CurrentObjectInfoPanel.Dimensions.X / 3, -CurrentObjectInfoPanel.Dimensions.Y / 7), CurrentObjectInfoPanel.Dimensions.X / 3, 2 * CurrentObjectInfoPanel.Dimensions.Y / 5, new Color(shieldData.Colour), shieldName + " Image"); CurrentObjectInfoPanel.LoadAndAddUIElement(shieldImage); Text name = new Text( shieldData.Name, new Vector2(0, -2 * CurrentObjectInfoPanel.Dimensions.Y / 5), Color.Cyan, "Name"); CurrentObjectInfoPanel.LoadAndAddUIElement(name); name.SetHoverInfoText("Shield Name"); Text strengthText = new Text( shieldData.Strength.ToString(), new Vector2(0, 4 * name.TextOrigin.Y), Color.White, shieldName + " Strength"); CurrentObjectInfoPanel.LoadAndAddUIElementRelativeTo(strengthText, name); strengthText.SetHoverInfoText("Strength"); Text rechargePerSecondText = new Text( shieldData.RechargePerSecond.ToString(), new Vector2(0, 4 * strengthText.TextOrigin.Y), Color.White, shieldName + " Recharge Per Second"); CurrentObjectInfoPanel.LoadAndAddUIElementRelativeTo(rechargePerSecondText, strengthText); Image rechargePerSecondImage = new Image( "Sprites/UI/Thumbnails/RepairRateThumbnail", new Vector2(-rechargePerSecondText.TextOrigin.X - 25, 0), new Vector2(1, 1), Color.LightGreen, "Recharge Per Second Thumbnail"); CurrentObjectInfoPanel.LoadAndAddUIElementRelativeTo(rechargePerSecondImage, rechargePerSecondText); rechargePerSecondImage.SetHoverInfoText("Recharge Per Second"); Text rechargeDelayText = new Text( shieldData.RechargeDelay.ToString(), new Vector2(0, 4 * rechargePerSecondText.TextOrigin.Y), Color.White, shieldName + " Recharge Delay"); CurrentObjectInfoPanel.LoadAndAddUIElementRelativeTo(rechargeDelayText, rechargePerSecondText); rechargeDelayText.SetHoverInfoText("Recharge Delay"); Text depletionDelayText = new Text( shieldData.DepletionDelay.ToString(), new Vector2(0, 4 * rechargeDelayText.TextOrigin.Y), Color.White, shieldName + " Depletion Delay"); CurrentObjectInfoPanel.LoadAndAddUIElementRelativeTo(depletionDelayText, rechargeDelayText); depletionDelayText.SetHoverInfoText("Depletion Delay"); Text descriptionText = new Text( shieldData.Description, new Vector2(0, CurrentObjectInfoPanel.Dimensions.Y / 6), 4 * CurrentObjectInfoPanel.Dimensions.X / 5, Color.White, shieldName + " Description"); CurrentObjectInfoPanel.LoadAndAddUIElementRelativeTo(descriptionText, depletionDelayText); int cost = shieldData.Cost; if (PlayerShip.Shield != null) { cost -= PlayerShip.Shield.ShieldData.Cost / 2; } string costString = cost.ToString(); Text costText = new Text( costString, new Vector2(-CurrentObjectInfoPanel.Dimensions.X / 8, CurrentObjectInfoPanel.Dimensions.Y / 5), Color.White, "Cost"); CurrentObjectInfoPanel.LoadAndAddUIElementRelativeTo(costText, descriptionText); Image moneyImage = new Image( "Sprites/UI/Thumbnails/MoneyThumbnail", new Vector2(-costText.TextOrigin.X - 20, 0), new Vector2(1, 1), Color.Cyan, "Cost Thumbnail"); CurrentObjectInfoPanel.LoadAndAddUIElementRelativeTo(moneyImage, costText); Button buyButton = new Button( "XML/UI/Buttons/MenuButton", new Vector2(costText.TextOrigin.X + CurrentObjectInfoPanel.Dimensions.X / 3, 0), Button.defaultColour, Button.highlightedColour, shieldName + " " + costString, "Purchase"); buyButton.InteractEvent += BuyShieldEvent; buyButton.EnableAndDisableEvent += SameShieldPurchaseActivationEvent; CurrentObjectInfoPanel.LoadAndAddUIElementRelativeTo(buyButton, costText); } }
private void DisplayShipInformation(string shipName) { CurrentObjectInfoPanel.Clear(); ShipData shipData = ScreenManager.Content.Load<ShipData>("XML/Ships/" + shipName); if (shipData != null) { Image shipImage = new Image( shipData.TextureAsset, new Vector2(-CurrentObjectInfoPanel.Dimensions.X / 3, -CurrentObjectInfoPanel.Dimensions.Y / 4), CurrentObjectInfoPanel.Dimensions.X / 3, 2 * CurrentObjectInfoPanel.Dimensions.Y / 5, shipName + " Image"); CurrentObjectInfoPanel.LoadAndAddUIElement(shipImage); Text name = new Text( shipData.Name, new Vector2(0, -2 * CurrentObjectInfoPanel.Dimensions.Y / 5), Color.LightGreen, "Name"); CurrentObjectInfoPanel.LoadAndAddUIElement(name); name.SetHoverInfoText("Ship Name"); Text armourText = new Text( shipData.Armour.ToString(), new Vector2(0, 4 * name.TextOrigin.Y), Color.White, shipName + " Armour"); CurrentObjectInfoPanel.LoadAndAddUIElementRelativeTo(armourText, name); Image armourImage = new Image( "Sprites/UI/Thumbnails/ArmourThumbnail", new Vector2(-5 * armourText.TextOrigin.X / 2, 0), "Armour Thumbnail"); CurrentObjectInfoPanel.LoadAndAddUIElementRelativeTo(armourImage, armourText); armourImage.SetHoverInfoText("Armour"); Text hullText = new Text( shipData.Hull.ToString(), new Vector2(0, 4 * armourText.TextOrigin.Y), Color.White, shipName + " Hull"); CurrentObjectInfoPanel.LoadAndAddUIElementRelativeTo(hullText, armourText); Image hullImage = new Image( "Sprites/UI/Thumbnails/HullThumbnail", new Vector2(-5 * hullText.TextOrigin.X / 2, 0), new Vector2(1, 1), Color.White, "Hull Thumbnail"); CurrentObjectInfoPanel.LoadAndAddUIElementRelativeTo(hullImage, hullText); hullImage.SetHoverInfoText("Hull"); Text massText = new Text( shipData.Mass.ToString(), new Vector2(0, 4 * hullText.TextOrigin.Y), Color.White, shipName + " Mass"); CurrentObjectInfoPanel.LoadAndAddUIElementRelativeTo(massText, hullText); Image massImage = new Image( "Sprites/UI/Thumbnails/MassThumbnail", new Vector2(-hullText.TextOrigin.X - 35, 0), new Vector2(1, 1), Color.White, "Mass Thumbnail"); CurrentObjectInfoPanel.LoadAndAddUIElementRelativeTo(massImage, massText); massImage.SetHoverInfoText("Mass"); Text weaponSlotsText = new Text( shipData.WeaponHardPoints.Count.ToString(), new Vector2(0, 4 * massText.TextOrigin.Y), Color.White, shipName + " Weapon Slots"); CurrentObjectInfoPanel.LoadAndAddUIElementRelativeTo(weaponSlotsText, massText); Image weaponSlotsImage = new Image( "Sprites/UI/Thumbnails/WeaponSlotsThumbnail", new Vector2(-weaponSlotsText.TextOrigin.X - 25, 0), "Weapons Slots Thumbnail"); CurrentObjectInfoPanel.LoadAndAddUIElementRelativeTo(weaponSlotsImage, weaponSlotsText); weaponSlotsImage.SetHoverInfoText("Weapon Slots"); Text shipModSlotsText = new Text( shipData.ShipModSlots.ToString(), new Vector2(0, 4 * massText.TextOrigin.Y), Color.White, shipName + " Ship Mods Slot"); CurrentObjectInfoPanel.LoadAndAddUIElementRelativeTo(shipModSlotsText, weaponSlotsText); shipModSlotsText.SetHoverInfoText("Ship Mod Slots"); Text descriptionText = new Text( shipData.Description, new Vector2(0, CurrentObjectInfoPanel.Dimensions.Y / 7), 4 * CurrentObjectInfoPanel.Dimensions.X / 5, Color.White, shipName + " Description"); CurrentObjectInfoPanel.LoadAndAddUIElementRelativeTo(descriptionText, shipModSlotsText); int cost = shipData.Cost; if (PlayerShip != null) { cost -= PlayerShip.TotalWorth / 2; } string costString = cost.ToString(); Text costText = new Text( costString, new Vector2(-CurrentObjectInfoPanel.Dimensions.X / 8, CurrentObjectInfoPanel.Dimensions.Y / 6), Color.White, "Cost"); CurrentObjectInfoPanel.LoadAndAddUIElementRelativeTo(costText, descriptionText); Image moneyImage = new Image( "Sprites/UI/Thumbnails/MoneyThumbnail", new Vector2(-costText.TextOrigin.X - 20, 0), new Vector2(1, 1), Color.Cyan, "Cost Thumbnail"); CurrentObjectInfoPanel.LoadAndAddUIElementRelativeTo(moneyImage, costText); Button buyButton = new Button( "XML/UI/Buttons/MenuButton", new Vector2(costText.TextOrigin.X + CurrentObjectInfoPanel.Dimensions.X / 3, 0), Button.defaultColour, Button.highlightedColour, shipName + " " + costString, "Purchase"); buyButton.InteractEvent += BuyShipEvent; buyButton.EnableAndDisableEvent += SameShipPurchaseActivationEvent; CurrentObjectInfoPanel.LoadAndAddUIElementRelativeTo(buyButton, costText); } }
private void DisplaySensorInformation(string sensorName) { CurrentObjectInfoPanel.Clear(); SensorData sensorData = ScreenManager.Content.Load<SensorData>("XML/Sensors/" + sensorName); if (sensorData != null) { Image shieldImage = new Image( sensorData.TextureAsset, new Vector2(-CurrentObjectInfoPanel.Dimensions.X / 3, -CurrentObjectInfoPanel.Dimensions.Y / 7), CurrentObjectInfoPanel.Dimensions.X / 3, 2 * CurrentObjectInfoPanel.Dimensions.Y / 5, sensorName + " Image"); CurrentObjectInfoPanel.LoadAndAddUIElement(shieldImage); Text name = new Text( sensorData.Name, new Vector2(0, -2 * CurrentObjectInfoPanel.Dimensions.Y / 5), Color.Yellow, "Name"); CurrentObjectInfoPanel.LoadAndAddUIElement(name); name.SetHoverInfoText("Sensor Name"); Text sensorRangeText = new Text( sensorData.Range.ToString(), new Vector2(0, 4 * name.TextOrigin.Y), Color.White, sensorName + " Range"); CurrentObjectInfoPanel.LoadAndAddUIElementRelativeTo(sensorRangeText, name); Image sensorRangeImage = new Image( "Sprites/UI/Thumbnails/SensorRangeThumbnail", new Vector2(-2 * sensorRangeText.TextOrigin.X, 0), new Vector2(1, 1), Color.LightGreen, "Range Image"); CurrentObjectInfoPanel.LoadAndAddUIElementRelativeTo(sensorRangeImage, sensorRangeText); sensorRangeImage.SetHoverInfoText("Range"); Text descriptionText = new Text( sensorData.Description, new Vector2(0, CurrentObjectInfoPanel.Dimensions.Y / 2), 4 * CurrentObjectInfoPanel.Dimensions.X / 5, Color.White, sensorName + " Description"); CurrentObjectInfoPanel.LoadAndAddUIElementRelativeTo(descriptionText, sensorRangeText); int cost = sensorData.Cost; if (PlayerShip.Sensors != null) { cost -= PlayerShip.Sensors.SensorData.Cost / 2; } string costString = cost.ToString(); Text costText = new Text( costString, new Vector2(-CurrentObjectInfoPanel.Dimensions.X / 8, CurrentObjectInfoPanel.Dimensions.Y / 5), Color.White, "Cost"); CurrentObjectInfoPanel.LoadAndAddUIElementRelativeTo(costText, descriptionText); Image moneyImage = new Image( "Sprites/UI/Thumbnails/MoneyThumbnail", new Vector2(-costText.TextOrigin.X - 20, 0), new Vector2(1, 1), Color.Cyan, "Cost Thumbnail"); CurrentObjectInfoPanel.LoadAndAddUIElementRelativeTo(moneyImage, costText); Button buyButton = new Button( "XML/UI/Buttons/MenuButton", new Vector2(costText.TextOrigin.X + CurrentObjectInfoPanel.Dimensions.X / 3, 0), Button.defaultColour, Button.highlightedColour, sensorName + " " + costString, "Purchase"); buyButton.InteractEvent += BuySensorEvent; buyButton.EnableAndDisableEvent += SameSensorPurchaseActivationEvent; CurrentObjectInfoPanel.LoadAndAddUIElementRelativeTo(buyButton, costText); } }
private void DisplayEngineInformation(string engineName) { CurrentObjectInfoPanel.Clear(); EngineData engineData = ScreenManager.Content.Load<EngineData>("XML/Engines/" + engineName); if (engineData != null) { Image shieldImage = new Image( engineData.TextureAsset, new Vector2(-CurrentObjectInfoPanel.Dimensions.X / 3, -CurrentObjectInfoPanel.Dimensions.Y / 7), CurrentObjectInfoPanel.Dimensions.X / 3, 2 * CurrentObjectInfoPanel.Dimensions.Y / 5, engineName + " Image"); CurrentObjectInfoPanel.LoadAndAddUIElement(shieldImage); Text name = new Text( engineData.Name, new Vector2(0, -2 * CurrentObjectInfoPanel.Dimensions.Y / 5), Color.Yellow, "Name"); CurrentObjectInfoPanel.LoadAndAddUIElement(name); name.SetHoverInfoText("Engine Name"); Text speedText = new Text( engineData.EngineSpeed.ToString(), new Vector2(0, 4 * name.TextOrigin.Y), Color.White, engineName + " Speed"); CurrentObjectInfoPanel.LoadAndAddUIElementRelativeTo(speedText, name); speedText.SetHoverInfoText("Thrust"); string rotateValueString = MathHelper.ToDegrees(engineData.EngineRotateSpeed).ToString(); string trimmedRotateValue = rotateValueString.Length > 3 ? rotateValueString.Substring(0, 4) : rotateValueString; Text rotateSpeedText = new Text( trimmedRotateValue, new Vector2(0, 4 * speedText.TextOrigin.Y), Color.White, engineData + " RotateSpeed"); CurrentObjectInfoPanel.LoadAndAddUIElementRelativeTo(rotateSpeedText, speedText); Image rotateSpeedImage = new Image( "Sprites/UI/Thumbnails/RotateSpeedThumbnail", new Vector2(-rotateSpeedText.TextOrigin.X - 25, 0), "Rotate Speed Image"); CurrentObjectInfoPanel.LoadAndAddUIElementRelativeTo(rotateSpeedImage, rotateSpeedText); rotateSpeedImage.SetHoverInfoText("Rotate Degrees Per Second"); Text descriptionText = new Text( engineData.Description, new Vector2(0, 2 * CurrentObjectInfoPanel.Dimensions.Y / 5), 4 * CurrentObjectInfoPanel.Dimensions.X / 5, Color.White, engineName + " Description"); CurrentObjectInfoPanel.LoadAndAddUIElementRelativeTo(descriptionText, rotateSpeedText); Text costText = new Text( engineData.Cost.ToString(), new Vector2(-CurrentObjectInfoPanel.Dimensions.X / 8, CurrentObjectInfoPanel.Dimensions.Y / 5), Color.White, "Cost"); CurrentObjectInfoPanel.LoadAndAddUIElementRelativeTo(costText, descriptionText); Image moneyImage = new Image( "Sprites/UI/Thumbnails/MoneyThumbnail", new Vector2(-costText.TextOrigin.X - 20, 0), new Vector2(1, 1), Color.Cyan, "Cost Thumbnail"); CurrentObjectInfoPanel.LoadAndAddUIElementRelativeTo(moneyImage, costText); Button buyButton = new Button( "XML/UI/Buttons/MenuButton", new Vector2(costText.TextOrigin.X + CurrentObjectInfoPanel.Dimensions.X / 3, 0), Button.defaultColour, Button.highlightedColour, engineName + " " + engineData.Cost, "Purchase"); buyButton.InteractEvent += BuyEngineEvent; buyButton.EnableAndDisableEvent += EnginePurchaseActivationEvent; CurrentObjectInfoPanel.LoadAndAddUIElementRelativeTo(buyButton, costText); } }
private void CreateAndPopulatePanel(string panelName, Vector2 buttonPosition, bool createSwitchButton = true) { Panel panel = new Panel( "Sprites/UI/Panels/MenuPanelBackground", new Vector2(ScreenManager.Viewport.Width / 3, 21 * ScreenManager.Viewport.Height / 40), new Vector2(3 * ScreenManager.Viewport.Width / 5, 17 * ScreenManager.Viewport.Height / 20), Color.White, panelName + " Panel"); UpgradePanels.Add(panelName, panel); // Populate panel here DirectoryInfo directory = new DirectoryInfo(ScreenManager.Content.RootDirectory + "/XML/" + panelName); if (directory.Exists) { FileInfo[] files = directory.GetFiles("*.xnb*"); int yDimensions = 4; int xDimensions = 8; for (int y = 0; y < yDimensions; y++) { for (int x = 0; x < xDimensions; x++) { if (y * xDimensions + x < files.Length) { string key = Path.GetFileNameWithoutExtension(files[y * xDimensions + x].Name); if (panelName != "Shields") { GameObjectData gameObjectData = ScreenManager.Content.Load<GameObjectData>("XML/" + panelName + "/" + key); Image objectImage = new Image( gameObjectData.TextureAsset, new Vector2(-2 * panel.Dimensions.X / 5 + x * panel.Dimensions.X / (xDimensions + 1), -2 * panel.Dimensions.Y / 5 + y * panel.Dimensions.Y / yDimensions), panel.Dimensions.X / (2 * xDimensions + 1), panel.Dimensions.Y / (2 * yDimensions), panelName + "/" + key); objectImage.InteractEvent += DisplayShopObjectInformation; panel.LoadAndAddUIElement(objectImage); objectImage.SetHoverInfoText(gameObjectData.Name); } else { ShieldData shieldData = ScreenManager.Content.Load<ShieldData>("XML/" + panelName + "/" + key); Image objectImage = new Image( shieldData.TextureAsset, new Vector2(-2 * panel.Dimensions.X / 5 + x * panel.Dimensions.X / xDimensions, -2 * panel.Dimensions.Y / 5 + y * panel.Dimensions.Y / yDimensions), panel.Dimensions.X / (2 * xDimensions), panel.Dimensions.Y / (2 * yDimensions), new Color(shieldData.Colour), panelName + "/" + key); objectImage.InteractEvent += DisplayShopObjectInformation; panel.LoadAndAddUIElement(objectImage); objectImage.SetHoverInfoText(shieldData.Name); } } } } } if (createSwitchButton) { CreatePanelSwitchButton(panelName, buttonPosition); } AddScreenUIElement(panel); }
private void SetUpUI() { Vector2 shipPanelButtonPosition = new Vector2(120, ScreenManager.Viewport.Height / 20); Vector2 buttonSpacing = new Vector2(ScreenManager.Viewport.Width / 8, 0); CreateAndPopulatePanel("Ships", shipPanelButtonPosition); CreateAndPopulatePanel("Weapons", shipPanelButtonPosition + buttonSpacing); CreateAndPopulatePanel("Engines", shipPanelButtonPosition + 2 * buttonSpacing); CreateAndPopulatePanel("Shields", shipPanelButtonPosition + 3 * buttonSpacing); CreateAndPopulatePanel("Sensors", shipPanelButtonPosition + 4 * buttonSpacing); CreateAndPopulateShipModPanel("Ship Mods", shipPanelButtonPosition + 5 * buttonSpacing); CurrentObjectInfoPanel = new Panel( "Sprites/UI/Panels/MenuPanelBackground", new Vector2(82 * ScreenManager.Viewport.Width / 100, ScreenManager.Viewport.Height / 3), new Vector2(7 * ScreenManager.Viewport.Width / 20, 2 * ScreenManager.Viewport.Height / 5), Color.White, "Current Object Info", 0.5f); AddScreenUIElement(CurrentObjectInfoPanel); CurrentShipInfoPanel = new Panel( "Sprites/UI/Panels/MenuPanelBackground", new Vector2(82 * ScreenManager.Viewport.Width / 100, 3 * ScreenManager.Viewport.Height / 4), new Vector2(7 * ScreenManager.Viewport.Width / 20, 2 * ScreenManager.Viewport.Height / 5), Color.White, "Current Ship Info", 0.5f); AddScreenUIElement(CurrentShipInfoPanel); Text money = new Text( ExtendedScreenManager.Session.Money.ToString(), shipPanelButtonPosition + 6 * buttonSpacing, Color.White, "Current Money"); AddScreenUIElement(money); Image moneyImage = new Image( "Sprites/UI/Thumbnails/MoneyThumbnail", new Vector2(money.Position.X - money.TextOrigin.X - 20, money.Position.Y), new Vector2(1, 1), Color.Cyan, "Current Money Thumbnail"); AddScreenUIElement(moneyImage); moneyImage.SetHoverInfoText("Current Money"); CreateNextMissionButton(); ActivatePanel("Ships"); SetUpCurrentShipInformation(); DisplayCurrentShipInformation(); }
private void DisplayWeaponInformation(string weaponName) { CurrentObjectInfoPanel.Clear(); TurretData turretData = ScreenManager.Content.Load<TurretData>("XML/Weapons/" + weaponName); if (turretData != null) { Image weaponImage = new Image( turretData.TextureAsset, new Vector2(-CurrentObjectInfoPanel.Dimensions.X / 3, -CurrentObjectInfoPanel.Dimensions.Y / 4), CurrentObjectInfoPanel.Dimensions.X / 4, CurrentObjectInfoPanel.Dimensions.Y / 5, weaponName + " Image"); CurrentObjectInfoPanel.LoadAndAddUIElement(weaponImage); Text name = new Text( turretData.Name, new Vector2(0, -2 * CurrentObjectInfoPanel.Dimensions.Y / 5), new Color(1, 0, 0.17f, 1), "Name"); CurrentObjectInfoPanel.LoadAndAddUIElement(name); name.SetHoverInfoText("Weapon Name"); Text weaponType = new Text( turretData.Type, new Vector2(0, 4 * name.TextOrigin.Y), Color.White, weaponName + " Type"); CurrentObjectInfoPanel.LoadAndAddUIElementRelativeTo(weaponType, name); Image weaponTypeImage = new Image( "Sprites/UI/Thumbnails/WeaponType" + turretData.Type, new Vector2(-3 * weaponType.TextOrigin.X / 2, 0), "Weapon Type Thumbnail"); CurrentObjectInfoPanel.LoadAndAddUIElementRelativeTo(weaponTypeImage, weaponType); weaponTypeImage.SetHoverInfoText("Weapon Type"); int lengthOfString = (1 / turretData.FireTimer).ToString().Length > 4 ? 4 : (1 / turretData.FireTimer).ToString().Length; Text weaponFireSpeed = new Text( (1 / turretData.FireTimer).ToString().Substring(0, lengthOfString), new Vector2(0, 4 * weaponType.TextOrigin.Y), Color.White, weaponName + " Fire Speed"); CurrentObjectInfoPanel.LoadAndAddUIElementRelativeTo(weaponFireSpeed, weaponType); weaponFireSpeed.SetHoverInfoText("Shot Per Second"); Text weaponRange = new Text( turretData.Range.ToString(), new Vector2(0, 4 * weaponFireSpeed.TextOrigin.Y), Color.White, weaponName + " Range"); CurrentObjectInfoPanel.LoadAndAddUIElementRelativeTo(weaponRange, weaponFireSpeed); weaponRange.SetHoverInfoText("Range"); Text weaponDamage = new Text( turretData.BulletDamage.ToString(), new Vector2(0, 4 * weaponRange.TextOrigin.Y), Color.White, weaponName + " Damage"); CurrentObjectInfoPanel.LoadAndAddUIElementRelativeTo(weaponDamage, weaponRange); Image weaponDamageImage = new Image( "Sprites/UI/Thumbnails/DamageThumbnail", new Vector2(-weaponDamage.TextOrigin.X - 25, 0), new Vector2(1, 1), Color.OrangeRed, "Weapon Damage Thumbnail"); CurrentObjectInfoPanel.LoadAndAddUIElementRelativeTo(weaponDamageImage, weaponDamage); weaponDamageImage.SetHoverInfoText("Damage"); Text descriptionText = new Text( turretData.Description, new Vector2(0, CurrentObjectInfoPanel.Dimensions.Y / 6), 4 * CurrentObjectInfoPanel.Dimensions.X / 5, Color.White, weaponName + " Description"); CurrentObjectInfoPanel.LoadAndAddUIElementRelativeTo(descriptionText, weaponDamage); Text costText = new Text( turretData.Cost.ToString(), new Vector2(-CurrentObjectInfoPanel.Dimensions.X / 8, CurrentObjectInfoPanel.Dimensions.Y / 5), Color.White, "Cost"); CurrentObjectInfoPanel.LoadAndAddUIElementRelativeTo(costText, descriptionText); Image moneyImage = new Image( "Sprites/UI/Thumbnails/MoneyThumbnail", new Vector2(-costText.TextOrigin.X - 20, 0), new Vector2(1, 1), Color.Cyan, "Cost Thumbnail"); CurrentObjectInfoPanel.LoadAndAddUIElementRelativeTo(moneyImage, costText); Button buyButton = new Button( "XML/UI/Buttons/MenuButton", new Vector2(costText.TextOrigin.X + CurrentObjectInfoPanel.Dimensions.X / 3, 0), Button.defaultColour, Button.highlightedColour, weaponName + " " + turretData.Cost, "Purchase"); buyButton.InteractEvent += BuyWeaponEvent; buyButton.EnableAndDisableEvent += WeaponPurchaseActivationEvent; CurrentObjectInfoPanel.LoadAndAddUIElementRelativeTo(buyButton, costText); } }