protected override void ShowHardPointsEvent(object sender, EventArgs e) { Image objectImage = sender as Image; if (objectImage != null) { foreach (PlayerShip ally in UnderSiegeGameplayScreen.Allies.Values) { ally.DrawOtherHardPoints = true; } ShipShieldData shieldData = objectImage.StoredObject as ShipShieldData; if (shieldData != null) { // This is going to need to be generalised - how are we going to store/get the ShipAddOn type name? PurchaseItemUI purchaseShipObjectUI = new PurchaseItemUI(objectImage.Texture, shieldData, shieldData.AddOnType, ScreenManager.GameMouse.InGameMouse); purchaseShipObjectUI.OnSelect += CheckForPlaceObjectEvent; HUD.GameplayScreen.AddInGameUIObject(purchaseShipObjectUI, "Purchase Object UI", false); purchaseShipObjectUI.Initialize(); purchaseShipObjectUI.Colour = new Color(shieldData.Colour); purchaseShipObjectUI.Size = new Vector2(shieldData.ShieldRange, shieldData.ShieldRange); previousCameraZoom = Camera.Zoom; Camera.Zoom = 1; } } ScreenManager.GameMouse.Flush(); }
private void AddUI(ShipShieldData shipShieldData) { Vector2 size = Vector2.Zero; // For now don't set the position of this label, because we do not know the size yet // However, with correct parenting we will only need to set this position at the very end when the size is calculated // And everything else will be correctly position Label name = new Label(shipShieldData.DisplayName, Vector2.Zero, Color.Cyan, this); size = name.TextDimensions; AddUIObject(name, "Shield Name"); ImageAndLabel health = new ImageAndLabel("Sprites\\UI\\Icons\\Health", "Health: " + shipShieldData.Health.ToString(), new Vector2(0, SpriteFont.LineSpacing + padding), Color.White, name); AddUIObject(health, "Shield Health", true); size = new Vector2(Math.Max(size.X, health.Dimensions.X), size.Y + SpriteFont.LineSpacing + padding); Label range = new Label("Range: " + shipShieldData.ShieldRange.ToString(), new Vector2(0, SpriteFont.LineSpacing + padding), Color.White, health); size = new Vector2(Math.Max(size.X, range.TextDimensions.X), size.Y + SpriteFont.LineSpacing + padding); AddUIObject(range, "Shield Range"); ImageAndLabel strength = new ImageAndLabel("Sprites\\UI\\Icons\\ShieldStrength", "Strength: " + shipShieldData.ShieldStrength.ToString(), new Vector2(0, SpriteFont.LineSpacing + padding), Color.White, range); AddUIObject(strength, "Shield Strength", true); size = new Vector2(Math.Max(size.X, strength.Dimensions.X), size.Y + SpriteFont.LineSpacing + padding); Label depletedRechargeDelay = new Label("Depleted Recharge Delay: " + shipShieldData.ShieldDepletedRechargeDelay.ToString(), new Vector2(0, SpriteFont.LineSpacing + padding), Color.White, strength); size = new Vector2(Math.Max(size.X, depletedRechargeDelay.TextDimensions.X), size.Y + SpriteFont.LineSpacing + padding); AddUIObject(depletedRechargeDelay, "Shield Depleted Recharge Delay"); Label damagedRechargeDelay = new Label("Damaged Recharge Delay: " + shipShieldData.ShieldDamagedRechargeDelay.ToString(), new Vector2(0, SpriteFont.LineSpacing + padding), Color.White, depletedRechargeDelay); size = new Vector2(Math.Max(size.X, damagedRechargeDelay.TextDimensions.X), size.Y + SpriteFont.LineSpacing + padding); AddUIObject(damagedRechargeDelay, "Shield Damaged Recharge Delay"); ImageAndLabel rechargePerSecond = new ImageAndLabel("Sprites\\UI\\Icons\\RepairRate", "Recharge Per Second: " + shipShieldData.ShieldRechargePerSecond.ToString(), new Vector2(0, SpriteFont.LineSpacing + padding), Color.White, damagedRechargeDelay); AddUIObject(rechargePerSecond, "Recharge Per Second", true); size = new Vector2(Math.Max(size.X, rechargePerSecond.Dimensions.X), size.Y + SpriteFont.LineSpacing + padding); ImageAndLabel price = new ImageAndLabel("Sprites\\UI\\Icons\\MoneyIcon", shipShieldData.Price.ToString(), new Vector2(0, SpriteFont.LineSpacing + padding), rechargePerSecond); size = new Vector2(Math.Max(size.X, price.Dimensions.X), size.Y + SpriteFont.LineSpacing + padding); AddUIObject(price, "Shield Price"); Size = size + new Vector2(padding, padding) * 2; LocalPosition += new Vector2(0, -Size.Y * 0.5f); // Position the first UI element correctly name.LocalPosition = new Vector2(0, -Size.Y * 0.5f + SpriteFont.LineSpacing * 0.5f + padding); }
public BuyShipShieldHoverInfo(ShipShieldData shipShieldData, Vector2 localPosition, BaseObject parent, float lifeTime = float.MaxValue) : base(shipShieldData, localPosition, parent, lifeTime) { AddUI(shipShieldData); }