//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);
            }
        }
    }
 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);
     }
 }
Example #3
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");
        }
    }
Example #4
0
        //Clear location for portal
        public void ClearLocationAndCreateBiomFloor(int fieldX, int fieldY)
        {
            var          portal     = this;
            TypesBiomNPC typePortal = portal.TypeBiom;

            string            nameField    = string.Empty;
            List <Vector2Int> findedFileds = new List <Vector2Int>();

            Helper.GetSpiralFields(ref findedFileds, fieldX, fieldY, BuildSize);
            findedFileds.Add(new Vector2Int(fieldX, fieldY));
            foreach (Vector2Int fieldNext in findedFileds)
            {
                Helper.GetNameField_Cache(ref nameField, fieldNext.x, fieldNext.y);
                GenericWorldManager.ClearLayerForStructure(nameField, true);
                SaveLoadData.TypePrefabs portalFloorType = ManagerPortals.PortalBiomFloorsBase[typePortal];

                //Create object Biom Floor
                var    objDataSave = BilderGameDataObjects.BildObjectData(portalFloorType);
                string nameObject  = string.Empty;
                Helper.CreateName_Cache(ref nameObject, portalFloorType.ToString(), nameField, "-1");
                objDataSave.Position = Helper.NormalizFieldToWorld(fieldNext);
                Storage.Data.AddDataObjectInGrid(objDataSave, nameField, "GenericPortal");
                objDataSave.SetNameObject(nameObject, true);

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

                //... Check on Real
                bool isZonaReal = Helper.IsValidPiontInZona(objDataSave.Position.x, objDataSave.Position.y);
                if (!objDataSave.IsReality && isZonaReal)
                {
                    Storage.GenGrid.LoadObjectToReal(nameField);
                }
            }
        }
Example #5
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;
    }
    private void CheckComplitionMove()
    {
        if (m_dataNPC == null || m_MeMovement == null || m_MeAnimation == null)
        {
            return;
        }

        Vector3 targetPosition = m_dataNPC.TargetPosition;

        m_MeMovement = targetPosition - transform.position;
        if (m_MeMovement != new Vector2())
        {
            if (m_MeMovement.x != 0)
            {
                bool isRight = m_MeMovement.x > 0;
                //<<ANIMATION>>
                m_MeAnimation.PersonLook(isRight);
            }
        }

        bool isCompletedMoving = false;

        isCompletedMoving = TestMoveTargetLock();
        if (isCompletedMoving) //LOCK
        {
            RequestActionNPC(m_dataNPC, NameActionsPerson.IdleLock, this);
            int colWay = UnityEngine.Random.Range(1, 4);
            foreach (int i in Enumerable.Range(0, colWay))
            {
                RequestActionNPC(m_dataNPC, NameActionsPerson.TargetLocal, this);
            }
            RequestActionNPC(m_dataNPC, NameActionsPerson.TargetBackToBase, this);
        }
        else
        {
            //test on Structure //!FIX MOVE TARGET!
            bool p_isLarge = IsValidLargeLock(false);

            //float dist = Vector3.Distance(targetPosition, transform.position);
            //isCompletedMoving = dist < MinDistEndMove;
            //if (isCompletedMoving) //END WAY TO BASE TARGET
            if (Helper.DistanceIsFinish(targetPosition, transform.position, p_isLarge))
            {
                //@JOB@
                if (AlienJobsManager.CheckJobAlien(m_dataNPC, this, false) == false)
                {
                    RequestActionNPC(m_dataNPC, NameActionsPerson.Idle, this);
                    RequestActionNPC(m_dataNPC, NameActionsPerson.Target, this);
                }
                isCompletedMoving = true;
            }
        }

        bool isAnimateMove = (ActionPerson == NameActionsPerson.Move) && isCompletedMoving == false;

        //<<ANIMATION>>
        if (m_MeAnimation != null)
        {
            m_MeAnimation.PersonMove(isAnimateMove);
        }
    }
    public static void ActionTarget(ModelNPC.PersonData dataNPC, GameActionPersonController controller)
    {
        if (ActionTargetIsLock)
        {
            Debug.Log(Storage.EventsUI.ListLogAdd = ".....ActionTarget is LOCK");
            return;
        }
        ActionTargetIsLock = true;

        //Storage.EventsUI.ListLogAdd = "ActionTarget .... ReaderSceneIsValid=" + Storage.Instance.ReaderSceneIsValid;
        temp_job = null;

        if (!Storage.Instance.ReaderSceneIsValid)// && TimeEndCurrentAction < Time.time)
        {
            ActionTargetLocal(dataNPC, controller);
            ActionTargetIsLock = false;
            return;
        }

        Storage.EventsUI.ListLogAdd = "ActionTarget ....!!!";

        //string tempID = dataNPC.TargetID;
        string indErr = "0";

        try {
            indErr = "1";
            GetAlienData(dataNPC).OnTargetCompleted();
            indErr = "2";
            //m_TargetObject = Storage.Person.GetAlienNextTargetObject(GetAlienData(dataNPC));
            m_TargetObject = null;
            //@JOB@
            temp_job = dataNPC.Job;
            //Storage.Person.GetAlienNextTargetObject(ref m_TargetObject, ref temp_job, GetAlienData(dataNPC));
            AlienJobsManager.GetAlienNextTargetObject(ref m_TargetObject, ref temp_job, GetAlienData(dataNPC));
        }
        catch (Exception ex)
        {
            Storage.EventsUI.ListLogAdd = "##### ActionTarget " + ex.Message;
            ActionTargetIsLock          = false;
            return;
        }

        //test
        if (m_TargetObject == null)
        {
            Storage.EventsUI.ListLogAdd = "*** " + dataNPC.NameObject + " ==> empty";
        }
        else
        {
            Storage.EventsUI.ListLogAdd = "*** " + dataNPC.NameObject + " ==> " + m_TargetObject.NameObject;
        }

        if (m_TargetObject == null)
        {
            GetAlienData(dataNPC).SetTargetPosition();
        }
        else
        {
            var targetPosition = m_TargetObject.Position;
            dataNPC.TargetID = m_TargetObject.Id;
            //FIX base>>ToPortal
            (dataNPC as ModelNPC.GameDataAlien).BaseLockedTargetID = dataNPC.TargetID;
            dataNPC.SetTargetPosition(targetPosition);
            dataNPC.Job = temp_job;//@JOB@
        }

        ExecuteActionNPC(dataNPC, NameActionsPerson.Move, controller);

        if (controller != null)
        {
            controller.DrawRayTarget(); //TEST
        }
        ActionTargetIsLock = false;
    }