public void Setup() { // set room hp based on system power consumption for (int i = 0; i < weaponsEquipped.Count; i++) { Weapon weapon = weaponsEquipped[i]; GameObject weaponGO = new GameObject(); weaponGO.name = weapon.name; weaponGO.transform.position += shipManager.transform.position + (Vector3)shipManager.weaponSlotsPositions[i]; weaponGO.transform.eulerAngles -= shipManager.transform.eulerAngles; weaponGO.transform.SetParent(shipManager.arsenal.transform); weaponGO.AddComponent <SpriteRenderer>(); Weaponry weaponry = weaponGO.AddComponent <Weaponry>(); weaponry.weapon = weaponsEquipped[i]; weaponry.hp = weaponry.weapon.powerConsumption; maxHP += weaponry.hp; weapons.Add(weaponGO); } if (shipManager.isPlayer) { GameManager.GetShipWeapons(); GameManager.BattleUiManager.SetupWeapons(); } // rotate system go according to the ship's rotation so weapons can be positioned properly systemGO.transform.localRotation = shipManager.body.transform.localRotation; currentHP = maxHP; }
public void AttachWeapon(Weapon weapon) { if (weapon == null) { Debug.LogError("Weapon not passed (needed in order to attach it)."); return; } GameObject weaponGO = new GameObject(); weaponGO.name = weapon.name; //FIXME give a proper position for this weapon (I think it shoots from there and it's bad if it's all ) //weaponGO.transform.position += shipManager.transform.position + (Vector3)shipManager.weaponSlotsPositions[i]; weaponGO.transform.eulerAngles -= shipManager.transform.eulerAngles; weaponGO.transform.SetParent(shipManager.arsenal.transform); weaponGO.AddComponent <SpriteRenderer>(); Weaponry weaponry = weaponGO.AddComponent <Weaponry>(); weaponry.weapon = weapon; weaponry.hp = weaponry.weapon.powerConsumption; maxHP += weaponry.hp; currentHP += weaponry.hp; weaponsEquipped.Add(weapon); weapons.Add(weaponGO); GameManager.GetShipWeapons(); GameManager.BattleUiManager.SetupWeapons(); //weaponry.RefreshWeaponsSystem(); if (GameManager.InBattle) { GameManager.BattleUiManager.RefreshWeaponsPowerUsage(); } }
public void RefreshWeaponsPowerUsage() { for (int i = 0; i < GameManager.shipWeapons.Count; i++) { GameObject weapon = weapons.transform.GetChild(i).gameObject; Weaponry shipWeapon = GameManager.shipWeapons[i].GetComponent <Weaponry>(); PowerUsage weaponPowerUsage = weapon.GetComponent <PowerUsage>(); // if weapon is damaged, turn icon red if (shipWeapon.IsDamaged) { weaponPowerUsage.iconGO.GetComponent <Image>().color = weapon.GetComponent <Image>().color = damagedColor; } else { weaponPowerUsage.iconGO.GetComponent <Image>().color = weapon.GetComponent <Image>().color = NORMAL_COLOR; } weaponPowerUsage.maxUsage = GameManager.ship.WeaponsRoom.weaponsEquipped[i].powerConsumption; weaponPowerUsage.usage = shipWeapon.powerConsumption; weaponPowerUsage.IsPowered = shipWeapon.IsPowered; weaponPowerUsage.RefreshPowerUsageUI(shipWeapon); } // refresh power value powerValueTxt = powerValue.GetComponent <TMPro.TextMeshProUGUI>(); powerValueTxt.text = playerShip.reactor.ToString(); }
void Start() { // set weapon attributes damage = weapon.damage; speed = weapon.shotSpeed; direction = target.position - transform.position; // set projectile's weapon (source) sourceWeapon = source.GetComponent <Weaponry>(); // get camera camManager = Camera.main.GetComponent <CameraManager>(); }
private void CheckTargetSystems(Weaponry weaponry) { int highestTargetPriority = -1; Transform targetRoom = null; // loop through every room and target the one with the highest priority for (int i = 0; i < playerShip.rooms.Count; i++) { // set room Room room = playerShip.rooms[i].GetComponent <Room>(); // if there is no room system, return if (room.system != null && room.CurrentHP > 0) { // check room's target priority if (room.system.targetPriority > highestTargetPriority) { highestTargetPriority = room.system.targetPriority; targetRoom = room.transform; } } } if (targetRoom == null) { for (int i = 0; i < playerShip.rooms.Count; i++) { // set room Room room = playerShip.rooms[i].GetComponent <Room>(); // if there is no room system, return if (room.system != null) { // check room's target priority if (room.system.targetPriority > highestTargetPriority) { highestTargetPriority = room.system.targetPriority; targetRoom = room.transform; } } } } // target a random tile in the room int randomTileIndex = Random.Range(0, targetRoom.GetComponent <Room>().Tiles.Count); GameObject randomTile = targetRoom.GetChild(randomTileIndex).gameObject; Transform target = randomTile.transform; weaponry.SetTarget(target); }
// public void AddListenerToShipCrew() { // int nOfButtons = 0; // for (int i = 0; i < playerShip.crew.transform.childCount; i++) { // GameObject crewmemberGO = playerShip.crew.transform.GetChild(i).gameObject; // // if the crewmember's gameobject is inactive for some reason, skip to next // if(crewmemberGO.activeSelf == false) { // continue; // } // GameObject crewButton = crewPanel.transform.GetChild(nOfButtons).gameObject; // Crewmember crewmember = crewmemberGO.GetComponent<Crewmember>(); // UnityEngine.UI.Toggle crewToggle = crewButton.GetComponent<UnityEngine.UI.Toggle>(); // ToggleColor toggleColor = crewButton.GetComponent<ToggleColor>(); // // assign toggle to the crewmember's script // crewmember.toggle = crewToggle; // // remove all previous functionalities from crew toggle // crewToggle.onValueChanged.RemoveAllListeners(); // // add functionality to crew toggle // crewToggle.onValueChanged.AddListener(crewmember.ToggleSelection); // crewToggle.onValueChanged.AddListener(toggleColor.OnToggleValueChanged); // nOfButtons++; // } // } public void AddListenerToShipWeapons() { for (int i = 0; i < GameManager.shipWeapons.Count; i++) { GameObject weapon = weapons.transform.GetChild(i).gameObject; Weaponry shipWeapon = GameManager.shipWeapons[i].GetComponent <Weaponry>(); CustomButton weaponButton = weapon.GetComponent <CustomButton>(); // remove all previous functionalities from weapon button weaponButton.onTap.RemoveAllListeners(); weaponButton.onDoubleTap.RemoveAllListeners(); weaponButton.onLongTap.RemoveAllListeners(); // add functionality to weapon button weaponButton.onTap.AddListener(delegate() { shipWeapon.ToggleSelectWeapon(); }); weaponButton.onDoubleTap.AddListener(delegate() { shipWeapon.AddFullPower(); }); weaponButton.onLongTap.AddListener(delegate() { shipWeapon.RemoveAllPower(); }); } }
void CheckWeapons() { foreach (Transform weaponChild in AIship.arsenal.transform) { Weaponry weaponry = weaponChild.GetComponent <Weaponry>(); // if on cooldown or damaged, skip. if (!weaponry.OnCooldown && !weaponry.IsDamaged && weaponry.IsPowered) { // select weapon weaponry.isSelected = true; // check target systems with current weapon CheckTargetSystems(weaponry); // shoot with the current weapon weaponry.Shoot(); } } }
// receive damage from one of this room's tile public override void TakeDamage(float damage) { base.TakeDamage(damage); int roomDamage = Mathf.RoundToInt(damage / 10); if (currentHP <= maxHP) { for (int i = 0; i < weapons.Count; i++) { Weaponry weaponManager = weapons[i].GetComponent <Weaponry>(); // if weapon is powered and there's still damage to apply if (roomDamage > 0) { // if was powered return weapon's power back to the ship's reactor if (weaponManager.IsPowered) { shipManager.reactor += weaponManager.powerConsumption; } // damage weapon // decrease hp according to room dmg int previousHP = weaponManager.hp; weaponManager.hp -= roomDamage; if (weaponManager.hp < 0) { weaponManager.hp = 0; } // reduce room damage according to the weapon's power consumption (for the possible next weapon damage) roomDamage -= previousHP - weaponManager.hp; // set weapon power consumption to zero weaponManager.powerConsumption = 0; // refresh weapons system power consumption and capacity //weaponManager.RefreshWeaponsSystem(); } } } // refresh power usage GameManager.BattleUiManager.RefreshPowerUsage(); }
// repair system with a crew member or robot public override void RepairOneBar() { //int hpRecovered = 0; for (int i = 0; i < weapons.Count; i++) { Weaponry weapon = weapons[i].GetComponent <Weaponry>(); if (weapon.hp < weapon.powerCap) { weapon.hp += 1; //hpRecovered = 1; break; } } currentHP++; if (currentHP > maxHP) { currentHP = maxHP; } GameManager.BattleUiManager.RefreshPowerUsage(); }
public void SetupWeapons() { for (int i = 0; i < GameManager.shipWeapons.Count; i++) { GameObject weapon = weapons.transform.GetChild(i).gameObject; Weaponry shipWeapon = GameManager.shipWeapons[i].GetComponent <Weaponry>(); // set weapon power usage to UI PowerUsage weaponPowerUsage = weapon.GetComponent <PowerUsage>(); weaponPowerUsage.SetWeapon(shipWeapon); weaponPowerUsage.maxUsage = shipWeapon.powerCap; weaponPowerUsage.RefreshMaxPowerUsageUI(); Image weaponIcon = weapon.transform.GetChild(0).GetComponentInChildren <Image>(); // enable weapon icon weaponIcon.enabled = true; // set weapon icon weaponIcon.sprite = GameManager.ship.WeaponsRoom.weaponsEquipped[i].icon; } AddListenerToShipWeapons(); RefreshWeaponsPowerUsage(); }
public void SetWeapon(Weaponry weapon) { this.weapon = weapon; }