Exemple #1
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();
    }
Exemple #2
0
    private static void CeckJobPass(ref ModelNPC.ObjectData result, ModelNPC.GameDataAlien dataAlien)
    {
        dataAlien.JobPass++;
        if (dataAlien.JobPass > 2)
        {
            Debug.Log(Storage.EventsUI.ListLogAdd = "[[[ JobPass Go To Home ]]] " + dataAlien.NameObject);

            if (dataAlien.PortalId == null)
            {
                Storage.PortalsManager.SetHome(dataAlien);
            }

            var info = ReaderScene.GetInfoID(dataAlien.PortalId);
            if (info != null)
            {
                if (dataAlien.JobPass >= 5)
                {
                    result = info.Data;
                }
                else
                {
                    var portal = info.Data as ModelNPC.PortalData;
                    if (portal != null && portal.Resources == null && portal.Resources.Count > 0)
                    {
                        result = info.Data;
                    }
                }
            }
            dataAlien.JobPass = 0;
        }
    }
    //public bool IsLocked = false;
    //public string TempLockedTargetID;

    public static void CheckComplitionMoveInDream(ModelNPC.GameDataAlien dataNPC)
    {
        //TEST
        if (dataNPC.IsReality)
        {
            Debug.Log(Storage.EventsUI.ListLogAdd = "### CheckComplitionMoveInDream dataNPC IsReality !!!");
            return;
        }

        Vector3 newCurrentPosition = GetAlienData(dataNPC).Position;// .MovePosition;
        float   dist = Vector3.Distance(dataNPC.TargetPosition, newCurrentPosition);
        //string nameFiledTarget = Helper.GetNameField(dataNPC.TargetPosition);
        //string nameFiledCurrent = Helper.GetNameField(newCurrentPosition);
        string nameFiledTarget  = Helper.GetNameFieldPosit(dataNPC.TargetPosition.x, dataNPC.TargetPosition.y);
        string nameFiledCurrent = Helper.GetNameFieldPosit(newCurrentPosition.x, newCurrentPosition.y);

        //End move to Target
        bool trueDist  = dist < MinDistEndMove;
        bool trueField = nameFiledTarget == nameFiledCurrent;

        if (trueDist || trueField)
        {
            //@JOB@
            if (AlienJobsManager.CheckJobAlien(dataNPC) == false)
            {
                RequestActionNPC(dataNPC, NameActionsPerson.Idle, null);
            }
        }
    }
Exemple #4
0
    private static void CreateNewResource(PoolGameObjects.TypePoolPrefabs typePoolResource,
                                          AlienJob job,
                                          ReaderScene.DataObjectInfoID targetInfo,
                                          ModelNPC.GameDataAlien p_dataNPC)
    {
        PaletteMapController.SelCheckOptDel deleteOpt = PaletteMapController.SelCheckOptDel.None;
        PaletteMapController.SelCheckOptDel checkOpt  = PaletteMapController.SelCheckOptDel.DelTerra;
        if (typePoolResource != PoolGameObjects.TypePoolPrefabs.PoolFloor &&
            typePoolResource != PoolGameObjects.TypePoolPrefabs.PoolPerson)
        {
            checkOpt = PaletteMapController.SelCheckOptDel.DelPrefab;
        }

        ModelNPC.ObjectData spawnObject = Storage.GenWorld.GetCreatePrefab(job.ResourceResult, targetInfo.Field);
        bool isSpawned = Storage.Data.AddDataObjectInGrid(spawnObject,
                                                          targetInfo.Field, "CheckJobAlien",
                                                          p_modeDelete: deleteOpt,
                                                          p_modeCheck: checkOpt,
                                                          p_dataNPC: p_dataNPC);

        spawnObject.PortalId = p_dataNPC.PortalId;
        if (!isSpawned)
        {
            Debug.Log(Storage.EventsUI.ListLogAdd = "### JOB [" + job.Job.ToString() + "]: Not Spawn " + spawnObject.NameObject);
        }
        else if (job.Job == TypesJobs.Build)
        {
            ManagerPortals.AddConstruction(spawnObject, p_dataNPC);
        }
    }
    public static void CheckNextAction(ModelNPC.GameDataAlien dataNPC, NameActionsPerson p_actionPerson, GameActionPersonController controller)
    {
        CheckCompletionActions(dataNPC, p_actionPerson, controller);

        var listPersonActions = GetActions(dataNPC);

        //fix WORK
        CheckCurrentAction(dataNPC, ref p_actionPerson);
        //p_actionPerson = GetCurrentAction(dataNPC);

        if (dataNPC.CurrentAction == NameActionsPerson.Completed.ToString())
        {
            if (listPersonActions.Count == 0)
            {
                AddActionNPC(dataNPC, NameActionsPerson.Completed);
            }

            listPersonActions = GetActions(dataNPC);

            if (listPersonActions.Count > 0)
            {
                NameActionsPerson actionPerson = listPersonActions[0];
                listPersonActions.RemoveAt(0);
                dataNPC.PersonActions = listPersonActions.Select(p => p.ToString()).ToArray();// (p=>p.).ToArray();
                StartActionNPC(dataNPC, actionPerson, controller);
            }
        }
        else
        {
            StartActionNPC(dataNPC, p_actionPerson, controller);
        }
    }
 public static void CheckComplitionLoot(ModelNPC.GameDataAlien dataNPC, GameActionPersonController controller)
 {
     //if (AlienJobsManager.CheckJobAlien(dataNPC) == false)
     if (AlienJobsManager.CheckJobAlien(dataNPC, isCheckDistance: false) == false)
     {
         RequestActionNPC(dataNPC, NameActionsPerson.Target, controller);
     }
 }
 public static void GetCurrentAction_Cache(ref NameActionsPerson result, ModelNPC.GameDataAlien dataNPC)
 {
     if (string.IsNullOrEmpty(dataNPC.CurrentAction))
     {
         dataNPC.CurrentAction = NameActionsPerson.Idle.ToString();
     }
     result = (NameActionsPerson)Enum.Parse(typeof(NameActionsPerson), dataNPC.CurrentAction);;
 }
 public static NameActionsPerson GetCurrentAction(ModelNPC.GameDataAlien dataNPC)
 {
     if (string.IsNullOrEmpty(dataNPC.CurrentAction))
     {
         //Debug.Log("####### GetCurrentAction dataNPC.CurrentAction is null");
         dataNPC.CurrentAction = NameActionsPerson.Idle.ToString();
     }
     return((NameActionsPerson)Enum.Parse(typeof(NameActionsPerson), dataNPC.CurrentAction));;
 }
    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);
    }
    public static void CheckCompletionActions(ModelNPC.GameDataAlien dataNPC, NameActionsPerson actionPerson, GameActionPersonController controller)
    {
        //dleLock, Move, Target, TargetLocal, TargetBackToBase
        switch (actionPerson)
        {
        case NameActionsPerson.Idle:
            CheckComplitionIdle(dataNPC, controller);
            break;

        case NameActionsPerson.IdleLock:
            CheckComplitionIdleLock(dataNPC, controller);
            break;

        case NameActionsPerson.Move:
            if (controller != null)
            {
                controller.CheckComplitionMove();
            }
            else
            {
                CheckComplitionMoveInDream(dataNPC);
            }
            break;

        case NameActionsPerson.None:
            if (controller != null)
            {
                controller.ActionPerson = NameActionsPerson.Idle;
            }
            dataNPC.CurrentAction = NameActionsPerson.Idle.ToString();
            break;

        case NameActionsPerson.CompletedLoot:
            CheckComplitionLoot(dataNPC, controller);
            break;

        case NameActionsPerson.Work:
            CheckComplitionWork(dataNPC, controller);
            break;

        case NameActionsPerson.Target:
        case NameActionsPerson.TargetLocal:
        case NameActionsPerson.TargetBackToBase:
            break;

        case NameActionsPerson.Attack:
        case NameActionsPerson.Dead:
        case NameActionsPerson.Completed:

            break;
        }
    }
 public static void CheckCurrentAction(ModelNPC.GameDataAlien dataNPC, ref NameActionsPerson result)
 {
     if (string.IsNullOrEmpty(dataNPC.CurrentAction))
     {
         //Debug.Log("####### GetCurrentAction dataNPC.CurrentAction is null");
         dataNPC.CurrentAction = NameActionsPerson.Idle.ToString();
     }
     if (dataNPC.CurrentAction != NameActionsPerson.Completed.ToString())
     {
         result = (NameActionsPerson)Enum.Parse(typeof(NameActionsPerson), dataNPC.CurrentAction);
     }
     ;
 }
Exemple #12
0
    public void SetHome(ModelNPC.GameDataAlien dataAlien)
    {
        float dist_min = 10000;
        float dist     = 0;

        foreach (ModelNPC.PortalData portal in Portals)
        {
            dist = Vector3.Distance(portal.Position, dataAlien.Position);
            if (dist < dist_min)
            {
                dist_min           = dist;
                dataAlien.PortalId = portal.Id;
            }
        }
    }
Exemple #13
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);
    }
Exemple #14
0
    public static void AddConstruction(ModelNPC.ObjectData spawnedBuild, ModelNPC.GameDataAlien alien)
    {
        if (string.IsNullOrEmpty(spawnedBuild.PortalId))
        {
            Debug.Log(Storage.EventsUI.ListLogAdd = "### Portal AddConstruction = spawnedBuild.PortalId - is null");
            return;
        }
        ModelNPC.PortalData portal = Storage.PortalsManager.Portals.Find(p => p.Id == spawnedBuild.PortalId); //  info.Data as ModelNPC.PortalData;
        if (portal == null)
        {
            Debug.Log(Storage.EventsUI.ListLogAdd = "### Portal AddConstruction =  Storage.PortalsManager.Portals - not found = " + spawnedBuild.PortalId);
            Storage.PortalsManager.SetHome(alien);
            spawnedBuild.PortalId = alien.PortalId;


            var info = ReaderScene.GetInfoID(spawnedBuild.PortalId);
            if (info == null)
            {
                Debug.Log(Storage.EventsUI.ListLogAdd = "### Portal AddConstruction = spawnedBuild.Id - not found = " + spawnedBuild.Id);
            }
            else
            {
                portal = info.Data as ModelNPC.PortalData;
            }
        }

        //%CLUSTER FILL
        if (spawnedBuild.IsFloor())
        {
            Vector2Int posField    = Helper.GetFieldPositByWorldPosit(spawnedBuild.Position);
            int        clusterFill = AlienJobsManager.GetClusterSize(posField.x, posField.y, spawnedBuild.TypePrefab);
            (spawnedBuild as ModelNPC.TerraData).ClusterFillSize = clusterFill;
            (spawnedBuild as ModelNPC.TerraData).DataCreate      = DateTime.Now;
        }

        if (portal != null)
        {
            portal.AddConstruction(spawnedBuild.TypePrefab, spawnedBuild.Id);
        }
        else
        {
            Debug.Log(Storage.EventsUI.ListLogAdd = "### Portal AddConstruction = portal is null");
        }
    }
 private void CheckUpdateModelView()
 {
     if (m_stateInit != IsStartInit)
     {
         m_stateInit = IsStartInit;
         m_dataNPC   = m_meMovement.GetData("GameActionPersonController.Start") as ModelNPC.GameDataAlien;
         if (m_dataNPC == null)
         {
             Debug.Log("########### ERROR CheckUpdateModelView  m_dataNPC is null");
             return;
         }
         InitCurrentAction();
         bool isNewModel = temp_TypePrefab != m_dataNPC.TypePrefab; //??? Error NullReferenceException
         if (isNewModel)
         {
             //temp_dataNPC = m_dataNPC;
             temp_TypePrefab = m_dataNPC.TypePrefab;
             UpdateMeModelView();
         }
     }
 }
Exemple #16
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);
    }
Exemple #17
0
    public void FindJobBuildLocation(ref ModelNPC.ObjectData result, ref AlienJob job, ModelNPC.GameDataAlien dataAien, int distantionWay)
    {
        if (!Storage.Person.CollectionAlienJob.ContainsKey(dataAien.TypePrefab))
        {
            return;
        }

        ReaderScene.DataObjectInfoID info;
        ModelNPC.PortalData          portal = null;
        List <string> listId;
        TypesBiomNPC  biomType = Helper.GetBiomByTypeModel(dataAien.TypePrefab);

        SaveLoadData.TypePrefabs floorType = PortalBiomFloorsBase[biomType];

        result = null;
        if (string.IsNullOrEmpty(dataAien.PortalId))
        {
            return;
        }
        info = ReaderScene.GetInfoID(dataAien.PortalId);
        if (info == null)
        {
            return;
        }

        portal = info.Data as ModelNPC.PortalData;
        portal.ConstructionsId.TryGetValue(floorType, out listId);
        if (listId == null)
        {
            return;
        }

        List <AlienJob> jobs          = null;
        Vector2Int      test_fieldPos = Vector2Int.zero;
        Vector2Int      keyField;
        int             x                                = 0;
        int             y                                = 0;
        string          nameField                        = string.Empty;
        string          key                              = string.Empty;
        bool            isFieldJobValid                  = true;
        bool            isValidFieldBuildFar             = true;
        bool            isValidFar                       = true;
        bool            isInventoryContainTargetResource = false;

        temp_excludedFreeFileds.Clear();
        //Get jobs
        Storage.Person.CollectionAlienJob.TryGetValue(dataAien.TypePrefab, out jobs);

        Helper.GetFieldPositByWorldPosit(ref x, ref y, dataAien.Position);
        temp_findedFloorsIdForBuild.Clear();

        //Fill floors portal for building
        System.Random rnd = new System.Random();
        temp_findedFloorsIdForBuild = listId.OrderBy(p => rnd.Next()).ToList();

        List <ModelNPC.TerraData> floorsData = new List <ModelNPC.TerraData>();

        foreach (string nextRndID in temp_findedFloorsIdForBuild)
        {
            info = ReaderScene.GetInfoID(nextRndID);
            if (info == null)
            {
                continue;
            }
            if (!(info.Data is ModelNPC.TerraData))
            {
                continue;
            }
            floorsData.Add(info.Data as ModelNPC.TerraData);
        }
        //Floors portal
        foreach (ModelNPC.TerraData floorData in floorsData.OrderBy(p => p.ClusterFillSize))
        {
            isValidFieldBuildFar = true;
            isFieldJobValid      = true;
            keyField             = Helper.GetFieldPositByWorldPosit(floorData.Position);
            //Select job by target resource
            foreach (AlienJob jobItem in jobs.Where(p => p.TargetResource == floorData.TypePrefab)) //fix all jobs for type Resource
            {
                job = jobItem;
                if (job != null)
                {
                    if (job.Job != TypesJobs.Build)
                    {
                        continue;
                    }

                    // Test field on free
                    PoolGameObjects.TypePoolPrefabs typePoolResult = AlienJobsManager.CheckFieldJobValid(ref isFieldJobValid, job, floorData);
                    //Filter: Build
                    switch (job.Job)
                    {
                    case TypesJobs.Build:
                        isValidFar = false;
                        //Test inventory filled
                        isInventoryContainTargetResource = dataAien.Inventory != null && dataAien.Inventory.EqualsInv(job.ResourceResult);
                        if (!isInventoryContainTargetResource)
                        {
                            isValidFar = false;
                        }
                        else if (typePoolResult == PoolGameObjects.TypePoolPrefabs.PoolFloor)
                        {
                            //test near objects type of me (Cluster)
                            //AlienJobsManager.IsMeCluster(ref isValidFar, keyField.x, keyField.y, job.ResourceResult, job.ClusterSize);
                            job = null;
                            continue;
                        }
                        else
                        {
                            //Build Prefab
                            if (isValidFieldBuildFar)     //Test Free location
                            {
                                //isValidFieldBuildFar = IsFreeLocationPortalConstruction(ref temp_excludedFreeFileds,
                                //    keyField.x, keyField.y, job.BuildingyardSize, dataAien.Inventory.TypePrefabObject, portal); //TypesBiomNPC
                                isValidFieldBuildFar = IsFreeLocationPortalConstruction(ref temp_excludedFreeFileds,
                                                                                        keyField.x, keyField.y, job.BuildingyardSize, job.ResourceResult, portal); //TypesBiomNPC
                            }
                            isValidFar = isValidFieldBuildFar;
                        }
                        if (!isValidFar || !isFieldJobValid)
                        {
                            job = null;
                            continue;
                        }
                        break;
                    }
                    result = floorData;
                    return;
                }
            }
        }

        temp_findedFloorsIdForBuild.Clear();
        dataAien.JobPass = 0;
        job = null;
    }
Exemple #18
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));
    }
Exemple #19
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);
    }
Exemple #20
0
 public static void FindFromLocation_Cache(ref ModelNPC.ObjectData result, ModelNPC.ObjectData data, int distantion)
 {
     dataAlien_FindFromLocation_Cache = data as ModelNPC.GameDataAlien;
     GetFieldPositByWorldPosit(ref posFieldInt_FindFromLocation_X, ref posFieldInt_FindFromLocation_Y, data.Position.x, data.Position.y);
     result = ReaderScene.GetDataInfoLocation(posFieldInt_FindFromLocation_X, posFieldInt_FindFromLocation_Y, distantion, data.Id, data.TypePrefab, dataAlien_FindFromLocation_Cache.PrevousTargetID, false).ResultData;
 }
Exemple #21
0
    /*
     * public static bool CheckJobAlien(ModelNPC.GameDataAlien p_dataNPC, GameActionPersonController controller = null)
     * {
     *  AlienJob job = p_dataNPC.Job;
     *  if (job != null)
     *  {
     *      string fieldAlien = string.Empty;
     *      string fieldTarget = string.Empty;
     *      Helper.GetNameFieldByPosit(ref fieldAlien, p_dataNPC.Position);
     *      SaveLoadData.TypePrefabs jobResourceTarget = job.TargetResource;
     *      //Target object
     *      ReaderScene.DataObjectInfoID targetInfo = ReaderScene.GetInfoID(p_dataNPC.TargetID);
     *      if (targetInfo != null)
     *      {
     *          if (!targetInfo.TestIsValud())
     *          {
     *              p_dataNPC.TargetID = null;
     *          }
     *          else
     *          {
     *              int distField = 0;
     *              Helper.GetDistatntionFields(ref distField, targetInfo.Data.Position, p_dataNPC.Position);
     *              Helper.GetNameFieldByPosit(ref fieldTarget, targetInfo.Data.Position);
     *
     *              ModelNPC.PortalData portal = targetInfo.Data as ModelNPC.PortalData;
     *              if (distField < 2)
     *              {
     *                  bool isExitTargetResource = false;
     *                  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)
     *                      {
     *                          //if (!job.IsJobCompleted && !job.IsJobRun)
     *                          //if (p_dataNPC.CurrentAction == GameActionPersonController.NameActionsPerson.Target.ToString())
     *                          //p_dataNPC.CurrentAction != GameActionPersonController.NameActionsPerson.Work.ToString())
     *                          if (p_dataNPC.CurrentAction != GameActionPersonController.NameActionsPerson.CompletedLoot.ToString() &&
     *                              p_dataNPC.CurrentAction != GameActionPersonController.NameActionsPerson.Work.ToString())
     *                          {
     *                              //job.IsJobRun = true;
     *                              //p_dataNPC.CurrentAction = GameActionPersonController.NameActionsPerson.Target.ToString();
     *                              //GameActionPersonController.RequestActionNPC(p_dataNPC, GameActionPersonController.NameActionsPerson.Work, null);
     *                              GameActionPersonController.ExecuteActionNPC(p_dataNPC, GameActionPersonController.NameActionsPerson.Work, controller, true);
     *                          }
     *                          //if(job.IsJobCompleted)
     *                          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;
     *                                  }
     *                              }
     *                              //p_dataNPC.CurrentAction = GameActionPersonController.NameActionsPerson.Target.ToString();
     *                              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)
     *                              {
     *                                  bool isTestMe = false;
     *                                  PaletteMapController.SelCheckOptDel deleteOpt = PaletteMapController.SelCheckOptDel.None;
     *                                  PaletteMapController.SelCheckOptDel checkOpt = PaletteMapController.SelCheckOptDel.DelTerra;
     *                                  if (typePoolResource != PoolGameObjects.TypePoolPrefabs.PoolFloor &&
     *                                      typePoolResource != PoolGameObjects.TypePoolPrefabs.PoolPerson)
     *                                  {
     *                                      checkOpt = PaletteMapController.SelCheckOptDel.DelPrefab;
     *                                      isTestMe = true;
     *                                  }
     *
     *                                  //Storage.GenWorld.GenericPrefabOnWorld(job.ResourceResult, posTarget);
     *                                  ModelNPC.ObjectData spawnObject = Storage.GenWorld.GetCreatePrefab(job.ResourceResult, targetInfo.Field);
     *                                  bool isSpawned = Storage.Data.AddDataObjectInGrid(spawnObject,
     *                                                      targetInfo.Field, "CheckJobAlien",
     *                                                      p_modeDelete: deleteOpt,
     *                                                      p_modeCheck: checkOpt,
     *                                                      p_dataNPC: p_dataNPC);
     *                                  spawnObject.PortalId = p_dataNPC.PortalId;
     *                                  if (!isSpawned)
     *                                      Debug.Log(Storage.EventsUI.ListLogAdd = "### JOB [" + job.Job.ToString() + "]: Not Spawn " + spawnObject.NameObject);
     *                                  else if(job.Job == TypesJobs.Build)
     *                                      ManagerPortals.AddConstruction(spawnObject, p_dataNPC);
     *                              }
     *                              bool isZonaReal = Helper.IsValidPiontInZona(targetInfo.Data.Position.x, targetInfo.Data.Position.y);
     *                              //if (!targetInfo.Data.IsReality && isZonaReal)
     *                              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 static void GetAlienNextTargetObject(ref ModelNPC.ObjectData result, ref AlienJob job, ModelNPC.GameDataAlien dataAlien)
    {
        int versionSearching = 2;// 1; //@JOB@

        if (Storage.Person.PersonPriority == null)
        {
            Storage.EventsUI.ListLogAdd = "### GetAlienNextTargetObject >> PersonPriority is null";
            Storage.Person.LoadPriorityPerson();
            result = null;
            return;
        }
        if (dataAlien == null)
        {
            Storage.EventsUI.ListLogAdd = "### GetAlienNextTargetObject >> dataAlien is null";
            result = null;
            return;
        }

        //m_prioritysGet = PersonPriority[dataAlien.TypePrefab];
        //int distantionFind = UnityEngine.Random.Range(2, 15);

        //v.1
        if (versionSearching == 1)
        {
            //result = FindFromLocation(dataAlien.Position, distantionFind, prioritys, dataAlien.Id, dataAlien.TypePrefab);
            //result = Helper.FindFromLocation(dataAlien, distantionFind);
            temp_distantionFind = UnityEngine.Random.Range(2, 15);
            Helper.FindFromLocation_Cache(ref result, dataAlien, temp_distantionFind);
        }
        else //v.3
        {
            if (job != null)
            {
                //fix job
                bool isCompletedMission = job != null &&
                                          dataAlien.Inventory != null &&
                                          dataAlien.Inventory.NameInventopyObject == job.TargetResource.ToString();

                switch (job.JobTo)
                {
                case TypesJobTo.ToPortal:
                    if (isCompletedMission)
                    {
                        if (dataAlien.PortalId == null)
                        {
                            Storage.PortalsManager.SetHome(dataAlien);
                        }

                        var info = ReaderScene.GetInfoID(dataAlien.PortalId);
                        if (info != null)
                        {
                            result = info.Data;
                        }
                    }
                    break;

                default:
                    job = null;
                    break;
                }
            }
            if (result == null)
            {
                temp_distantionFind = UnityEngine.Random.Range(2, 150);
                if (dataAlien.Inventory != null && !dataAlien.Inventory.IsEmpty && dataAlien.Inventory.TypeInventoryObject.IsPrefab())//FIX%CLUSTER
                {
                    Storage.PortalsManager.FindJobBuildLocation(ref result, ref job, dataAlien, temp_distantionFind);
                }
                if (result == null)
                {
                    CeckJobPass(ref result, dataAlien);
                    if (result == null)
                    {
                        Storage.Person.FindJobResouceLocation(ref result, ref job, dataAlien, temp_distantionFind);
                    }
                }
                if (result == null)
                {
                    temp_distantionFind = UnityEngine.Random.Range(2, 25);//15
                    Helper.FindFromLocation_Cache(ref result, dataAlien, temp_distantionFind);
                }
            }
        }
        //v.2
        //if (versionSearching == 2)
        //{
        //    string fieldName = Helper.GetNameFieldPosit(dataAlien.Position.x, dataAlien.Position.y);
        //    Vector2 posField = Helper.GetPositByField(fieldName);
        //    Vector2Int posFieldInt = new Vector2Int((int)posField.x, (int)posField.y);
        //    ReaderScene.DataInfoFinder finder = ReaderScene.GetDataInfoLocationFromID((int)posFieldInt.x, (int)posFieldInt.y, distantionFind, dataAlien.TypePrefab, dataAlien.Id);
    }