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); } }
private void Awake() { string typePrefub = this.gameObject.tag.ToString(); if (this.gameObject == null) { return; } if (this.gameObject == null) { return; } //if (PoolGameObjects.IsUseTypePoolPrefabs) //$$$ //{ //---------- $$$FLC PoolGameObjects.TypePoolPrefabs typePool = PoolGameObjects.TypePoolPrefabs.PoolFloor; bool isValid = System.Enum.IsDefined(typeof(PoolGameObjects.TypePoolPrefabs), this.gameObject.tag); if (isValid == false) { //Debug.Log("!!!!!!!!!!!!! ERROR TAG OLD " + this.gameObject.tag); //$$$ if (this.gameObject.tag == "PrefabUfo") { typePool = PoolGameObjects.TypePoolPrefabs.PoolPersonUFO; } else if (this.gameObject.tag == "PrefabBoss") { typePool = PoolGameObjects.TypePoolPrefabs.PoolPersonBoss; } else { Debug.Log("!!!!!!!!!!!!! LEGACY CODE " + this.gameObject.tag); //$$$ typePool = PoolGameObjects.TypePoolPrefabs.PoolWall; } } //---------- else { typePool = (PoolGameObjects.TypePoolPrefabs)Enum.Parse(typeof(PoolGameObjects.TypePoolPrefabs), this.gameObject.tag); } if (Helper.IsTerraAlpha(typePool)) { IsMeTerra = true; } //} //else //{ // SaveLoadData.TypePrefabs typePrefab = Helper.GetTypePrefab(this.gameObject); // if (Helper.IsTerraAlpha(typePrefab)) // { // IsMeTerra = true; // } //} m_spriteRenderer = GetComponent <SpriteRenderer>(); m_DataController = GetComponent <GameObjecDataController>(); }
public static bool IsTerraLayer(PoolGameObjects.TypePoolPrefabs typePrefab) { switch (typePrefab) { case PoolGameObjects.TypePoolPrefabs.PoolFlore: case PoolGameObjects.TypePoolPrefabs.PoolWall: case PoolGameObjects.TypePoolPrefabs.PoolWood: return(true); } return(false); }
public static int GetPriorityPower(ModelNPC.ObjectData objData, PriorityFinder priority) { int power = 0; SaveLoadData.TypePrefabs typeModel = objData.TypePrefab; PoolGameObjects.TypePoolPrefabs typePool = objData.TypePoolPrefab; TypesBiomNPC biomNPC = GetBiomByTypeModel(typeModel); int slotPower = 3; int maxtPrioprity = 10; //maxtPrioprity = priority.GetPrioritysTypeModel().Count() * slotPower; maxtPrioprity = GetPrioritysTypeModel(priority).Count() * slotPower; //foreach (SaveLoadData.TypePrefabs itemModel in priority.GetPrioritysTypeModel()) foreach (SaveLoadData.TypePrefabs itemModel in GetPrioritysTypeModel(priority)) { if (itemModel == typeModel) { power += maxtPrioprity; break; } maxtPrioprity -= slotPower; } maxtPrioprity = priority.PrioritysTypeBiomNPC.Count() * slotPower; foreach (TypesBiomNPC itemBiom in priority.PrioritysTypeBiomNPC) { if (itemBiom == biomNPC) { power += maxtPrioprity; break; } maxtPrioprity -= slotPower; } maxtPrioprity = priority.PrioritysTypeBiomNPC.Count() * slotPower; foreach (PoolGameObjects.TypePoolPrefabs itemPool in priority.PrioritysTypePool) { if (itemPool == typePool) { power += maxtPrioprity; break; } maxtPrioprity -= slotPower; } return(power); }
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 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); }