Exemple #1
0
    private void LateUpdate()
    {
        if (!m_isInit)
        {
            m_DataPortal = GetUpdateData();
            m_isInit     = true;
        }

        if (m_isInit)
        {
            CheckUpdateModelView();
            CheckUpdateStatusProcess();
            //if (m_stateAnimation == AnimationState.Run)
            //{
            //    //AnimationClip moveClip = m_animator.runtimeAnimatorController.animationClips[1];
            //    AnimatorStateInfo state = m_animator.GetCurrentAnimatorStateInfo(0);

            //    if (!m_animator.GetCurrentAnimatorStateInfo(0).IsName("PortalBlueEnterAnimation"))
            //        m_stateAnimation = AnimationState.Completed;
            //    if(state.speed==0)
            //        m_stateAnimation = AnimationState.Completed;
            //    //PlayIncubation(true);
            //}
        }
    }
Exemple #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();
    }
Exemple #3
0
    public void CreatePortal()
    {
        string[] portalsId = Storage.GenWorld.GenericPortal(1, SaveLoadData.TypePrefabs.PortalBlue);
        foreach (string idPortal in portalsId)
        {
            if (ReaderScene.ExistID(idPortal))
            {
                var info = ReaderScene.GetInfoID(idPortal);
                ModelNPC.PortalData portalNext = info.Data as ModelNPC.PortalData;
                if (portalNext != null)
                {
                    Portals.Add(portalNext);

                    //... Check on Real
                    string fieldName = string.Empty;
                    Helper.GetNameFieldByPosit(ref fieldName, portalNext.Position);
                    bool isZonaReal = Helper.IsValidPiontInZona(portalNext.Position.x, portalNext.Position.y);
                    if (!isZonaReal)
                    {
                        portalNext.IsReality = false;
                    }
                    if (!portalNext.IsReality && isZonaReal)
                    {
                        Storage.GenGrid.LoadObjectToReal(fieldName);
                    }
                    //else
                    //     portalNext.IsReality = false;
                }
            }
        }
    }
Exemple #4
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;
        }
    }
Exemple #5
0
    IEnumerator DispatcherPortals()
    {
        float timeWait    = 10f; // 5f;
        bool  isCompleted = false;

        yield return(null);

        while (!isCompleted)
        {
            if (!Storage.Instance.ReaderSceneIsValid)
            {
                yield return(new WaitForSeconds(timeWait));

                continue;
            }
            yield return(null);

            if (Portals == null || Portals.Count == 0)
            {
                yield return(new WaitForSeconds(timeWait));

                if (Portals.Count == 0)
                {
                    CreatePortal();
                }
                continue;
            }
            if (CurrentIndex >= Portals.Count)
            {
                CurrentIndex = 0;
            }

            CurrentPortal = Portals[CurrentIndex];
            if (CurrentPortal == null)
            {
                Debug.Log("######### DispatcherPortals.CurrentPortal == null");
                yield return(new WaitForSeconds(timeWait));

                continue;
            }
            if (CurrentPortal.Id == null)
            {
                Debug.Log("######### DispatcherPortals.CurrentPortal ID is null");
                yield return(new WaitForSeconds(timeWait));

                continue;
            }

            CurrentID  = CurrentPortal.Id;
            InfoPortal = CurrentPortal.GetInfo();
            PortalProcess(CurrentPortal);

            yield return(new WaitForSeconds(timeWait));

            CurrentIndex++;
        }
        yield return(null);
    }
    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);
    }
Exemple #7
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;
        }
    }
Exemple #8
0
    public static bool IsValidFieldInZonaPortal(float x, float y, ModelNPC.PortalData portal)
    {
        int     zonaPortal     = 3;
        Vector2 posFieldPortal = NormalizPosToField(portal.Position.x, portal.Position.y);
        Rect    rect           = new Rect((int)(posFieldPortal.x - zonaPortal),
                                          (int)(posFieldPortal.y - zonaPortal),
                                          (int)(posFieldPortal.x + zonaPortal),
                                          (int)(posFieldPortal.y + zonaPortal));

        if (rect.Contains(new Vector2(x, y)))
        {
            return(false);
        }
        return(true);
    }
    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 #10
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");
        }
    }
Exemple #11
0
    //private void  GetFabricaByResource(ref PortalResourceFabrication resultFabrica,  ModelNPC.PortalData p_portal, string p_nameResourceInv)
    //{
    //    resultFabrica = ResourcesFabrications[p_portal.TypeBiom].Find(f => f.ResouceInventory.ToString() == p_nameResourceInv);
    //}

    //Start Portal process
    private void StartPortalProcess(TypeResourceProcess workProcess, ModelNPC.PortalData p_portal, int index = -1, PortalResourceFabrication fabrication = null)
    {
        switch (workProcess)
        {
        case TypeResourceProcess.Incubation:
            // *  Start Action
            IncubationProcess(p_portal);
            // *  Remove resource
            if (index != -1)
            {
                p_portal.Resources[index].Count -= fabrication.LimitToBeginProcess;
                if (p_portal.Resources[index].Count < 0)
                {
                    p_portal.Resources.RemoveAt(index);
                }
            }
            break;
        }
    }
Exemple #12
0
 private void CheckUpdateModelView()
 {
     if (temp_name != name)
     {
         temp_name    = name;
         m_DataPortal = GetUpdateData();
         if (m_DataPortal == null)
         {
             Debug.Log("########### ERROR CheckUpdateModelView  m_DataPortal is null");
             return;
         }
         bool isNewModel = temp_TypePrefab != m_DataPortal.TypePrefab;
         if (isNewModel)
         {
             temp_TypePrefab = m_DataPortal.TypePrefab;
             UpdateMeModelView();
         }
     }
 }
Exemple #13
0
    private bool IsFreeLocationPortalConstruction(
        ref Dictionary <Vector2Int, bool> excludedFreeFileds,
        int x, int y,
        int lenSize,
        SaveLoadData.TypePrefabs buildType,
        ModelNPC.PortalData portal)
    {
        ReaderScene.DataObjectInfoID infoNext;
        Vector2       requestPosition = new Vector2(x, y);
        Vector2       biuldPosition;
        int           portaBuildingyardSize = 2;
        List <string> bouldingId;

        portal.ConstructionsId.TryGetValue(buildType, out bouldingId);
        if (bouldingId == null)
        {
            return(true);
        }

        biuldPosition = Helper.GetFieldPositByWorldPosit(portal.Position);
        if (Vector3.Distance(requestPosition, biuldPosition) < portaBuildingyardSize)
        {
            return(false);
        }

        foreach (var nextID in bouldingId)
        {
            infoNext = ReaderScene.GetInfoID(nextID);
            if (infoNext == null || infoNext.Data == null)
            {
                continue;
            }
            biuldPosition = Helper.GetFieldPositByWorldPosit(infoNext.Data.Position);
            if (Vector3.Distance(requestPosition, biuldPosition) < lenSize)
            {
                return(false);
            }
        }
        return(true);
    }
Exemple #14
0
    public override void OnInspectorGUI()
    {
        var sceneDebug = (SceneDebuger)target;

        if (sceneDebug == null)
        {
            EditorGUILayout.HelpBox("Property: SceneDebuger is empty! 1", MessageType.Error);
            return;
        }
        newSO.Update();

        //EditorGUI.BeginChangeCheck();
        //DrawDefaultInspector();
        //if (EditorGUI.EndChangeCheck()) {
        //    serializedObject.ApplyModifiedProperties(); // поскольку изменили значение PropertyField (scriptableObjectData)
        //                                                // нужно применить изменения и только после этого
        //                                                // перезагрузить Editor scriptableObjectData
        //    ResetPropertyEditor();
        //}

        GUILayout.BeginVertical();
        EditorGUILayout.Space();

        if (IsLog == null)
        {
            EditorGUILayout.HelpBox("Property: IsLog is empty! 1", MessageType.Error);
            return;
        }
        if (LivePersonsCount == null)
        {
            EditorGUILayout.HelpBox("Property: LivePersonsCount is empty!", MessageType.Error);
            return;
        }


        IsLog.boolValue = EditorGUILayout.Toggle("Show log actions", IsLog.boolValue);
        IsShowTittlePerson.boolValue     = EditorGUILayout.Toggle("Show tittle Person", IsShowTittlePerson.boolValue);
        IsShowTittleInfoPerson.boolValue = EditorGUILayout.Toggle("Show tittle Person Info action", IsShowTittleInfoPerson.boolValue);
        IsShowTargetRayPerson.boolValue  = EditorGUILayout.Toggle("Show target ray Person", IsShowTargetRayPerson.boolValue);

        EditorGUILayout.Space();
        //@@$$
        //AutoRefreshOn.boolValue = EditorGUILayout.Toggle("Auto Refresh", AutoRefreshOn.boolValue);

        EditorGUI.BeginChangeCheck(); //@@$$
        AutoRefreshOn.boolValue = EditorGUILayout.Toggle("Auto Refresh", AutoRefreshOn.boolValue);
        if (EditorGUI.EndChangeCheck())
        {
            Storage.SceneDebug.DialogsClear();
        }

        RealDebugOn.boolValue = EditorGUILayout.Toggle("Real actions debug", RealDebugOn.boolValue);

        EditorGUILayout.Space();
        SpeedMovePersonInDream.floatValue = EditorGUILayout.Slider("Speed move Person in Dream", SpeedMovePersonInDream.floatValue, 1, 10);
        TimeRelax.floatValue             = EditorGUILayout.Slider("Time of Relax", TimeRelax.floatValue, 0, 1);
        TimeRefreshDebugScene.floatValue = EditorGUILayout.Slider("Delay update screen actions", TimeRefreshDebugScene.floatValue, 0.1f, 10);

        EditorGUILayout.Space();
        TimeWorkAction.floatValue          = EditorGUILayout.Slider("Time working", TimeWorkAction.floatValue, 1, 60);
        TimeLimitResetNavigator.floatValue = EditorGUILayout.Slider("Dispatcher time reset", TimeLimitResetNavigator.floatValue, 1, 60);

        EditorGUILayout.Space();

        IsClearTemplate.boolValue    = EditorGUILayout.Toggle("Clear template", IsClearTemplate.boolValue);
        TimeClearTemplate.floatValue = EditorGUILayout.Slider("Delay clear template dialogs", TimeClearTemplate.floatValue, 1, 10);


        EditorGUILayout.Space();
        EditorGUILayout.LabelField("Count DreamWork's: ",
                                   string.Format("{0}/{1}/{2}", sceneDebug.InfoCount, sceneDebug.LivePersonsCount, sceneDebug.LivePersonsStartCount));

        EditorGUILayout.Space();


        if (Storage.Instance != null && Storage.PortalsManager != null && Storage.PortalsManager.Portals.Count > 0)
        {
            if (m_timeUpdateUI < Time.time || m_portalNext == null)
            {
                m_timeUpdateUI = Time.time + 3f;
                if (m_portalIndexInfo >= Storage.PortalsManager.Portals.Count())
                {
                    m_portalIndexInfo = 0;
                }
                m_portalNext = Storage.PortalsManager.Portals[m_portalIndexInfo];
                m_portalIndexInfo++;
            }

            Helper.GetFieldPositByWorldPosit(ref m_xOut, ref m_yOut, m_portalNext.Position);
            m_childInfo = (m_portalNext.ChildrensId == null) ? "..." : m_portalNext.ChildrensId.Count.ToString();
            EditorGUILayout.LabelField("PORTAL: ", m_portalNext.TypeBiom.ToString());
            //GUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("   field: ", String.Format("{0}x{1}", m_xOut, m_yOut));
            EditorGUILayout.LabelField("   NPC: ", m_childInfo);
            //GUILayout.EndHorizontal();
            EditorGUILayout.LabelField("RESOURCES: ");
            if (m_portalNext.Resources != null)
            {
                foreach (var res in m_portalNext.Resources)
                {
                    EditorGUILayout.LabelField("   " + res.NameInventopyObject + ":", res.Count.ToString());
                }
            }
        }
        //}


        //EditorGUI.BeginDisabledGroup(true);
        //SettingsEditor.OnInspectorGUI(); //<<<<
        //EditorGUI.EndDisabledGroup();
        EditorGUILayout.EndVertical();

        newSO.ApplyModifiedProperties();

        //@@$$
        //if(!AutoRefreshOn.boolValue && stateAutoRefresh != AutoRefreshOn.boolValue)
        //    Storage.SceneDebug.DialogsClear();
    }
Exemple #15
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 #16
0
    //List<FieldRnd>

    public static void GetSpiralFields_Cache(ref List <FieldRnd> findedFileds, int x, int y, int lenSnake = 8, bool isTestZonaWorld = false, ModelNPC.PortalData portal = null, bool isRandomOrder = false)
    {
        //cacheSpiralFields = new CacheParamSpiralFields();

        temp_spatal.indexSingle       = 0;
        temp_spatal._single           = 1;
        temp_spatal.limitInvertSingle = 1;
        temp_spatal.indexFileds       = 0;
        temp_spatal.isValid           = true; // !isTestZonaWorls;
        //temp_spatal.isTestPortal = portal != null && !isTestZonaWorls;
        temp_spatal.index = 0;
        temp_spatal.nextF = 0;
        temp_spatal.Order = 0;


        for (temp_spatal.index = 0; temp_spatal.index < 20; temp_spatal.index++)
        {
            //X
            for (temp_spatal.nextF = 0; temp_spatal.nextF < temp_spatal.index; temp_spatal.nextF++)
            {
                x += temp_spatal._single;
                temp_spatal.isValid = true;
                if (isTestZonaWorld)
                {
                    temp_spatal.isValid = Helper.IsValidFieldInZonaWorld(x, y);
                }
                //FIX__FLOOR_BILD
                //if(portal !=null && temp_spatal.isValid)
                //    temp_spatal.isValid = IsValidFieldInZonaPortal(x, y, portal);

                if (temp_spatal.isValid)
                {
                    if (isRandomOrder)
                    {
                        temp_spatal.Order = UnityEngine.Random.Range(0, lenSnake);
                    }

                    findedFileds.Add(new FieldRnd(x, y, temp_spatal.Order));
                    temp_spatal.indexFileds++;
                }
                temp_spatal.indexSingle++;
                if (temp_spatal.indexFileds > lenSnake)
                {
                    return;
                }
                if (temp_spatal.indexSingle >= temp_spatal.limitInvertSingle)
                {
                    temp_spatal.limitInvertSingle += 2;
                    temp_spatal.indexSingle        = 0;
                    temp_spatal._single           *= -1;
                }
            }
            //Y
            for (temp_spatal.nextF = 0; temp_spatal.nextF < temp_spatal.index; temp_spatal.nextF++)
            {
                y += temp_spatal._single;
                temp_spatal.isValid = true;
                if (isTestZonaWorld)
                {
                    temp_spatal.isValid = Helper.IsValidFieldInZonaWorld(x, y);
                }
                //FIX__FLOOR_BILD
                //if (temp_spatal.isValid)
                //    temp_spatal.isValid = IsValidFieldInZonaPortal(x, y, portal);

                if (temp_spatal.isValid)
                {
                    if (isRandomOrder)
                    {
                        temp_spatal.Order = UnityEngine.Random.Range(0, lenSnake);
                    }

                    findedFileds.Add(new FieldRnd(x, y, temp_spatal.Order));
                    temp_spatal.indexFileds++;
                }
                temp_spatal.indexSingle++;
                if (temp_spatal.indexFileds > lenSnake)
                {
                    return;
                }
                if (temp_spatal.indexSingle >= temp_spatal.limitInvertSingle)
                {
                    temp_spatal.limitInvertSingle += 2;
                    temp_spatal.indexSingle        = 0;
                    temp_spatal._single           *= -1;
                }
            }
        }
    }
Exemple #17
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();
        }
    }
Exemple #18
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 #19
0
    public static void IncubationProcess(ModelNPC.PortalData p_portal, bool isCallFromReality = false)
    {
        p_portal.CurrentProcess = TypeResourceProcess.Incubation;
        bool isDreamworker = !p_portal.IsReality;

        if (isDreamworker || isCallFromReality)
        {
            GenericWorldManager.GenObjectWorldMode nodeGen = GenericWorldManager.GenObjectWorldMode.NPC;
            Vector3 posGen = p_portal.Position;

            GetGenericModeNPC.TryGetValue(p_portal.TypeBiom, out nodeGen);
            if (nodeGen.Equals(null))
            {
                Debug.Log("######### GetGenericModeNPC not found = " + p_portal.TypeBiom.ToString());
                return;
            }

            string  fieldName     = string.Empty;
            Vector3 positGen      = new Vector3();
            bool    isParkingFree = p_portal.ChildrenPreparationIncubation();
            if (isParkingFree)
            {
                positGen = p_portal.Position;
            }
            else
            {
                positGen = p_portal.SearchParking(ref fieldName);
            }

            if (positGen == Vector3.zero)
            {
                return;
            }

            if (fieldName == string.Empty)
            {
                Helper.GetNameFieldByPosit(ref fieldName, positGen);
            }

            SaveLoadData.TypePrefabs genNPC = Storage.GenWorld.GenObjectWorld(nodeGen);
            //TEST BILD
            genNPC = SaveLoadData.TypePrefabs.Inspector;

            ModelNPC.ObjectData objDataNPC = Storage.GenWorld.GenericPrefabOnWorld(genNPC, positGen);
            if (objDataNPC != null)
            {
                objDataNPC.PortalId = p_portal.Id;
                //p_portal.ChildrensId.Add(objDataNPC.Id);
                p_portal.AddChild(objDataNPC.Id);
                bool isZonaReal = Helper.IsValidPiontInZona(objDataNPC.Position.x, objDataNPC.Position.y);
                if (!isZonaReal)
                {
                    objDataNPC.IsReality = false;
                }
                if (!objDataNPC.IsReality && isZonaReal)
                {
                    Storage.GenGrid.LoadObjectToReal(fieldName);
                    Storage.EventsUI.ListLogAdd = ">>>>> IncubationProcess >>> LoadObjectToReal...";
                }
            }
            p_portal.CurrentProcess = TypeResourceProcess.None;
        }
    }
Exemple #20
0
    private bool FabricationProduction(ModelNPC.PortalData p_portal)
    {
        DataObjectInventory resInventory;
        List <PortalResourceFabrication> listFabrics = null;
        bool isStartProgress = false;
        int  caseBuild       = 7;
        int  totalResources  = p_portal.Resources.Sum(p => p.Count);
        int  limirProcess    = totalResources / caseBuild;

        if (limirProcess < 0)
        {
            limirProcess = 1;
        }
        if (limirProcess > 7)
        {
            limirProcess = 7;
        }

        Storage.EventsUI.ListLogAdd = "PortalWork fabrication.... RES: " + totalResources + "  pass:"******"## NOT Setting LimitStorage " + fabrica.SpawnResourceName);
                        }

                        //Check total storage resources
                        int totalStorageRes = 0;
                        var storageRes      = p_portal.Resources.Where(p => p.NameInventopyObject == fabrica.SpawnResourceName.ToString()).FirstOrDefault();
                        if (storageRes != null)
                        {
                            totalStorageRes = storageRes.Count;
                        }

                        //Check production
                        if (resInventory.Count >= fabrica.LimitToBeginProcess &&
                            totalStorageRes <= fabrica.LimitStorage)
                        {
                            //Begin progress
                            p_portal.Resources[i].Count -= fabrica.LimitToBeginProcess;
                            if (p_portal.Resources[i].Count <= 0)
                            {
                                p_portal.Resources.RemoveAt(i);
                            }
                            Storage.PortalsManager.AddResource(p_portal, fabrica.SpawnResourceName, 1);
                            Storage.EventsUI.ListLogAdd = "Fabrication >> " + resInventory.NameInventopyObject + " => " + fabrica.SpawnResourceName;
                            isStartProgress             = true;
                        }
                        break;
                    }
                    //if (isStartProgress)
                    //    break;
                }
            }
        }
        return(isStartProgress);
    }
Exemple #21
0
 private void GetFabricsByResource(ref List <PortalResourceFabrication> resultFabrics, ModelNPC.PortalData p_portal, string p_nameResourceInv)
 {
     resultFabrics = ResourcesFabrications[p_portal.TypeBiom].Where(f => f.ResouceInventory.ToString() == p_nameResourceInv).ToList();
 }
Exemple #22
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);
    }