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(); }
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); } } }
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); } ; }
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; } } }
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 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(); } } }
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); }
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 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)); }
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); }
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; }
/* * 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); }