//public bool IsLocked = false; //public string TempLockedTargetID; public static void CheckComplitionMoveInDream(ModelNPC.GameDataAlien dataNPC) { //TEST if (dataNPC.IsReality) { Debug.Log(Storage.EventsUI.ListLogAdd = "### CheckComplitionMoveInDream dataNPC IsReality !!!"); return; } Vector3 newCurrentPosition = GetAlienData(dataNPC).Position;// .MovePosition; float dist = Vector3.Distance(dataNPC.TargetPosition, newCurrentPosition); //string nameFiledTarget = Helper.GetNameField(dataNPC.TargetPosition); //string nameFiledCurrent = Helper.GetNameField(newCurrentPosition); string nameFiledTarget = Helper.GetNameFieldPosit(dataNPC.TargetPosition.x, dataNPC.TargetPosition.y); string nameFiledCurrent = Helper.GetNameFieldPosit(newCurrentPosition.x, newCurrentPosition.y); //End move to Target bool trueDist = dist < MinDistEndMove; bool trueField = nameFiledTarget == nameFiledCurrent; if (trueDist || trueField) { //@JOB@ if (AlienJobsManager.CheckJobAlien(dataNPC) == false) { RequestActionNPC(dataNPC, NameActionsPerson.Idle, null); } } }
public static void CheckComplitionLoot(ModelNPC.GameDataAlien dataNPC, GameActionPersonController controller) { //if (AlienJobsManager.CheckJobAlien(dataNPC) == false) if (AlienJobsManager.CheckJobAlien(dataNPC, isCheckDistance: false) == false) { RequestActionNPC(dataNPC, NameActionsPerson.Target, controller); } }
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"); } }
//Clear location for portal public void ClearLocationAndCreateBiomFloor(int fieldX, int fieldY) { var portal = this; TypesBiomNPC typePortal = portal.TypeBiom; string nameField = string.Empty; List <Vector2Int> findedFileds = new List <Vector2Int>(); Helper.GetSpiralFields(ref findedFileds, fieldX, fieldY, BuildSize); findedFileds.Add(new Vector2Int(fieldX, fieldY)); foreach (Vector2Int fieldNext in findedFileds) { Helper.GetNameField_Cache(ref nameField, fieldNext.x, fieldNext.y); GenericWorldManager.ClearLayerForStructure(nameField, true); SaveLoadData.TypePrefabs portalFloorType = ManagerPortals.PortalBiomFloorsBase[typePortal]; //Create object Biom Floor var objDataSave = BilderGameDataObjects.BildObjectData(portalFloorType); string nameObject = string.Empty; Helper.CreateName_Cache(ref nameObject, portalFloorType.ToString(), nameField, "-1"); objDataSave.Position = Helper.NormalizFieldToWorld(fieldNext); Storage.Data.AddDataObjectInGrid(objDataSave, nameField, "GenericPortal"); objDataSave.SetNameObject(nameObject, true); //%CLUSTER FILL //if (objDataSave.IsFloor()) //{ Vector2Int posField = Helper.GetFieldPositByWorldPosit(objDataSave.Position); int clusterSize = AlienJobsManager.GetClusterSize(posField.x, posField.y, objDataSave.TypePrefab); (objDataSave as ModelNPC.TerraData).ClusterFillSize = clusterSize; (objDataSave as ModelNPC.TerraData).DataCreate = DateTime.Now; //} //... Check on Real bool isZonaReal = Helper.IsValidPiontInZona(objDataSave.Position.x, objDataSave.Position.y); if (!objDataSave.IsReality && isZonaReal) { Storage.GenGrid.LoadObjectToReal(nameField); } } }
public void FindJobBuildLocation(ref ModelNPC.ObjectData result, ref AlienJob job, ModelNPC.GameDataAlien dataAien, int distantionWay) { if (!Storage.Person.CollectionAlienJob.ContainsKey(dataAien.TypePrefab)) { return; } ReaderScene.DataObjectInfoID info; ModelNPC.PortalData portal = null; List <string> listId; TypesBiomNPC biomType = Helper.GetBiomByTypeModel(dataAien.TypePrefab); SaveLoadData.TypePrefabs floorType = PortalBiomFloorsBase[biomType]; result = null; if (string.IsNullOrEmpty(dataAien.PortalId)) { return; } info = ReaderScene.GetInfoID(dataAien.PortalId); if (info == null) { return; } portal = info.Data as ModelNPC.PortalData; portal.ConstructionsId.TryGetValue(floorType, out listId); if (listId == null) { return; } List <AlienJob> jobs = null; Vector2Int test_fieldPos = Vector2Int.zero; Vector2Int keyField; int x = 0; int y = 0; string nameField = string.Empty; string key = string.Empty; bool isFieldJobValid = true; bool isValidFieldBuildFar = true; bool isValidFar = true; bool isInventoryContainTargetResource = false; temp_excludedFreeFileds.Clear(); //Get jobs Storage.Person.CollectionAlienJob.TryGetValue(dataAien.TypePrefab, out jobs); Helper.GetFieldPositByWorldPosit(ref x, ref y, dataAien.Position); temp_findedFloorsIdForBuild.Clear(); //Fill floors portal for building System.Random rnd = new System.Random(); temp_findedFloorsIdForBuild = listId.OrderBy(p => rnd.Next()).ToList(); List <ModelNPC.TerraData> floorsData = new List <ModelNPC.TerraData>(); foreach (string nextRndID in temp_findedFloorsIdForBuild) { info = ReaderScene.GetInfoID(nextRndID); if (info == null) { continue; } if (!(info.Data is ModelNPC.TerraData)) { continue; } floorsData.Add(info.Data as ModelNPC.TerraData); } //Floors portal foreach (ModelNPC.TerraData floorData in floorsData.OrderBy(p => p.ClusterFillSize)) { isValidFieldBuildFar = true; isFieldJobValid = true; keyField = Helper.GetFieldPositByWorldPosit(floorData.Position); //Select job by target resource foreach (AlienJob jobItem in jobs.Where(p => p.TargetResource == floorData.TypePrefab)) //fix all jobs for type Resource { job = jobItem; if (job != null) { if (job.Job != TypesJobs.Build) { continue; } // Test field on free PoolGameObjects.TypePoolPrefabs typePoolResult = AlienJobsManager.CheckFieldJobValid(ref isFieldJobValid, job, floorData); //Filter: Build switch (job.Job) { case TypesJobs.Build: isValidFar = false; //Test inventory filled isInventoryContainTargetResource = dataAien.Inventory != null && dataAien.Inventory.EqualsInv(job.ResourceResult); if (!isInventoryContainTargetResource) { isValidFar = false; } else if (typePoolResult == PoolGameObjects.TypePoolPrefabs.PoolFloor) { //test near objects type of me (Cluster) //AlienJobsManager.IsMeCluster(ref isValidFar, keyField.x, keyField.y, job.ResourceResult, job.ClusterSize); job = null; continue; } else { //Build Prefab if (isValidFieldBuildFar) //Test Free location { //isValidFieldBuildFar = IsFreeLocationPortalConstruction(ref temp_excludedFreeFileds, // keyField.x, keyField.y, job.BuildingyardSize, dataAien.Inventory.TypePrefabObject, portal); //TypesBiomNPC isValidFieldBuildFar = IsFreeLocationPortalConstruction(ref temp_excludedFreeFileds, keyField.x, keyField.y, job.BuildingyardSize, job.ResourceResult, portal); //TypesBiomNPC } isValidFar = isValidFieldBuildFar; } if (!isValidFar || !isFieldJobValid) { job = null; continue; } break; } result = floorData; return; } } } temp_findedFloorsIdForBuild.Clear(); dataAien.JobPass = 0; job = null; }
private void CheckComplitionMove() { if (m_dataNPC == null || m_MeMovement == null || m_MeAnimation == null) { return; } Vector3 targetPosition = m_dataNPC.TargetPosition; m_MeMovement = targetPosition - transform.position; if (m_MeMovement != new Vector2()) { if (m_MeMovement.x != 0) { bool isRight = m_MeMovement.x > 0; //<<ANIMATION>> m_MeAnimation.PersonLook(isRight); } } bool isCompletedMoving = false; isCompletedMoving = TestMoveTargetLock(); if (isCompletedMoving) //LOCK { RequestActionNPC(m_dataNPC, NameActionsPerson.IdleLock, this); int colWay = UnityEngine.Random.Range(1, 4); foreach (int i in Enumerable.Range(0, colWay)) { RequestActionNPC(m_dataNPC, NameActionsPerson.TargetLocal, this); } RequestActionNPC(m_dataNPC, NameActionsPerson.TargetBackToBase, this); } else { //test on Structure //!FIX MOVE TARGET! bool p_isLarge = IsValidLargeLock(false); //float dist = Vector3.Distance(targetPosition, transform.position); //isCompletedMoving = dist < MinDistEndMove; //if (isCompletedMoving) //END WAY TO BASE TARGET if (Helper.DistanceIsFinish(targetPosition, transform.position, p_isLarge)) { //@JOB@ if (AlienJobsManager.CheckJobAlien(m_dataNPC, this, false) == false) { RequestActionNPC(m_dataNPC, NameActionsPerson.Idle, this); RequestActionNPC(m_dataNPC, NameActionsPerson.Target, this); } isCompletedMoving = true; } } bool isAnimateMove = (ActionPerson == NameActionsPerson.Move) && isCompletedMoving == false; //<<ANIMATION>> if (m_MeAnimation != null) { m_MeAnimation.PersonMove(isAnimateMove); } }
public static void ActionTarget(ModelNPC.PersonData dataNPC, GameActionPersonController controller) { if (ActionTargetIsLock) { Debug.Log(Storage.EventsUI.ListLogAdd = ".....ActionTarget is LOCK"); return; } ActionTargetIsLock = true; //Storage.EventsUI.ListLogAdd = "ActionTarget .... ReaderSceneIsValid=" + Storage.Instance.ReaderSceneIsValid; temp_job = null; if (!Storage.Instance.ReaderSceneIsValid)// && TimeEndCurrentAction < Time.time) { ActionTargetLocal(dataNPC, controller); ActionTargetIsLock = false; return; } Storage.EventsUI.ListLogAdd = "ActionTarget ....!!!"; //string tempID = dataNPC.TargetID; string indErr = "0"; try { indErr = "1"; GetAlienData(dataNPC).OnTargetCompleted(); indErr = "2"; //m_TargetObject = Storage.Person.GetAlienNextTargetObject(GetAlienData(dataNPC)); m_TargetObject = null; //@JOB@ temp_job = dataNPC.Job; //Storage.Person.GetAlienNextTargetObject(ref m_TargetObject, ref temp_job, GetAlienData(dataNPC)); AlienJobsManager.GetAlienNextTargetObject(ref m_TargetObject, ref temp_job, GetAlienData(dataNPC)); } catch (Exception ex) { Storage.EventsUI.ListLogAdd = "##### ActionTarget " + ex.Message; ActionTargetIsLock = false; return; } //test if (m_TargetObject == null) { Storage.EventsUI.ListLogAdd = "*** " + dataNPC.NameObject + " ==> empty"; } else { Storage.EventsUI.ListLogAdd = "*** " + dataNPC.NameObject + " ==> " + m_TargetObject.NameObject; } if (m_TargetObject == null) { GetAlienData(dataNPC).SetTargetPosition(); } else { var targetPosition = m_TargetObject.Position; dataNPC.TargetID = m_TargetObject.Id; //FIX base>>ToPortal (dataNPC as ModelNPC.GameDataAlien).BaseLockedTargetID = dataNPC.TargetID; dataNPC.SetTargetPosition(targetPosition); dataNPC.Job = temp_job;//@JOB@ } ExecuteActionNPC(dataNPC, NameActionsPerson.Move, controller); if (controller != null) { controller.DrawRayTarget(); //TEST } ActionTargetIsLock = false; }