예제 #1
0
    public virtual void Initialize(InvItemData shieldItem)
    {
        if (shieldItem == null)
        {
            //no shield installed
            TotalCapacity = 0;
        }
        else
        {
            Type               = (ShieldType)Enum.Parse(typeof(ShieldType), shieldItem.Item.GetStringAttribute("Shield Type"));
            Tech               = (ShieldTech)Enum.Parse(typeof(ShieldTech), shieldItem.Item.GetStringAttribute("Shield Technology"));
            Class              = (ShieldClass)Enum.Parse(typeof(ShieldClass), shieldItem.Item.GetStringAttribute("Shield Class"));
            TotalCapacity      = shieldItem.Item.GetFloatAttribute("Capacity");
            RechargeRate       = shieldItem.Item.GetFloatAttribute("Recharge Rate");
            RechargeDelay      = shieldItem.Item.GetFloatAttribute("Recharge Delay");
            this.PowerRequired = shieldItem.Item.GetFloatAttribute("Power Required");
        }

        MyRenderer = this.GetComponent <MeshRenderer>();
        Material mat = null;

        //if playership then load separate materials
        //if NPC then use preloaded materials in material manager
        //this way playership material can be faded without affecting NPC's material

        if (ParentShip == GameManager.Inst.PlayerControl.PlayerShip)
        {
            if (Tech == ShieldTech.Gravity)
            {
                mat = GameObject.Instantiate(Resources.Load("ShieldEffect1")) as Material;
            }
            else if (Tech == ShieldTech.Plasma)
            {
                mat = GameObject.Instantiate(Resources.Load("ShieldEffect2")) as Material;
            }
            else
            {
                mat = GameObject.Instantiate(Resources.Load("ShieldEffect3")) as Material;
            }
            mat.SetFloat("_Brightness", 0);
        }
        else
        {
            if (Tech == ShieldTech.Gravity)
            {
                mat = GameManager.Inst.MaterialManager.ShieldMaterial1;
            }
            else if (Tech == ShieldTech.Plasma)
            {
                mat = GameManager.Inst.MaterialManager.ShieldMaterial2;
            }
            else
            {
                mat = GameManager.Inst.MaterialManager.ShieldMaterial3;
            }
        }

        MyRenderer.materials = new Material[] { mat, mat, mat };
    }
예제 #2
0
    private Loadout GenerateFactionLoadout(Faction faction, string shipID, int loadoutIndex)
    {
        ShipStats shipStats = GameManager.Inst.ItemManager.GetShipStats(shipID);
        Loadout   loadout   = new Loadout(shipID, shipStats.ShipType);

        List <InvItemData> shieldCandidates    = new List <InvItemData>();
        List <InvItemData> capacitorCandidates = new List <InvItemData>();
        List <InvItemData> thrusterCandidates  = new List <InvItemData>();
        List <InvItemData> scannerCandidates   = new List <InvItemData>();
        List <InvItemData> defensiveCandidates = new List <InvItemData>();
        List <InvItemData> weaponCandidates    = new List <InvItemData>();

        foreach (string equipmentID in faction.EquipmentPool)
        {
            //find the shield with same class as the ship's shield class
            ItemStats itemStats = GameManager.Inst.ItemManager.GetItemStats(equipmentID);
            Item      item      = new Item(itemStats);
            if (item.Type == ItemType.Equipment)
            {
                InvItemData itemData = new InvItemData();
                itemData.Quantity = 1;
                itemData.Item     = item;
                string equipmentType = item.GetStringAttribute("Equipment Type");
                if (equipmentType == "Shield")
                {
                    ShieldClass shieldClass = (ShieldClass)Enum.Parse(typeof(ShieldClass), item.GetStringAttribute("Shield Class"));
                    if (shieldClass == shipStats.ShieldClass)
                    {
                        shieldCandidates.Add(itemData);
                    }
                }
                else if (equipmentType == "WeaponCapacitor")
                {
                    capacitorCandidates.Add(itemData);
                }
                else if (equipmentType == "Thruster")
                {
                    thrusterCandidates.Add(itemData);
                }
                else if (equipmentType == "Scanner")
                {
                    scannerCandidates.Add(itemData);
                }
            }
            else if (item.Type == ItemType.Defensives)
            {
                if (shipStats.DefenseSlots > 0)
                {
                    InvItemData itemData = new InvItemData();
                    itemData.Quantity = 1;
                    itemData.Item     = item;
                    defensiveCandidates.Add(itemData);
                }
            }
            else if (item.Type == ItemType.Weapon)
            {
                InvItemData itemData = new InvItemData();
                itemData.Quantity = 1;
                itemData.Item     = item;
                weaponCandidates.Add(itemData);
            }
            else if (item.Type == ItemType.Ammo)
            {
                InvItemData itemData = new InvItemData();
                itemData.Quantity = 1;
                itemData.Item     = item;
                loadout.AmmoBayItems.Add(itemData);
                Debug.Log("Party Spawner Added ammo " + itemData.Item.ID);
            }
        }

        loadout.Shield          = shieldCandidates[UnityEngine.Random.Range(0, shieldCandidates.Count)];
        loadout.WeaponCapacitor = capacitorCandidates[UnityEngine.Random.Range(0, capacitorCandidates.Count)];
        loadout.Thruster        = thrusterCandidates[UnityEngine.Random.Range(0, thrusterCandidates.Count)];
        loadout.Scanner         = scannerCandidates[UnityEngine.Random.Range(0, scannerCandidates.Count)];

        if (shipStats.DefenseSlots > 0)
        {
            loadout.Defensives = new List <InvItemData>();
            loadout.Defensives.Add(defensiveCandidates[UnityEngine.Random.Range(0, defensiveCandidates.Count)]);
        }

        //go through each weapon slot and find all the weapon candidates that can fit it, and then pick a random one
        loadout.WeaponJoints = new Dictionary <string, InvItemData>();
        foreach (WeaponJointData jointData in shipStats.WeaponJoints)
        {
            List <InvItemData> slotWeaponCandidates = new List <InvItemData>();
            foreach (InvItemData weaponItem in weaponCandidates)
            {
                if (weaponItem.Item.GetIntAttribute("Weapon Class") <= jointData.Class && weaponItem.Item.GetStringAttribute("Rotation Type") == jointData.RotationType.ToString())
                {
                    slotWeaponCandidates.Add(weaponItem);
                }
            }

            if (slotWeaponCandidates.Count > 0)
            {
                loadout.WeaponJoints.Add(jointData.JointID, slotWeaponCandidates[UnityEngine.Random.Range(0, slotWeaponCandidates.Count)]);
            }
        }

        loadout.ShipMods = new InvItemData[shipStats.ModSlots];


        loadout.CurrentPowerMgmtButton = new Vector3(0, -20f, 0);
        loadout.FuelAmount             = shipStats.MaxFuel;
        loadout.HullAmount             = shipStats.Hull;
        loadout.LifeSupportAmount      = shipStats.LifeSupport;
        loadout.LoadoutID = faction.ID + "_" + loadoutIndex.ToString();


        return(loadout);
    }
예제 #3
0
    public void OnInstallButtonClick()
    {
        if (_selectedItem != null)
        {
            if (_selectedItemContainer == CargoEquipmentInventory)
            {
                //check if available power is larger or equal to the _selectedItem
                if (_availablePower < _selectedItem.Item.GetFloatAttribute("Power Required"))
                {
                    //issue an error
                    GameManager.Inst.UIManager.ErrorMessagePanel.DisplayMessage("CANNOT INSTALL EQUIPMENT. NOT ENOUGH POWER");
                    return;
                }

                //remove the invItemData from cargo and assign it to the slot in loadout
                //determine the slot by "EquipmentType" attribute of the item

                string equipmentType = _selectedItem.Item.GetStringAttribute("Equipment Type");

                if (equipmentType != "PassiveShipMod" && equipmentType != "ActiveShipMod")
                {
                    //if is shield, check shield class
                    if (equipmentType == "Shield")
                    {
                        ShieldClass itemShieldClass = (ShieldClass)Enum.Parse(typeof(ShieldClass), _selectedItem.Item.GetStringAttribute("Shield Class"));
                        if (itemShieldClass != GameManager.Inst.ItemManager.AllShipStats[CurrentLoadout.ShipID].ShieldClass)
                        {
                            //issue an error
                            GameManager.Inst.UIManager.ErrorMessagePanel.DisplayMessage("SHIELD CLASS DOES NOT MATCH CURRENT SHIP");
                            return;
                        }
                    }

                    if (CurrentLoadout.CargoBayItems.Contains(_selectedItem))
                    {
                        CurrentLoadout.CargoBayItems.Remove(_selectedItem);
                    }

                    InvItemData tempItem = CurrentLoadout.GetInvItemFromEquipmentType(equipmentType);
                    if (tempItem != null)
                    {
                        CurrentLoadout.CargoBayItems.Add(tempItem);
                    }

                    CurrentLoadout.SetEquipmentInvItem(_selectedItem, equipmentType);
                    _selectedItem = null;
                    tempItem      = null;
                }
                else
                {
                    //check if dependency mod is equiped
                    string dependency = _selectedItem.Item.GetStringAttribute("Dependency");
                    if (dependency != "" && CurrentLoadout.GetShipModFromID(dependency) == null)
                    {
                        GameManager.Inst.UIManager.ErrorMessagePanel.DisplayMessage("CANNOT INSTALL SHIP MOD. DEPENDENCY REQUIRED");
                        return;
                    }

                    //try to install the mod
                    bool result = CurrentLoadout.SetShipModInvItem(_selectedItem, equipmentType);
                    if (result == false)
                    {
                        GameManager.Inst.UIManager.ErrorMessagePanel.DisplayMessage("NO SHIP MOD SLOTS AVAILABLE");
                        return;
                    }
                    else
                    {
                        if (CurrentLoadout.CargoBayItems.Contains(_selectedItem))
                        {
                            CurrentLoadout.CargoBayItems.Remove(_selectedItem);
                        }
                    }

                    _selectedItem = null;
                }



                Refresh();
            }
        }
    }