public static DataObjectInventory LootObjectToInventory(this ModelNPC.ObjectData targetData, ModelNPC.GameDataAlien alien = null) { //if(targetData.TypePrefab == SaveLoadData.TypePrefabs.Ground) //Filter: Loot if (m_emptyTrgetObjects.ContainsKey(targetData.TypePrefab)) //Filter: Loot { return(DataObjectInventory.EmptyInventory()); } if (!Enum.IsDefined(typeof(SaveLoadData.TypeInventoryObjects), targetData.TypePrefabName)) { Debug.Log("######## TypePrefabs not exist NameInventopyObject = " + targetData.TypePrefabName); return(DataObjectInventory.EmptyInventory()); } int countResource = 1; ModelNPC.TerraData terraRes = targetData as ModelNPC.TerraData; if (terraRes != null) { countResource = terraRes.BlockResources; if (alien != null) { terraRes.BlockResources -= alien.WorkPower; // or WorkPower - is time work } } SaveLoadData.TypeInventoryObjects invObject = (SaveLoadData.TypeInventoryObjects)Enum.Parse(typeof(SaveLoadData.TypeInventoryObjects), targetData.TypePrefabName); return(new DataObjectInventory(invObject.ToString(), countResource)); }
public void AddResourceFromAlien(ModelNPC.PortalData portal, ModelNPC.GameDataAlien alien) { DataObjectInventory existRes = DataObjectInventory.EmptyInventory(); //>INV> try { if (portal.Resources == null) //fix null { portal.Resources = new List <DataObjectInventory>(); } existRes = portal.Resources.Where(p => p.TypeInventoryObject == alien.Inventory.TypeInventoryObject).FirstOrDefault(); }catch (System.Exception ex) { Debug.Log(Storage.EventsUI.ListLogAdd = string.Format("###### AddResourceFromAlien error: {0}", ex)); } if (existRes == null) { portal.Resources.Add(new DataObjectInventory(alien.Inventory)); } else { existRes.Count += alien.Inventory.Count; } alien.Inventory.Clear(); }
public void AddResource(ModelNPC.PortalData portal, SaveLoadData.TypeInventoryObjects invObj, int Count = 1) { DataObjectInventory inventory = new DataObjectInventory(invObj.ToString(), Count); DataObjectInventory existRes = DataObjectInventory.EmptyInventory(); //>INV> try { if (portal.Resources == null) //fix null { portal.Resources = new List <DataObjectInventory>(); } existRes = portal.Resources.Where(p => p.TypeInventoryObject == inventory.TypeInventoryObject).FirstOrDefault(); } catch (System.Exception ex) { Debug.Log(Storage.EventsUI.ListLogAdd = string.Format("###### AddResource error: {0}", ex)); } if (existRes == null) { portal.Resources.Add(new DataObjectInventory(inventory)); } else { existRes.Count += inventory.Count; } }
public static void AddToInventory(this ModelNPC.GameDataAlien alien, ModelNPC.PortalData portal, int indexRes, int count) { DataObjectInventory resourceStorage = portal.Resources[indexRes]; portal.Resources[indexRes].Count -= count; if (portal.Resources[indexRes].Count <= 0) { portal.Resources.RemoveAt(indexRes); } alien.Inventory = new DataObjectInventory(resourceStorage.NameInventopyObject, count); }
private void SortingInventory() { var cases = collectionCases.Values.Select(p => p).ToList <GameObject>(); int indexMove = cases.Count - 1; foreach (GameObject caseInv in collectionCases.Values) //<< find case { CaseInventoryData dataInvCase = caseInv.GetComponent <CaseInventoryData>(); //<< data case string nameCaseObject = dataInvCase.NameInventopyObject; //<< object if (string.IsNullOrEmpty(nameCaseObject)) //<< is empty case { //var cases = collectionCases.Values.Select(p=>p).ToList<GameObject>(); //for (int i = cases.Count -1; i<0; i--) //<< finding full case //{ // GameObject caseInvFull = cases[i]; // CaseInventoryData dataInvCaseMove = caseInvFull.GetComponent<CaseInventoryData>(); //<< data case // if(dataInvCaseMove == null) // { // Debug.Log("##### CaseInventoryData not found in caseInv (Full) = " + caseInvFull.name); // continue; // } // DataObjectInventory caseObjectMove = dataInvCaseMove.DataObjectInv; //<< object // if (false == string.IsNullOrEmpty(caseObjectMove.NameInventopyObject)) //<< is full case // { // //Fragment sorting - move object full to empty // UpdateCase(caseInv.name, caseObjectMove); //<< move object in empty case // UpdateCase(caseInvFull.name, null); //<< clear object in full case // break; // } //} //for (int i = cases.Count - 1; i < 0; i--) //<< finding full case //{ GameObject caseInvFull = cases[indexMove--]; CaseInventoryData dataInvCaseMove = caseInvFull.GetComponent <CaseInventoryData>(); //<< data case if (dataInvCaseMove == null) { Debug.Log("##### CaseInventoryData not found in caseInv (Full) = " + caseInvFull.name); continue; } DataObjectInventory caseObjectMove = dataInvCaseMove.DataObjectInv; //<< object if (false == string.IsNullOrEmpty(caseObjectMove.NameInventopyObject)) //<< is full case { //Fragment sorting - move object full to empty UpdateCase(caseInv.name, caseObjectMove); //<< move object in empty case UpdateCase(caseInvFull.name, null); //<< clear object in full case break; } //} break; } } }
public void AddResource(ModelNPC.PortalData portal, DataObjectInventory inventory) { //>INV> DataObjectInventory existRes = portal.Resources.Where(p => p.TypeInventoryObject == inventory.TypeInventoryObject).FirstOrDefault(); if (existRes == null) { portal.Resources.Add(inventory); } else { existRes.Count += inventory.Count; } }
// --- ADD //public void AddCase(SaveLoadData.TypeInventoryObjects inventoryObject) // << add Object in first empty case public void AddCase(DataObjectInventory inventoryObject) // << add Object in first empty case { //SaveLoadData.TypeInventoryObjects inventoryObjectType = foreach (GameObject caseInv in collectionCases.Values) //<< find case { CaseInventoryData dataInvCase = caseInv.GetComponent <CaseInventoryData>(); //<< data case string nameCaseObject = dataInvCase.NameInventopyObject; //<< object if (string.IsNullOrEmpty(nameCaseObject)) //<< exit object { UpdateCase(caseInv.name, inventoryObject); //<< add new object break; } } }
public static void AddToInventory(this ModelNPC.GameDataAlien alien, ModelNPC.PortalData portal, DataObjectInventory res, int count) { int indexRes = portal.Resources.FindIndex(p => p == res); if (indexRes == -1) { Debug.Log("### AddToInventory not fount res: " + res); return; } DataObjectInventory resourceStorage = portal.Resources[indexRes]; portal.Resources[indexRes].Count -= count; if (portal.Resources[indexRes].Count <= 0) { portal.Resources.RemoveAt(indexRes); } alien.Inventory = new DataObjectInventory(resourceStorage.NameInventopyObject, count); }
public DataObjectInventory UpdateCase(string nameCase, DataObjectInventory inventoryObject) { if (inventoryObject == null) { inventoryObject = new DataObjectInventory(""); } DataObjectInventory oldDataObjCase = new DataObjectInventory(""); if (!collectionCases.ContainsKey(nameCase)) { Debug.Log("####### Not in Inventory nameCase = " + nameCase); return(oldDataObjCase); } GameObject caseInv = collectionCases[nameCase]; GameObject invCaseIcon = caseInv.transform.GetChild(0).gameObject; CaseInventoryData dataInvCase = caseInv.GetComponent <CaseInventoryData>(); //SaveLoadData.TypeInventoryObjects typeInvObj = dataInvCase.DataObjectInv.TypeInventopyObject; //string NameInventopyObject = dataInvCase.NameInventopyObject; //if (typeInvObj == SaveLoadData.TypeInventoryObjects.PrefabField) if (string.IsNullOrEmpty(inventoryObject.NameInventopyObject)) { oldDataObjCase = dataInvCase.DataObjectInv; dataInvCase.DataObjectInv = new DataObjectInventory(""); invCaseIcon.SetActive(false); } else { string striteInvName = inventoryObject.NameInventopyObject + "Inv"; if (!Storage.Palette.SpritesInventory.ContainsKey(striteInvName)) { Debug.Log("####### Not in SpritesInventory striteInvName = " + striteInvName); return(oldDataObjCase); } Sprite spriteObjectInv = Storage.Palette.SpritesInventory[striteInvName]; dataInvCase.DataObjectInv = inventoryObject; invCaseIcon.GetComponent <SpriteRenderer>().sprite = spriteObjectInv; invCaseIcon.SetActive(true); } return(oldDataObjCase); }
public DataObjectInventory(DataObjectInventory inventry) { NameInventopyObject = inventry.NameInventopyObject; Count = inventry.Count; }
public void PullInventury() { Inventory.SetCurrentCaseInventoryIndex(0); SelectedInventoryObject = Inventory.GetObjectFromCurrentCase(); }
public bool CheckStorageResourceForAlien(ModelNPC.PortalData portal, ModelNPC.GameDataAlien alien) { string strErr = "0"; ; if (portal.Resources == null || portal.Resources.Count == 0) { return(false); //pessimistic job } if (!alien.Inventory.IsEmpty) { return(true); //optimistic job } DataObjectInventory resNext = null; List <AlienJob> temp_listJobs; SaveLoadData.TypePrefabs typeAlien = alien.TypePrefab; int limitRes = 0; Storage.Person.CollectionAlienJob.TryGetValue(typeAlien, out temp_listJobs); List <int> randomIndex; //>INV> try { //Randomize resources System.Random rnd = new System.Random(); portal.Resources = portal.Resources.OrderBy(x => rnd.Next()).ToList(); for (int indRes = portal.Resources.Count - 1; indRes >= 0; indRes--) { //strErr = "2"; resNext = portal.Resources[indRes]; //resNext = storageResources.Dequeue(); //strErr = "3"; if (temp_listJobs != null && resNext != null) { //strErr = "4"; foreach (var itemJob in temp_listJobs) { if (itemJob == null) { Debug.Log(Storage.EventsUI.ListLogAdd = "### CheckStorageResourceForAlien itemJob is null"); continue; } //trErr = "5"; if (itemJob.ResourceResult.ToString() == resNext.NameInventopyObject) { //strErr = "6"; limitRes = itemJob.LimitResourceCount == 0 ? 1 : itemJob.LimitResourceCount; //strErr = "7"; alien.AddToInventory(portal, indRes, limitRes); //alien.AddToInventory(portal, resNext, limitRes); //strErr = "8"; alien.Job = itemJob; //strErr = "9"; alien.CurrentAction = GameActionPersonController.NameActionsPerson.Target.ToString(); //strErr = "10"; Storage.EventsUI.ListLogAdd = "Storage To Alien >> " + resNext.NameInventopyObject + " >> " + itemJob.TargetResource; return(true); } } } } }catch (System.Exception ex) { Debug.Log(Storage.EventsUI.ListLogAdd = string.Format("###### CheckStorageResourceForAlien #{1} error: {0}", ex, strErr)); } //alien.Inventory.Clear(); return(false); }
private void PortalProcess(ModelNPC.PortalData p_portal) { if (p_portal.ChildrensId == null) { p_portal.ChildrensId = new List <string>(); } int preCountChild = p_portal.ChildrensId.Count; bool isProgress; bool isTimeValid = p_portal.LastTimeFabrication + SettingPortals.PeriodIncubation < Time.time; bool isNotAllLimit = p_portal.ChildrensId.Count < SettingPortals.AllLimitNPC; if (SettingPortals.AllLimitNPC == 0) { SettingPortals.AllLimitNPC = 1; } if (SettingPortals.AllLimitNPC < SettingPortals.StartLimitNPC) { SettingPortals.AllLimitNPC = SettingPortals.StartLimitNPC; } //foreach(DataObjectInventory resource in p_portal.Resources) if (isNotAllLimit && isTimeValid && p_portal.Resources != null && p_portal.Resources.Count > 0) { Storage.EventsUI.ListLogAdd = "PortalWork...."; Storage.EventsUI.SetMessageBox = "PortalWork...."; for (int i = p_portal.Resources.Count() - 1; i >= 0; i--) { m_resourceNext = p_portal.Resources[i]; m_listResourceWork = ResourcesFabrications[p_portal.TypeBiom]; m_workResource = m_listResourceWork.Find(p => p.ResouceInventory == m_resourceNext.TypeInventoryObject); if (m_workResource != null) { if (m_resourceNext.Count >= m_workResource.LimitToBeginProcess) { //isNotProgress = preCountChild == p_portal.ChildrensId.Count && p_portal.CurrentProcess == TypeResourceProcess.None; isProgress = preCountChild != p_portal.ChildrensId.Count && p_portal.CurrentProcess != TypeResourceProcess.None; if (!isProgress) { //Begin portal process incubation on Full resources StartPortalProcess(m_workResource.BeginProcess, p_portal, i, m_workResource); //isIncubationValid = false; } } } } } isProgress = preCountChild != p_portal.ChildrensId.Count;// && isIncubationValid; if (isProgress == false) { //if (p_portal.CurrentProcess == TypeResourceProcess.None) if (p_portal.CurrentProcess == TypeResourceProcess.None || (!p_portal.IsReality && p_portal.CurrentProcess == TypeResourceProcess.Incubation)) //FIX<<>>INCUBATION { bool isNotStartLimit = p_portal.ChildrensId.Count < SettingPortals.StartLimitNPC; //Begin portal process on Time if (isNotStartLimit && isTimeValid) { StartPortalProcess(TypeResourceProcess.Incubation, p_portal); isProgress = true; } } } // - Resources Production if (!isProgress && p_portal.CurrentProcess == TypeResourceProcess.None && isTimeValid && p_portal.Resources != null && p_portal.Resources.Count > 0) { isProgress = FabricationProduction(p_portal); } if (isProgress) { p_portal.EndFabrication(); } }
public static bool CheckJobAlien(ModelNPC.GameDataAlien p_dataNPC, GameActionPersonController controller = null, bool isCheckDistance = true) { AlienJob job = p_dataNPC.Job; if (job == null) { return(false); } ReaderScene.DataObjectInfoID targetInfo = ReaderScene.GetInfoID(p_dataNPC.TargetID); if (targetInfo == null) { return(false); } if (!targetInfo.TestIsValud()) { p_dataNPC.TargetID = null; return(false); } if (isCheckDistance) { if (!Helper.DistanceIsFinish(targetInfo.Data.Position, p_dataNPC.Position)) { return(true); } } string fieldTarget = string.Empty; string fieldAlien = string.Empty; bool isExitTargetResource = false; Helper.GetNameFieldByPosit(ref fieldTarget, targetInfo.Data.Position); ModelNPC.PortalData portal = targetInfo.Data as ModelNPC.PortalData; SaveLoadData.TypePrefabs jobResourceTarget = job.TargetResource; Helper.GetNameFieldByPosit(ref fieldAlien, p_dataNPC.Position); if (p_dataNPC.Inventory == null) { p_dataNPC.Inventory = DataObjectInventory.EmptyInventory(); //Debug.Log(Storage.EventsUI.ListLogAdd = "## JOB: dataNPC.Inventory is null"); } else { isExitTargetResource = job.TargetResource.ToString() == p_dataNPC.Inventory.TypeInventoryObject.ToString(); } // --- TO PORTAL if (portal != null) { if (isExitTargetResource) { //***** Back to HOME **** (trget is Portal) //p_dataNPC.InventoryObject is ModelNPC; Storage.PortalsManager.AddResourceFromAlien(portal, p_dataNPC); } // --- TAKE RESOURCE bool checkStorageResource = Storage.PortalsManager.CheckStorageResourceForAlien(portal, p_dataNPC); if (!checkStorageResource && isExitTargetResource) { //End job p_dataNPC.Job = null; p_dataNPC.TargetID = string.Empty; p_dataNPC.TargetPosition = Vector3.zero; } //Continue job if (p_dataNPC.Job != null && p_dataNPC.Job.Job != TypesJobs.Bathering) { return(true); } } // --- TO LOOT && BUILD else { //Test job on target //@JOB@ if (targetInfo.Data.TypePrefab != jobResourceTarget) { return(false); } if (p_dataNPC.CurrentAction != GameActionPersonController.NameActionsPerson.CompletedLoot.ToString() && p_dataNPC.CurrentAction != GameActionPersonController.NameActionsPerson.Work.ToString()) { GameActionPersonController.ExecuteActionNPC(p_dataNPC, GameActionPersonController.NameActionsPerson.Work, controller, true); } if (p_dataNPC.CurrentAction == GameActionPersonController.NameActionsPerson.CompletedLoot.ToString()) { if (job.Job == TypesJobs.Build) { if (p_dataNPC.Inventory == null || p_dataNPC.Inventory.IsEmpty || p_dataNPC.Inventory.TypeInventoryObject.ToString() != job.ResourceResult.ToString()) { Debug.Log(Storage.EventsUI.ListLogAdd = "### JOB BUILD: Inventory is Empty >> " + job.Job.ToString() + " " + job.TargetResource + " R:" + job.ResourceResult); //p_dataNPC.Inventory = DataObjectInventory.EmptyInventory(); return(false); } } GameActionPersonController.ExecuteActionNPC(p_dataNPC, GameActionPersonController.NameActionsPerson.Move, controller, true); // **** FIND RESOURCE **** //---Replace object //1. Remove resource //Vector3 posTarget = targetInfo.Data.Position; bool isTargetTypeTrue = false; PoolGameObjects.TypePoolPrefabs typePoolResource = CheckFieldJobValid(ref isTargetTypeTrue, job, targetInfo.Data); if (job.Job == TypesJobs.Build) { if (typePoolResource == PoolGameObjects.TypePoolPrefabs.PoolFloor) { GenericWorldManager.ClearLayerObject(targetInfo.Data); } //---- TEST //else // Debug.Log(Storage.EventsUI.ListLogAdd = "TypesJobs.Build .. Not Remove resource: " + job.ResourceResult.ToString() + " >> " + targetInfo.Data.NameObject); } else { GenericWorldManager.ClearLayerObject(targetInfo.Data); } //2. Create new resource if (job.ResourceResult != SaveLoadData.TypePrefabs.PrefabField) { CreateNewResource(typePoolResource, job, targetInfo, p_dataNPC); } bool isZonaReal = Helper.IsValidPiontInZona(targetInfo.Data.Position.x, targetInfo.Data.Position.y); if (isZonaReal) { Storage.GenGrid.LoadObjectToReal(targetInfo.Field); } //3. Add resource in Inventory (where not Ground) p_dataNPC.Inventory = targetInfo.Data.LootObjectToInventory(p_dataNPC); //4. Set target to target location //if (job.JobTo == TypesJobTo.ToPortal) //{ //GameActionPersonController.RequestActionNPC(p_dataNPC, GameActionPersonController.NameActionsPerson.Idle, null); //GameActionPersonController.RequestActionNPC(p_dataNPC, GameActionPersonController.NameActionsPerson.Target, null); //} } //continue work... return(true); } return(false); }
//public void UpdateCase(string nameCase, DataObjectInventory inventoryObject) //{ // //string nameInvObj = inventoryObject.NameInventopyObject; // UpdateCase(nameCase, inventoryObject); //} //public void UpdateCase(int p_indexInv, DataObjectInventory inventoryObject) //{ // //string nameInvObj = inventoryObject.NameInventopyObject; // UpdateCase(p_indexInv, inventoryObject); //} public DataObjectInventory UpdateCase(int p_indexInv, DataObjectInventory inventoryObject) { string nameCase = GetNextNameCaseInv(p_indexInv); return(UpdateCase(nameCase, inventoryObject)); }