void FindBuildMaterials(BuildMaterial.Type type) { // find closest build material source if (gm.buildMaterialSources.Count > 0) { currentTask = Task.GatherMaterials; List <BuildMaterialSource> materialSourcesReady = new List <BuildMaterialSource>(); foreach (BuildMaterialSource bms in gm.buildMaterialSources) { if (bms.materialsCurrent > 0 && !bms.hc.characterWhoTargeted && bms.materialType == type) { materialSourcesReady.Add(bms); } } BuildMaterialSource closestSource = null; float distance = 1000; if (materialSourcesReady.Count > 0) { // find closest tree with fruits foreach (BuildMaterialSource bms in materialSourcesReady) { float newDistance = Vector3.Distance(bms.transform.position, transform.position); if (newDistance <= distance) { distance = newDistance; closestSource = bms; } } if (closestSource != null) { closestSource.hc.characterWhoTargeted = hc; targetObject = closestSource.hc; hc.movement.Move(closestSource.gameObject); StartCoroutine(GetDistanceToTarget()); } else { Invoke("ChooseTask", 1); } } } }
public void PickUpMaterial(BuildMaterial.Type type) { BuildMaterial closestMaterial = null; float distance = 1000; List <BuildMaterial> materialsOnLevel = new List <BuildMaterial>(); if (type == BuildMaterial.Type.Rock) { materialsOnLevel = new List <BuildMaterial>(gm.rock); } else if (type == BuildMaterial.Type.Wood) { materialsOnLevel = new List <BuildMaterial>(gm.wood); } foreach (BuildMaterial bm in materialsOnLevel) { if (!bm.usedInBuilding) { float newDistance = Vector3.Distance(transform.position, bm.transform.position); if (newDistance <= distance) { distance = newDistance; closestMaterial = bm; } } } if (closestMaterial != null) { closestMaterial.hc.characterWhoTargeted = hc; targetObject = closestMaterial.hc; hc.movement.Move(closestMaterial.gameObject); StartCoroutine(GetDistanceToTarget()); } else { Invoke("ChooseTask", 1); } }