Ejemplo n.º 1
0
    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));
    }
Ejemplo n.º 2
0
    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();
    }
Ejemplo n.º 3
0
    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;
        }
    }
Ejemplo n.º 4
0
    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);
    }
Ejemplo n.º 5
0
    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;
            }
        }
    }
Ejemplo n.º 6
0
    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;
        }
    }
Ejemplo n.º 7
0
    // --- 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;
            }
        }
    }
Ejemplo n.º 8
0
    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);
    }
Ejemplo n.º 9
0
    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);
    }
Ejemplo n.º 10
0
 public DataObjectInventory(DataObjectInventory inventry)
 {
     NameInventopyObject = inventry.NameInventopyObject;
     Count = inventry.Count;
 }
Ejemplo n.º 11
0
 public void PullInventury()
 {
     Inventory.SetCurrentCaseInventoryIndex(0);
     SelectedInventoryObject = Inventory.GetObjectFromCurrentCase();
 }
Ejemplo n.º 12
0
    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);
    }
Ejemplo n.º 13
0
    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();
        }
    }
Ejemplo n.º 14
0
    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);
    }
Ejemplo n.º 15
0
    //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));
    }