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); //} } }
public void AddResourceFromAlien(ModelNPC.PortalData portal, ModelNPC.GameDataAlien alien) { DataObjectInventory existRes = DataObjectInventory.EmptyInventory(); //>INV> try { if (portal.Resources == null) //fix null { portal.Resources = new List <DataObjectInventory>(); } existRes = portal.Resources.Where(p => p.TypeInventoryObject == alien.Inventory.TypeInventoryObject).FirstOrDefault(); }catch (System.Exception ex) { Debug.Log(Storage.EventsUI.ListLogAdd = string.Format("###### AddResourceFromAlien error: {0}", ex)); } if (existRes == null) { portal.Resources.Add(new DataObjectInventory(alien.Inventory)); } else { existRes.Count += alien.Inventory.Count; } alien.Inventory.Clear(); }
public void 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; } } } }
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; } }
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); }
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; } }
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); }
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 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; } }
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(); } } }
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); }
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(); }
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); }
//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; } } } }
private void PortalProcess(ModelNPC.PortalData p_portal) { if (p_portal.ChildrensId == null) { p_portal.ChildrensId = new List <string>(); } int preCountChild = p_portal.ChildrensId.Count; bool isProgress; bool isTimeValid = p_portal.LastTimeFabrication + SettingPortals.PeriodIncubation < Time.time; bool isNotAllLimit = p_portal.ChildrensId.Count < SettingPortals.AllLimitNPC; if (SettingPortals.AllLimitNPC == 0) { SettingPortals.AllLimitNPC = 1; } if (SettingPortals.AllLimitNPC < SettingPortals.StartLimitNPC) { SettingPortals.AllLimitNPC = SettingPortals.StartLimitNPC; } //foreach(DataObjectInventory resource in p_portal.Resources) if (isNotAllLimit && isTimeValid && p_portal.Resources != null && p_portal.Resources.Count > 0) { Storage.EventsUI.ListLogAdd = "PortalWork...."; Storage.EventsUI.SetMessageBox = "PortalWork...."; for (int i = p_portal.Resources.Count() - 1; i >= 0; i--) { m_resourceNext = p_portal.Resources[i]; m_listResourceWork = ResourcesFabrications[p_portal.TypeBiom]; m_workResource = m_listResourceWork.Find(p => p.ResouceInventory == m_resourceNext.TypeInventoryObject); if (m_workResource != null) { if (m_resourceNext.Count >= m_workResource.LimitToBeginProcess) { //isNotProgress = preCountChild == p_portal.ChildrensId.Count && p_portal.CurrentProcess == TypeResourceProcess.None; isProgress = preCountChild != p_portal.ChildrensId.Count && p_portal.CurrentProcess != TypeResourceProcess.None; if (!isProgress) { //Begin portal process incubation on Full resources StartPortalProcess(m_workResource.BeginProcess, p_portal, i, m_workResource); //isIncubationValid = false; } } } } } isProgress = preCountChild != p_portal.ChildrensId.Count;// && isIncubationValid; if (isProgress == false) { //if (p_portal.CurrentProcess == TypeResourceProcess.None) if (p_portal.CurrentProcess == TypeResourceProcess.None || (!p_portal.IsReality && p_portal.CurrentProcess == TypeResourceProcess.Incubation)) //FIX<<>>INCUBATION { bool isNotStartLimit = p_portal.ChildrensId.Count < SettingPortals.StartLimitNPC; //Begin portal process on Time if (isNotStartLimit && isTimeValid) { StartPortalProcess(TypeResourceProcess.Incubation, p_portal); isProgress = true; } } } // - Resources Production if (!isProgress && p_portal.CurrentProcess == TypeResourceProcess.None && isTimeValid && p_portal.Resources != null && p_portal.Resources.Count > 0) { isProgress = FabricationProduction(p_portal); } if (isProgress) { p_portal.EndFabrication(); } }
public 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; }
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; } }
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); }
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(); }
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); }