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 }; }
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); }
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(); } } }