Ejemplo n.º 1
0
        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;
        }
Ejemplo n.º 2
0
        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();
            }
        }
Ejemplo n.º 3
0
        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();
        }
Ejemplo n.º 4
0
        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>();
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        // 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(); });
            }
        }
Ejemplo n.º 7
0
        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();
                }
            }
        }
Ejemplo n.º 8
0
        // 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();
        }
Ejemplo n.º 9
0
        // 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();
        }
Ejemplo n.º 10
0
        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();
        }
Ejemplo n.º 11
0
 public void SetWeapon(Weaponry weapon)
 {
     this.weapon = weapon;
 }