- Home /
Generate objects in a square?
Hello, I've got a farming AI in my game that makes my npc plant a crop if some requirements are met, and always place it two units away from the newest planted current existing crop. The problem is that the npc will go and harvest the crops on the end of a line, and then go to the front of the line to plant more crops. I'd rather that they just plant crops in a square so that is looks less horrible and more like a field. I'm thinking that the best way to do this would be for the npc to plant crops where there is an empty space and where there will be the largest amount of crops around the empty space; this by defualt should cause the arrangement of crops to look more like a square field, as well as cause the npc to go and plant a crop if there is an empty space in the middle of the field. As a side-note, the npc currently uses its own hunger bar to fuel planting crops. I'll post the crop planting part of my horrid script, but the whole script is around five-hundred lines of messy code.
if (IsFarmer = true && SetSize >= 1) {
Forage = false;
Farming = true;
if (PlantedCrop != null){
if (Vector3.Distance (Mob.transform.position, PlantedCrop.transform.position) <= 5) {
if (Mathf.Abs (PlantedCrop.transform.position.z - Mob.transform.position.z) < Mathf.Abs (PlantedCrop.transform.position.x - Mob.transform.position.x)) {
PlantedCrop = Instantiate (Crop, PlantedCrop.transform.position + new Vector3 (0, 0, 1), Quaternion.identity) as GameObject;
PlantedCrop.name = PlantedCrop.name + " (" + Mob.name + ")";
Hunger += -5 / VolumeSize;
}
if (Mathf.Abs (PlantedCrop.transform.position.z - Mob.transform.position.z) > Mathf.Abs (PlantedCrop.transform.position.x - Mob.transform.position.x)) {
PlantedCrop = Instantiate (Crop, PlantedCrop.transform.position + new Vector3 (1, 0, 0), Quaternion.identity) as GameObject;
PlantedCrop.name = Crop.name + " (" + Mob.name + ")";
Hunger += -5 / VolumeSize;
}
} else {
if (Mathf.Abs (Mob.transform.position.x) - Mathf.Abs (PlantedCrop.transform.position.x) < Mathf.Abs (Mob.transform.position.z) - Mathf.Abs (Crop.transform.position.x)) {
DestinationPoint = PlantedCrop.transform.position + new Vector3 (2, 0, 0);
NavAgent.SetDestination (DestinationPoint);
}
if (Mathf.Abs (Mob.transform.position.x) - Mathf.Abs (PlantedCrop.transform.position.x) > Mathf.Abs (Mob.transform.position.z) - Mathf.Abs (Crop.transform.position.x)) {
DestinationPoint = PlantedCrop.transform.position + new Vector3 (0, 0, 2);
NavAgent.SetDestination (DestinationPoint);
}
}
} else {
PlantedCrop = Instantiate (Crop, transform.position + (transform.forward * 2), transform.rotation) as GameObject;
PlantedCrop.name = PlantedCrop.name + " (" + Mob.name + ")";
PlantedCrop.GetComponent<CropScript>().Owner = Mob;
Hunger += -5 / VolumeSize;
}
} else {
Your answer
Follow this Question
Related Questions
Ai trigger 0 Answers
How to assign a transform object to Prefab ? 3 Answers
Dynamic placement of AI 1 Answer